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