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 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
CT con PWM_INIT ()
Đọc giá trị ADC
Tính toán độ mở bướm ga
Speed >50
S
CT con PWM_STOP()
Đ
CT con PWM_START ()
CT con SET_DUTY(DUTY)
Hiển thị LCD
1
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 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 ()
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
2
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 1 đế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
3
Báo cáo nghiên cứu khoa học -Trường đại học Mỏ-Địa chất
Chương trình con 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 của xung
Tính toán thời gian off của xung
Duty==0
Đ
PWM=0
S
Duty==100
Đ
PWM=1
S
Tính toán đặt on timer 1
Tính toán đặt off timer 1
Cho phép ngắt timer1
Kết thúc
4
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 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)
Bắt đầu
PWM=! PWM
PWM=0
S
Đ
SET_TIMER1(T_OFF_RELOAD)
Kết thúc
5
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 con phục vụ ngắt ngoài
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
6
Đặ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 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
7