新手剛接觸單片機,用的是PIC16f1828芯片,參考著做了個呼吸燈,用PWM輸出,在中斷部分的程序沒看明白,可以幫我解釋下嗎?而且在燈漸亮和漸暗過程中不是很流暢,在暗亮之間的停頓時間過短。大家能幫我看看該怎么調(diào)整嗎?如果配置完P(guān)WM后不用中斷,想讓占空比通過逐漸增加和減少來實現(xiàn)漸亮到漸滅來實現(xiàn)呼吸燈功能又該怎么寫?謝謝以下是我參考所寫的程序:
- #include <pic16f1828.h>
- #define uint8 unsigned char
- #define uint16 unsigned int
- uint8 gDutycount = 0;
- uint16 count=0;
- const char SINETABLE[38]={50,55,60,65,70,75,80,85,90,95,100,95,90,85,80,75,70,60,60,55,50,45,40,35,30,25,20,15,10,5,10,15,20,25,30,35,40,45};
- void PWM_Init(void)
- {
- OSCCONbits.IRCF=1110;//8M晶振
- CCPR1L=0x32;
- CCP1CON=0b00001100;
- TRISC5=0;
- }
- void Time2_Init(void)
- {
- T2CON=0x05;
- PR2=99;
- TMR2IF=0;
- GIE=1;
- PEIE=1;
- TMR2IE=1;
- }
- void main(void)
- {
- PWM_Init();
- Time2_Init();
- while(1)
- {
- }
- }
- void interrupt Tmer2_isr(void)
- {
- if(TMR2IF)
- {
- ++count;
- if(count==35)
- {
- ++gDutycount;
- if(gDutycount==75)
- {
- gDutycount=0;
- }
- CCPR1L=SINETABLE[gDutycount];
- count=0;
- }
- TMR2IF=0;
- }
- }
復(fù)制代碼 |