ããAVRåçæºTC0å¿«éPWM
ããPWMï¼èå²å®½åº¦è°å¶ï¼å¾ä¸T为èå²å¨æï¼t为é«çµå¹³æ¶é´ï¼tä¸Tçæ¯å¼t/T称为å 空æ¯ï¼è宽è°å¶æçæ¯è°æ´tç大å°ï¼å³æ¹åèå²çå 空æ¯ï¼å 空æ¯å¼è¶å¤§ï¼è¾åºççµåè¶é«ãæ¹åå 空æ¯å°±æ¹åè¾åºççµåï¼å¸¸ç¨äºå®ç°D/Aï¼è°èçµåæçµæµï¼æ¹åçµå¨æºç转éçã
ããå¿«éPWM模å¼ï¼å®ç计æ°æ¹å¼æ¯TCNT0ç±0å¼å§è®¡æ°å°255å¼ï¼è®¡æ°å 1è¿åå°0ï¼ç¶å继ç»å 1计æ°ï¼ç¸å¯¹äºç¸ä½PWMä¿®æ£æ¨¡å¼(ç±0计æ°å°255ï¼åä»255计æ°å°0)ï¼åªæä¸ä¸ªæå¡ï¼å æ¤PWMè¾åºé¢çé«ãå¨å¿«éPWM模å¼ä¸ï¼è®¡æ°å¨çæ大å¼å³å®äºPWMçé¢çï¼èæ¯è¾å¯åå¨OCR0å³å®äºå 空æ¯ç大å°ãT/C0æ¯8ä½è®¡æ°å¨ï¼ è¾åºPWMçé¢ç=ç³»ç»æ¶éé¢ç/(åé¢ç³»æ°*255) ã
ããPWM产çè¿ç¨ï¼å®æ¶å¨å¯å¨åï¼å½TNCT0åOCR0çå¼ç¸çæ¶ï¼è¾åºå¼èOC0(PB3)æ¸
0ï¼å½TNCT0å°255æ¶OC0ç½®ä½ï¼å¨ç¨åºè¿è¡è¿ç¨ä¸æ¹åOCR0ä¸çæ°å¼ï¼å°±æ¹åäºOC0è¾åºçå 空æ¯ã
ãã//å½æ°åè½ï¼æ§å¶PB3å¼èä¸çåå
äºæ管ç±äº®å°çï¼åç±çå°äº® (代ç æ¥èªè½»æ¾ç©è½¬AVRåçæºcè¯è¨cd)
ãã#include
ãã#define uchar unsigned char
ãã#define uint unsigned int
ããunsigned int count;
ãã/*********以ä¸æ¯å»¶æ¶å½æ°*********/
ããvoid Delay_ms(uint xms)
ãã{
ããint i,j;
ããfor(i=0;i
ãã{ for(j=0;j<1140;j++) ; }
ãã}
ãã/********以ä¸æ¯ç«¯å£åå§åå½æ°********/
ããvoid port_init()
ãã{
ããDDRB|=(1<
ããPORTB&=(0<
ãã}
ãã/********å®æ¶å¨0åå§å********/
ããvoid timer0_init()
ãã{
ããTCCR0=(1<
ãã// T/C0å·¥ä½äºå¿«éPWM模å¼ï¼ä¸åé¢
ãã//æ¯è¾å¹é
æ¶ï¼OC0ç½®ä½ï¼è®°æ°å°0XFFæ¶ï¼æ¸
é¶OC0
ããOCR0=0; //æ¯è¾å¹é
å¯åå¨åå¼ï¼
ããSREG=0x80; //使è½å
¨å±ä¸æ
ãã}
ãã/*********以ä¸æ¯ä¸»å½æ°*********/
ããvoid main(void)
ãã{
ããport_init();
ããtimer0_init();
ããwhile(1)
ãã{
ããfor(count=0;count<256;count++) //OCR=0æ¶ï¼LEDæ亮ï¼ç¶åéæ¸åæ
ãã{
ããOCR0=count; //æ¯è¾å¹é
å¯åå¨èµå¼
ããDelay_ms(20); //延æ¶ä¸æ®µæ¶é´ï¼ä»¥è§å¯ææ
ãã}
ããDelay_ms(3000); // LEDæææ¶ï¼å»¶æ¶ä¸æ®µæ¶é´
ããfor(count=255;count>0;count--) //OCR=255æ¶ï¼LEDææï¼ç¶åéæ¸å亮
ãã{
ããOCR0= count;
ããDelay_ms(20);
ãã}
ããDelay_ms(3000); //LEDæ亮æ¶ï¼å»¶æ¶ä¸æ®µæ¶é´
ãã}
ãã}
温馨提示:答案为网友推荐,仅供参考