Chương trình chính:CT con PWM_STOP PWM=0 S Đ CT con CT con PWM_START Speed >50 Tính toán độ mở bướm ga Đọc giá trị ADC CT con PWM_INIT Khởi tạo portB Khởi tạo bộ đếm timer0 Khởi tạo
Trang 1 Chương trình chính:
CT con PWM_STOP()
PWM=0
S
Đ
CT con
CT con PWM_START ()
Speed >50 Tính toán độ mở bướm ga Đọc giá trị ADC
CT con PWM_INIT ()
Khởi tạo portB Khởi tạo bộ đếm timer0 Khởi tạo ngắt ngoài Cho phép ngắt toàn cục Khởi tạo bộ ADC Khởi tạo LCD Bắt đầu
Trang 2Bắt đầu chương trình cho phép khởi tạo portB,bộ đếm timer0,ngắt ngoài,cho
phép,ngắt toàn cục.khởi tạo bộ ADC,khởi tạo LCD
Vào chương trình con PWM_INIT() Đọc giá trị ADC và tính toán độ mở bướm ga nếu tốc độ lớn hơn 50 cho phép chạy chương trình con PWM_START() và
SET_DUTY(DUTY) nếu sai thì chạy chương trình con PWM_STRAT() và cho PWM=0 Cuối cùng cho hiển thị kết quả kên LCD
Chương trình con PWM_INIT ()
Kết thúc
Tính toán giá trị đặt on cho timer1 Tính toán giá trị đặt off cho timer1
Tính toán thời gian on xung Tính toán thời gian off xung
Đặt chu kì đầu cho xung Không cho phép ngắt timer1
Bắt đầu
Trang 3Bắt đầu chương trình không cho timer1 ngắt sau đó đặt chu kì đầu cho xung tính toán thời gian on off xung Tính toán giá trị đặt on off cho timer1, kết thúc chương trình
Chương trình con: PWM_START ()
Bắt đầu cho timer1 đếm Sau đó kết thúc
Chương trình con: PWM_STOP ()
Bắt đầu dừng timer1 đếm sau đó dừng chương trình
Bắt đầu
Cho phép timer 1 đếm
Kết thúc
Dừng timer1 đếm Bắt đầu
Trang 4 Chương trình con SET_DUTY(DUTY):
Tính toán thời gian on của xung
Tính toán thời gian off của xung
Tính toán chu kì xung từ biến speed
Bắt đầu
PWM=0
PWM=1 Duty==100
Duty==0
Cho phép ngắt timer1
Tính toán đặt on timer 1
Tính toán đặt off timer 1
Đ
S
Đ
S
Trang 5Bắt đầu chương trình tính toán chu kì xung từ biến speed và thời gian on off của xung.Nếu duty=0 thì cho PWM=0 duty==100 thì cho PWM=1.Tính toán on off cho timer1 rồi cho phép ngắt timer1 kết thúc chương trình
Chương trình con phục vụ ngắt timer1
Bắt đầu chương trình gán PWM =! PWM nếu PWM=0 thì
SET_TIMER1(T_OFF_RELOAD) nếu không thì
SET_TIMER1(T_ON_RELOAD)
Kết thúc
SET_TIMER1(T_OFF_RELOAD)
Đ
S SET_TIMER1(T_ON_RELOAD) PWM=0
PWM=! PWM Bắt đầu
Trang 6 Chương trình con phục vụ ngắt ngoài
Bắt đầu
Đ
Xoá LCD Đặt giá trị đầu timer0=0
Count=0 Count_TMR0=0
Tính toán tốc độ
Không cho ngắt timer0 Đặt giá trị đầu
timer0=0
S
Cho ngắt timer0 Count==2
Count=count+1 Cho timer1 đếm
Trang 7Bắt đầu chương trình cho timer1 đếm, count=count+1 nếu count=2 thì tính toán tốc
độ sau đó cho count = 0 và count_TMR=0, xóa LCD nếu conut không bằng 0 thì cho ngắt timer0 đặt giá trị đầu cho timer0=0.Cho timer1 đếm rồi kết thúc chương tình
Chương trình con phục vụ ngắt timer0:
Bắt đầu chương trình không Cho timer1 đếm tăng Count_TMR0 lên 1 giá trị cho timer1 đếm và kết thúc
Bắt đầu
Không cho timer1 đếm
Count_TMR0=Count_TMR0+1
Cho timer1 đếm
Kết thúc