Chúng ta đã biết PIC 16F877A có module PWM trong CCP . Nhưng có cái dở là bắt buộc ta phải dùng 2 chân RC1 & RC2 , còn phải tốn bộ timer .
H với 1 bộ timer bất kỳ , ae ta có thể sử dụng bất kỳ chân nào làm PWM cũng đc (giống như kiểu sd 89 vẫn PWM đc)
Code:
#include <16F877A.h>
#fuses NOWDT,XT,NOPROTECT,NOLVP,PUT,NODEBUG
#use delay(clock=4000000)
#bit signal =0x06.5 // RB5
int8 V_BanhTrai,V_BanhPhai, temp;
void Init_timer()
{
OPTION_REG=0x00;
TMR0IE=1;
TMR0IF=0;
TMR0 = 0;
enable_interrupts(GLOBAL); // GIE =1
//enable_interrupts(int_timer0);
}
#int_timer0
void ngat_timer0()
{ TMR0IF=0;
if (temp++==10) temp= 0;
switch (V_BanhTrai)
{case 0: RC1 = 1; break;
case 10: RC1 = 0; break;
default:
if (temp < V_BanhTrai) RC1 = 0; else RC1 = 1;
};
switch (V_BanhPhai)
{ case 0: RC2 = 1;break;
case 10:RC2 = 0;break;
default:
if (temp < V_BanhPhai) RC2 = 0;else RC2= 1;
}
TMR0 = 0;
}
main()
{ TRISC=0x00;PORTC=0xFF;
Init_timer();
while(1) V_BanhTrai=V_BanhPhai=10 ; //chay het toc do