久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2285|回復: 1
打印 上一主題 下一主題
收起左側

不帶ADC的OTP單片機實現電位計控制PWM程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:981957 發表于 2021-12-9 01:20 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
這方案比 555 的便宜, 不用外接他和電阻電容
用兩個普通IO口實現讀電位器, 調試輸出波形
可以達到任何頻率
附件的程序用了12F509 做的, 可以直接用在 0.3元的OTP單片機上

單片機源程序如下:
  1. #include <12F509.h>
  2. #fuses INTRC,NOWDT,NOPROTECT, NOMCLR
  3. #use delay(clock=4000000)
  4. #define GP0 PIN_B0
  5. #define GP1 PIN_B1
  6. #define GP2 PIN_B2
  7. #define GP3 PIN_B3
  8. #define GP4 PIN_B4
  9. #define GP5 PIN_B5

  10. #define set_options(value)   {#ASM         \
  11.                               MOVLW  value \
  12.                               OPTION       \
  13.                               #ENDASM}

  14. #define UART_TX_HI() output_high(GP2)
  15. #define UART_TX_LO() output_low(GP2)
  16. #define BitTime 40

  17. void GP5_In()
  18. {
  19.         output_low (GP5);
  20.         set_tris_b(0xfa);

  21. }

  22. void GP5_Out()
  23. {

  24.         set_tris_b(0xda);
  25.         output_high (GP5);
  26. }

  27. unsigned char duty;
  28. unsigned char i;

  29. void cycle_backward (void)
  30. {
  31.    output_low (GP2);
  32.    delay_us (70);
  33.    output_high (GP2);
  34.    delay_us (70);
  35. }

  36. void Get_Pos()
  37. {

  38.         set_tris_b(0xfa); //GP5 input
  39.         while(input(GP5) == 0)
  40.         {
  41.                 duty++;
  42.         }
  43.         set_tris_b(0xda); //GP5 output
  44. }

  45. void GetAdc()
  46. {
  47.         duty = 0;
  48.         output_high(GP4);    //Activate Pullup
  49.        
  50.         while(input(GP5) == 0)
  51.         {
  52.                 duty++;
  53.                 if(duty==255)
  54.                 {
  55.                         output_low(GP4);
  56.                         return;
  57.                 }
  58.         }
  59.         output_low(GP4);   // No pullup
  60. }

  61. void UART_Transmit(unsigned char DataValue)
  62. {
  63.        
  64.         /* Basic Logic
  65.        
  66.         TX pin is usually high. A high to low bit is the starting bit and
  67.         a low to high bit is the ending bit. No parity bit. No flow control.
  68.         BitCount is the number of bits to transmit. Data is transmitted LSB first.
  69.         */
  70.         // Send Start Bit
  71.         UART_TX_LO();
  72.         delay_us(BitTime);   //delay_us(33); //
  73.         for ( i = 0; i < 8; i++ )
  74.         {
  75.         // Set Data pin according to the DataValue
  76.                 if( ((DataValue>>i)&0x1) == 0x1 ) // If Bit is high
  77.                 {
  78.                         UART_TX_HI();
  79.                 }
  80.                 else // If Bit is low
  81.                 {
  82.                         UART_TX_LO();
  83.                 }
  84.                 delay_us(BitTime);  //delay_us(33); //
  85.         }
  86.         // Send Stop Bit
  87.         UART_TX_HI();
  88.         delay_us(BitTime);  //delay_us(33); //
  89. }


  90. /*
  91. REVERT THE HARDWARE TO USING 2 PINS FOR POTENTIOMETER MEASUREMENT
  92. USE A CAPACITOR OF 22PF TO 100PF
  93. USE A TIMER TO HAVE THE PULSE CONTROL

  94. >SETUP TIMER0 SO THAT 256 COUNTS = PULSE PERIOD(1 MSEC)
  95. RUN TIMER 0
  96. WHILE LOOP
  97. >GETADC
  98. >IF DUTY MORE THAN MAX VALUE, ALWAYS ON
  99. >ELSE IF DUTY = 0, ALWAYS OFF
  100. >ELSE IF TIMER COUNT = DUTY, OUTPUT ON
  101.       IF TIMER COUNT = 255, OUTPUT OFF

  102. */


  103. void main()
  104. {
  105.         set_options(0x07);
  106.         set_tris_b(0xfa);                //GP2 and GP0 are outputs
  107.     setup_counters (RTCC_INTERNAL,RTCC_DIV_2);
  108.         output_low(GP5); //no pullup for GP5

  109.    while (TRUE)
  110.         {
  111.                 //UART_Transmit(0);
  112.                 //GetAdc();
  113.                 //Get_Pos();
  114.                 //UART_Transmit(duty>>8);
  115.                
  116.                 set_tris_b(0xfa); //GP5 input
  117.                 set_timer0(0);
  118.                 while(input(GP5) == 0)
  119.                 {

  120.                 }
  121.                 duty = get_timer0();
  122.                 set_tris_b(0xda); //GP5 output

  123.                 //UART_Transmit(0);
  124.                 //UART_Transmit(duty);
  125.                 //delay_us(BitTime);

  126.                 if(duty<95)
  127.                 {
  128.                         if(duty < 4)
  129.                         {
  130.                                 output_high(GP0);
  131.                                 delay_ms(1);
  132.                         }
  133.                         else
  134.                         {
  135.                                 output_low(GP0);
  136.                                 for(i=0;i<duty;i++)
  137.                                 {
  138.                                         delay_us(50);
  139.                                 }
  140.                                 duty = 100 - duty;
  141.                                 output_high(GP0);
  142.                                 for(i=0;i<duty;i++)
  143.                                 {
  144.                                         delay_us(50);
  145.                                 }
  146.                         }
  147.                 }
  148.                 else
  149.                 {
  150.                         output_low(GP0);
  151.                         delay_ms(1);
  152.                 }
  153.     }
  154. }

復制代碼


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏4 分享淘帖 頂1 踩
回復

使用道具 舉報

沙發
ID:72649 發表于 2021-12-16 15:47 來自觸屏版 | 只看該作者
能不能提供一下原理圖
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩中文字幕在线免费 | 日本不卡一区 | h视频免费看 | 在线观看h视频 | 97综合在线| 美女视频h | 91久久国产综合久久91精品网站 | 成人午夜电影在线观看 | 亚洲一区二区在线播放 | 久久精品一区二区三区四区 | 成人免费看黄网站在线观看 | 亚洲性视频网站 | 免费欧美 | 久久国内精品 | 国产高清视频在线观看播放 | 中文字幕欧美日韩 | 精品国产精品三级精品av网址 | 久久精品亚洲欧美日韩精品中文字幕 | 啪啪网页 | 国产精品a免费一区久久电影 | 视频一区二区在线观看 | 欧美最猛黑人xxxⅹ 粉嫩一区二区三区四区公司1 | 国产精品国产三级国产aⅴ中文 | 不卡的av在线 | 狠狠躁夜夜躁人人爽天天高潮 | 成人精品视频99在线观看免费 | 国产精品一二三区 | 欧美日韩精品免费观看 | 国产成人自拍一区 | 国产精品国色综合久久 | 夜夜爽99久久国产综合精品女不卡 | 一区二区伦理电影 | 伊人网综合 | 成人a视频 | 国产成人艳妇aa视频在线 | 欧美黄色一区 | 免费毛片网站在线观看 | 丁香久久| 午夜视频在线免费观看 | 精品不卡| 天天综合永久入口 |