Báo cáo nghiên cứu khoa học -Trường đại học Mỏ-Địa chất Chương trình chính: Bắt đầu Khởi tạo portB Khởi tạo đếm timer0 Khởi tạo ngắt Cho phép ngắt toàn cục Khởi tạo ADC Khởi tạo LCD CT PWM_INIT () Đọc giá trị ADC Tính toán độ mở bướm ga Speed >50 S CT PWM_STOP() Đ CT PWM_START () CT SET_DUTY(DUTY) Hiển thị LCD PWM=0 Báo cáo nghiên cứu khoa học -Trường đại học Mỏ-Địa chất Bắ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 ADC,khởi tạo LCD Vào chương trình PWM_INIT() Đọc giá trị ADC tính toán độ mở bướm ga tốc độ lớn 50 cho phép chạy chương trình PWM_START() SET_DUTY(DUTY) sai chạy chương trình PWM_STRAT() cho PWM=0 Cuối cho hiển thị kết kên LCD Chương trình PWM_INIT () Bắt đầu Không cho phép ngắt timer1 Đặt chu kì đầu cho xung Tính toán thời gian on xung Tính toán thời gian off xung Tính toán giá trị đặt on cho timer1 Tính toán giá trị đặt off cho timer1 Kết thúc Báo cáo nghiên cứu khoa học -Trường đại học Mỏ-Địa chất Bắ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 Bắt đầu Cho phép timer đếm 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 Dừng timer1 đếm Kết thúc Báo cáo nghiên cứu khoa học -Trường đại học Mỏ-Địa chất Chương trình SET_DUTY(DUTY): Bắt đầu Tính toán chu kì xung từ biến speed Tính toán thời gian on xung Tính toán thời gian off xung Duty==0 Đ PWM=0 S Duty==100 Đ PWM=1 S Tính toán đặt on timer Tính toán đặt off timer Cho phép ngắt timer1 Kết thúc Báo cáo nghiên cứu khoa học -Trường đại học Mỏ-Địa chất Bắt đầu chương trình tính toán chu kì xung từ biến speed thời gian on off xung.Nếu duty=0 cho PWM=0 duty==100 cho PWM=1.Tính toán on off cho timer1 cho phép ngắt timer1 kết thúc chương trình Chương trình phục vụ ngắt timer1 Bắt đầu chương trình gán PWM =! PWM PWM=0 SET_TIMER1(T_OFF_RELOAD) không SET_TIMER1(T_ON_RELOAD) Bắt đầu PWM=! PWM PWM=0 S Đ SET_TIMER1(T_OFF_RELOAD) Kết thúc SET_TIMER1(T_ON_RELOAD) Báo cáo nghiên cứu khoa học -Trường đại học Mỏ-Địa chất Chương trình phục vụ ngắt Bắt đầu Cho timer1 đếm Count=count+1 S Count==2 Cho ngắt timer0 Đ Không cho ngắt timer0 Tính toán tốc độ Count=0 Count_TMR0=0 Đặt giá trị đầu timer0=0 Xoá LCD Cho timer1 đếm Kết thúc Đặt giá trị đầu timer0=0 Báo cáo nghiên cứu khoa học -Trường đại học Mỏ-Địa chất Bắt đầu chương trình cho timer1 đếm, count=count+1 count=2 tính toán tốc độ sau cho count = count_TMR=0, xóa LCD conut không cho ngắt timer0 đặt giá trị đầu cho timer0=0.Cho timer1 đếm kết thúc chương tình Chương trình phục vụ ngắt timer0: Bắt đầu chương trình không Cho timer1 đếm tăng Count_TMR0 lên giá trị cho timer1 đếm kết thúc Bắt đầu Không cho timer1 đếm Count_TMR0=Count_TMR0+1 Cho timer1 đếm Kết thúc