Nguyên văn bởi kervin
Xem bài viết
để tôi mượn code của bienhou phân tích thêm cho bạn.
Code:
#include <REGX51.H>
sbit PWM = P2^3;
sbit TANG = P1^2;
sbit GIAM = P1^5;
unsigned char dem=0,do_rong_xung=5;
void timer0(void) interrupt 1
{
TR0 = 0;
TF0 = 0;
dem++;
if(dem > 100)
dem = 0;
if(dem<do_rong_xung)
PWM = 1;
else
PWM = 0;
TR0 = 1;
}
void main(void)
{
TMOD = 0X02;//timer0 ở chế độ 8bit tự động nạp lại
IE = 0X82;
TH0=TL0=-50; // tao tan so 0.05 ms (nạp giá trị cho timer0 cứ sau 50us thì timer tràn)
//vậy Fpwm=1/(50us*100)=200hz
TR0 = 1;
PWM=0;
while(1)
{
// còn việc sau bao lâu bạn muốn tăng hay giảm độ rộng xung là do bạn
delay();//hàm này bao nhiêu lâu do bạn qui định
do_rong_xung++;
if(do_rong_xung > 100)
do_rong_xung=0;
}
}

Comment