欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: 單片機(jī)PWM輸出按鍵不能控制 [打印本頁]

作者: LAW1100    時(shí)間: 2020-4-13 15:02
標(biāo)題: 單片機(jī)PWM輸出按鍵不能控制
各位大佬,請(qǐng)教下用一個(gè)定時(shí)器做PWM輸出,按鍵控制時(shí),如果定時(shí)器時(shí)間設(shè)5US初值(即200KHZ頻率時(shí)),按鍵不能控制PWM停止輸出,幫看看下面的程序這樣設(shè)置有沒問題?謝謝!
  1. #include<51.h>

  2. #define uint unsigned int

  3. #define uchar unsigned char

  4. bit ti_flag=0,Led_new_flag=0,Pwm_off_on=0,time_10f_flag=0,P_IO_flag=0;time_20f_flag=0,NTC_ON_OFF_flag=0,Roie_flag;
  5. volatile uint time_te_flag=0,count=0;Cont=0,j=0,s=0;
  6. volatile uint T_PCA2,I_samp=0,I_vaue=0,Time_200us_flag=200;
  7. volatile uint TIME_200ms_flag=0,TIME_ACC_flag=0; //LED閃所采集時(shí)間標(biāo)志
  8. volatile uchar num=0,Tim_1ms_flag=0;
  9. volatile double ZKB;

  10. sbit PM_out=P3^6;
  11. /***********定時(shí)器0初始化***************/
  12. void Init(void)
  13. {
  14.         AUXR|=0x80; //定時(shí)器時(shí)鐘1T模式

  15. TMOD|=0x00; //設(shè)置定時(shí)器模式

  16. TL0=0xc4; //設(shè)置定時(shí)初值5US
  17.         TH0=0xff; //設(shè)置定時(shí)初值
  18. TF0=0; //清除TF0標(biāo)志
  19. ET0=1;
  20.         EA=1;
  21.         TR0=1;
  22. /***************定時(shí)器0****************/
  23. void timer0(void) interrupt 1
  24. {
  25. Time_200us_flag--;
  26. if(Time_200us_flag==0) //1ms
  27. {
  28. Time_200us_flag=200;
  29. ti_flag=1;
  30. keyScan();  //按鍵掃描
  31.   j++;
  32.         }
  33. if(Pwm_off_on)
  34. {
  35. num++;
  36. if(num>=2)

  37. num=0;

  38. if(num<ZKB) //產(chǎn)生PWM

  39. PM_out=1;

  40. else
  41. {
  42. PM_out=0;
  43.     }
  44.    }
  45. }
  46. /*************按鍵掃描及處理***************/
  47. void keyScan()
  48. {

  49. static bit key1_lock=0;
  50. static uchar count1=0;

  51.         if(0==key)
  52.         {

  53. if((count1++>=25)&&(key1_lock==0)&&(PINT==1))//延時(shí)濾波25ms
  54.         {
  55.         key1_lock=1;
  56.         Pwm_off_on=~Pwm_off_on;

  57.         if(Pwm_off_on==0)
  58.         PM_out=0;

  59.    }
  60.         }
  61. else
  62. {
  63.         key1_lock=0;//按鍵自鎖標(biāo)志清0

  64. count1=0; //消抖計(jì)數(shù)清0
  65. }
  66. if(PINT==0)
  67. {
  68.         Power=0;

  69.         }
  70.         }
  71. /***************主程序****************/
  72. void main(void)
  73. {

  74. Init();
  75. while(1);
  76. }
復(fù)制代碼



作者: tyrl800    時(shí)間: 2020-4-13 15:54
一直在中斷,檢測(cè)不到按鍵操作
作者: LAW1100    時(shí)間: 2020-4-13 16:41
tyrl800 發(fā)表于 2020-4-13 15:54
一直在中斷,檢測(cè)不到按鍵操作

除了降低頻率(時(shí)間設(shè)大),有沒其它辦法?
作者: LAW1100    時(shí)間: 2020-4-13 16:43
tyrl800 發(fā)表于 2020-4-13 15:54
一直在中斷,檢測(cè)不到按鍵操作

因?yàn)槿绻杨l率調(diào)到低于30KHZ,在控溫時(shí)輸出到發(fā)熱芯那里會(huì)吱吱響
作者: wulin    時(shí)間: 2020-4-13 16:54
中斷周期5us,所有的程序都在中斷中運(yùn)行,時(shí)間夠用嗎?
作者: LAW1100    時(shí)間: 2020-4-13 16:58
wulin 發(fā)表于 2020-4-13 16:54
中斷周期5us,所有的程序都在中斷中運(yùn)行,時(shí)間夠用嗎?

那么如何提高PWM頻率又不影響其它程序運(yùn)行?
作者: LAW1100    時(shí)間: 2020-4-13 17:06
wulin 發(fā)表于 2020-4-13 16:54
中斷周期5us,所有的程序都在中斷中運(yùn)行,時(shí)間夠用嗎?

原來定時(shí)器的時(shí)間設(shè)100US中斷沒問題,但是在PID控溫時(shí)負(fù)載會(huì)吱吱響,必須要把頻率提高才能解決。
作者: wulin    時(shí)間: 2020-4-13 17:53
LAW1100 發(fā)表于 2020-4-13 17:06
原來定時(shí)器的時(shí)間設(shè)100US中斷沒問題,但是在PID控溫時(shí)負(fù)載會(huì)吱吱響,必須要把頻率提高才能解決。

1.優(yōu)化程序,很簡(jiǎn)單的PWM程序?qū)懙挠悬c(diǎn)啰嗦。
2.提高M(jìn)CU時(shí)鐘頻率,加快運(yùn)行速度。
3.中斷只留必須的任務(wù),其它非即時(shí)響應(yīng)的任務(wù)放在主函數(shù)運(yùn)行。比如按鍵掃描。
4.中斷周期按預(yù)估中斷任務(wù)所需時(shí)間不小于200%,留足夠時(shí)間給主程序使用。
作者: LAW1100    時(shí)間: 2020-4-14 08:31
wulin 發(fā)表于 2020-4-13 17:53
1.優(yōu)化程序,很簡(jiǎn)單的PWM程序?qū)懙挠悬c(diǎn)啰嗦。
2.提高M(jìn)CU時(shí)鐘頻率,加快運(yùn)行速度。
3.中斷只留必須的任務(wù) ...

多謝,如果不用中斷使用時(shí)鐘分頻是否可行?




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1