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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2200|回復: 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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 在线视频99| 国产视频一区二区 | 91亚洲国产成人精品一区二三 | 亚洲日本中文 | 久久久夜夜夜 | 久久久久久久91 | av一二三区 | av一区二区三区 | 中文一区二区视频 | 欧美激情视频一区二区三区在线播放 | 综合久 | 欧美日韩综合一区 | 国产成人精品一区二区三区四区 | 国产激情精品一区二区三区 | 久久亚洲国产精品 | 日韩免费福利视频 | 成人区精品一区二区婷婷 | 日韩成人在线免费观看 | 涩涩视频在线观看 | 亚洲精品欧美一区二区三区 | 国外成人在线视频 | www国产精品 | 91视频播放| 精品人伦一区二区三区蜜桃网站 | 一区中文字幕 | 成人在线电影网站 | 精品视频在线一区 | 国产精品视频播放 | 国产精品视频网 | 国产精品1区 | 成人影院午夜 | 日韩av电影在线观看 | www.色.com| 99久久99热这里只有精品 | 成人免费在线观看 | 精品久久久久久久久久 | 国产精品视频在线观看 | 国产精品久久久久久久久久久久 | 男女免费观看在线爽爽爽视频 | 一区二区三区网站 | 国产福利在线免费观看 |