LẬP TRÌNH ðIỀU KHIỂN TIMER - INTERRUPT
I. Mục ñích bài thí nghiệm
Bài thực hành nhằm giúp học viên:
- Nắm nguyên tắc hoạt ñộng của Timer - Interrupt.
- Hiểu và viết ñược chương trình ứng dụng Timer – Interrupt vào trong ñiều
khiển quá trình.
II. Cơ sở lý thuyết
1. Timer trong AT89C51
Vi ñiều khiển 89C51 có hai thanh ghi timer/counter 16 bit. Các thanh ghi này có thể
hoạt ñộng ở một trong hai trạng thái timer hoặc counter. Mỗi thanh ghi gồm 2 thanh
ghi 8 bit ghép lại:
18 trang |
Chia sẻ: hoang10 | Lượt xem: 1095 | Lượt tải: 0
Bạn đang xem nội dung tài liệu Đo lường điện - Bài 5: Lập trình điều khiển timer - Interrupt, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Bài 5: Timer -Interrupt
Trang V-1
BÀI 5:
LẬP TRÌNH ðIỀU KHIỂN TIMER - INTERRUPT
I. Mục ñích bài thí nghiệm
Bài thực hành nhằm giúp học viên:
- Nắm nguyên tắc hoạt ñộng của Timer - Interrupt.
- Hiểu và viết ñược chương trình ứng dụng Timer – Interrupt vào trong ñiều
khiển quá trình.
II. Cơ sở lý thuyết
1. Timer trong AT89C51
Vi ñiều khiển 89C51 có hai thanh ghi timer/counter 16 bit. Các thanh ghi này có thể
hoạt ñộng ở một trong hai trạng thái timer hoặc counter. Mỗi thanh ghi gồm 2 thanh
ghi 8 bit ghép lại:
Cấu trúc của bộ Timer/ Counter trong 89C51 như hình sau.
Bài 5: Timer -Interrupt
Trang V-2
Hoạt ñộng của bộ Timer/Counter ñược ñiều khiển bởi hai thanh ghi TCON và
TMOD
Thanh ghi TCON (timer control): Là thanh ghi 8 bit, có thể truy xuất
byte hoặc bit dùng ñể ñiều khiển hoạt ñộng của Timer.
TF1: báo trạng thái tràn cho bộ Timer/Counter1
TR1: ñiều khiển cấp xung cho bộ Timer/Counter1
TF0: báo trạng thái tràn cho bộ Timer/Counter0
TR0: ñiều khiển cấp xung cho bộ Timer/Counter0
IE1, IT1, IE0, IT0: sử dụng cho ngắt ngoài 1 và ngắt ngoài 0 (không
dùng cho Timer).
Thanh ghi TMOD (timer mode): Là thanh ghi 8 bit, chỉ có thể truy
xuất byte dùng ñể xác ñịnh chế ñộ hoạt ñộng của Timer.
GATE, C/ T : ñiều khiển trạng thái hoạt ñộng cho Timer/
M1, M0: chọn chế ñộ hoạt ñộng cho Timer/Counter
M1 M0 CHẾ ðỘ MÔ TẢ
0 0 0 Timer/Counter 13 bit
0 1 1 Timer/Counter 16 bit
1 0 2 Timer/Counter 8 bit, auto reload
1 1 3 Timer/Counter 8 bit
• Chế ñộ 0 (13 bit):
Bài 5: Timer -Interrupt
Trang V-3
Thanh ghi THx và TLx kết hợp tạo thành bộ Timer/Counter 13 bit, khi tràn 13 bit thì
cờ TFx sẽ ñặt lên logic 1
• Chế ñộ 1 (16 bit):
• Chế ñộ 2 (8 bit auto reload)
TLx ñược nạp giá trị ban ñầu từ THx và bắt ñầu ñếm từ giá trị này khi có xung ở ngõ
vào, khi tràn thì TFx sẽ ñặt lên logic 1 ñồng thời kích hoạt bộ khóa ñể nạp giá trị trong
THx vào TLx.
• Chế ñộ 3
Trong chế ñộ này, TH1 và TL1 không ñược sử dụng thay vào ñó là TH0 và TL0 hoạt
ñộng như 2 bộ Timer 8 bit (TL0) và Timer/Counter 8 bit (TL0). Tuy nhiên, tín hiệu
mở xung cho TH0 không phải là TR0 mà là TR1.
2. Interrupt trong AT98C51
Thanh ghi IE (Interrupt Enable Register)
Bài 5: Timer -Interrupt
Trang V-4
Thanh ghi IE dùng ñể cho phép hay cấm các ngắt hoạt ñộng. Mặc ñịnh khi khởi ñộng
chương trình thì tất cả các ngắt ñều bị cấm. Chức năng các bit trong thanh ghi IE cho
trong bảng sau:
EA = 0: cấm tất cả các ngắt
= 1: cho phép ngắt tuỳ theo trạng thái các bit ñiều khiển tương ứng
ES = 0: cấm ngắt tại port nối tiếp
= 1: cho phép ngắt tại port nối tiếp
ET1 = 0: cấm ngắt tại Timer 1
= 1: cho phép ngắt tại Timer 1
EX1 = 0: cấm ngắt tại ngắt ngoài 1 ( INT1: chân P3.3)
= 1: cho phép ngắt tại ngắt ngoài 1
ET0 = 0: cấm ngắt tại Timer 0
= 1: cho phép ngắt tại Timer 0
EX0 = 0: cấm ngắt tại ngắt ngoài 1 ( INT0 : chân P3.2)
= 1: cho phép ngắt tại ngắt ngoài 1
ðể cho phép ngắt tại Timer 0, ta phải có: EA = 1 và ET0 = 1. Nội dung của thanh ghi
IE khi ñó là:
Chương trình có thể thực hiện như sau:
SETB EA
SETB ET0
Hay có thể viết:
MOV IE,#82h
Bài 5: Timer -Interrupt
Trang V-5
Danh sách các ngắt trong AT89C51
Bài 5: Timer -Interrupt
Trang V-6
Cấu trúc chương trình sử dụng ngắt
ORG 0000H
JMP MAIN
ORG 0003H
JMP INT0_ISR
ORG 000BH
JMP TIMER0_ISR
ORG 0013H
JMP INT1_ISR
ORG 001BH
JMP TIMER1_ISR
ORG 0023H
JMP SERIAL_ISR
MAIN:
INT0_ISR:
RETI
Bài 5: Timer -Interrupt
Trang V-7
TIMER0_ISR:
RETI
INT1_ISR:
RETI
TIMER1_ISR:
RETI
SERIAL_ISR:
RETI
END
Lưu ý rằng nếu không sử dụng ngắt nào thì không cần phải khai báo ISR
cho ngắt ñó.
Chương trình sử dụng ngắt bao gồm 2 phần: phần chương trình chính và phần xử lý
ngắt. Một ñoạn chương trình ví dụ sử dụng ngắt ngoài 0 như sau:
ORG 0000h ; ðịa chỉ bắt ñầu chương trình
JMP MAIN
ORG 0003h ; ðịa chỉ chương trình phục vụ ngắt cho INT0
JMP INT0_ISR
MAIN:
; khai báo sử dụng ngắt
SETB EA
SETB EX0 ; Có thể thay 2 lệnh này bằng lệnh MOV IE,#81h
; chương trình chính
INT0_ISR:
; chương trình phục vụ ngắt
RETI
END
III. Phần thực hành.
1. ðiều khiển Timer
Bài 1: Viết chương trình tạo sóng vuông tần số tại chân P1.0 dùng Timer 0 chế ñộ 1
16 bit (tần số thạch anh là fOSC = 12MHz).
a. Chương trình mẫu gợi ý
Bài 5: Timer -Interrupt
Trang V-8
ORG 0000H
JMP MAIN
MAIN:
MOV TMOD,#01h ; dùng timer0 chế ñộ 1 – 16 bit
MOV TH0, #HIGH(-50000)
MOV TL0, #LOW(-50000)
SETB TR0 ; Cho phép timer 0 chạy
LAP:
JNB TF0, LAP ; Nếu Timer chưa tràn thì chờ
CLR TF0
CPL P1.0 ; ðảo bit P1.0 ñể tạo xung vuông
JMP LAP
END
b. Yêu cầu:
- Kết nối ngõ ra của vi ñiều khiển với module diều khiển LED. Quan sát
kết quả trên bit P1.0.
- Hãy tính toán tần số của xung tạo ra tại P1.0, thời gian on/off của xung
ngõ ra cũng như chu kỳ của xung tai P1.0.
- Có thể sửa ñổi chương trình ñể có thể tạo xung vuông tại ngõ ra ở P1.0
có tần số như tính toán trên nhưng dùng Timer0 ở chế ñộ 2 – 8 bit auto
reload hay không ? Nếu ñược hãy sửa lại chương trình và kiểm chứng.
- Sửa ñổi chương trình ñể có thể tạo xung vuông tại ngõ ra ở P1.0 có tần
số là 10Hz.
- Sửa ñổi chương trình ñể có thể tạo xung vuông tại ngõ ra ở P1.0 có tần
số là 10Hz dùng Timer1
- Sửa ñổi chương trình ñể có thể tạo xung vuông tại ngõ ra ở P1.0 có tần
số là 1Hz
- Sửa ñổi chương trình ñể tạo xung vuông có tần số 10Hz tại ngõ ra P1.0
và xung vuông có tần số 1 Hz tại ngõ ra P1.4. Gợi ý có thể dùng Timer
1 cho xung 10Hz và Timer0 cho xung 1 Hz.
- Sửa ñổi lại tất các các chương trình con Delay trong bài thực tập số 3
(ñiều khiển Led ñơn – Led 7 ñoạn) bằng cách dùng các timer của vi ñiều
khiển. Kiểm chứng lại sự thay ñổi này.
Bài 2: Viết chương trình dùng Timer ñể tạo tiếng còi hú qua Speaker. Px.5 là bit sẽ
kết nối với Speaker
a. Chương trình mẫu gợi ý
ORG 0000H
JMP START
KHOI DONG:
MOV TCON, #00H
Bài 5: Timer -Interrupt
Trang V-9
MOV TMOD, #00H
MOV PSW, #00H
MOV IE, #00H
RET
DELAYMS:
MOV R7, #00H
LOOPA: INC R7
MOV A, R7
CJNE A, #0FFH, LOOPA
RET
DELAYHS:
MOV R6, #80H
MOV R5, #02H
LOOPB: INC R6
CALL DELAYMS
MOV A, R6
JNZ LOOPB
DEC R5
MOV A, R5
JNZ LOOPB
RET
TONE_ONE:
MOV R4, #00H
MOV R3, #02H
LOOPC: INC R4
CALL DELAY
CALL DELAYMS
DEC R2
CPL P1.5 ; kết nối với speaker
MOV A, R4
JNZ LOOPC
DEC R3
MOV A, R3
JNZ LOOPC
RET
TONE_TWO:
MOV R4, #00H
MOV R3, #02H
LOOPD: INC R4
CALL DELAY
CALL DELAYMS
INC R2
CPL P1.5 ; ; kết nối với speaker
MOV A, R4
JNZ LOOPD
DEC R3
MOV A, R3
JNZ LOOPD
RET
DELAY:
MOV A, R2
MOV R7, A
LOOPE: INC R7
MOV A, R7
CJNE A, #0FFH, LOOPE
RET
START:
CALL KHOI DONG
LOOP:
CALL TONE-ONE
CALL TONE_TWO
JMP LOOP
END
b. Yêu cầu
- Kết nối PORT1 với module Speaker trên board ET-LAB3A xem lại bài
1: Tổng quan về ET-LAB3A
- Chạy chương trình ñể kiểm chứng.
- Mô tả nguyên tắc hoạt ñộng của chương trình trên. Vẽ lưu ñồ ñiều khiển
của chương trình.
Bài 5: Timer -Interrupt
Trang V-10
- Sửa chương trình ñể tạo ra các dạng hiệu ứng âm thanh khác nhau. Chạy
chương trình kiểm chứng.
Bài 3: Viết chương trình tạo mạch ñồng hồ ñếm phút giây (thời gian tương ñối) sử
dụng Timer0 chế ñộ 1 (16 bit)
c. Chương trình mẫu gợi ý
ORG 0000H
JMP MAIN
MAIN:
MOV TMOD,#01H ; Sử dụng Timer0, chế ñộ 16 bit
MOV 30H,#0 ; giá trị ban ñầu của phút
MOV 31H,#0 ; giá trị ban ñầu của giây
LAP:
MOV A,30H ; xuất giá trị của phút ra P2
MOV B,#10
DIV AB
MOV DPTR,# LED7S
MOVC A,@A+DPTR
MOV P2,A ; xuất hàng chục của phút ra P2
MOV P1,#03H ; P1 là PORT ñể chọn Led 7 ñoạn
MOV A,B
MOVC A,@A+DPTR
MOV P2,A ; xuất hàng ñơn vị của phút
MOV P1, #02H
MOV A,31H ; xuất giá trị của giây ra P2
MOV B,#10
DIV AB
MOV DPTR,#LED7S
MOVC A,@A+DPTR
MOV P2,A ; xuất giá trị chục của giây
MOV P1, #01H
MOV A,B
MOVC A,@A+DPTR
MOV P2,A ; giá trị ñơn vị của giây
Bài 5: Timer -Interrupt
Trang V-11
MOV P1, #00H
CALL DELAY
INC 31H ; tăng giây lên 1
MOV A,31H
CJNE A,#60,Lap ; ðủ 60s (1 phút) thì
MOV 31H,#0 ; giây = 0
INC 30H ; và tăng phút lên 1
MOV A,30H
CJNE A,#60,Lap ; ðủ 60 phút thì
MOV 30H,#0 ; phút = 0
JMP LAP
LED7S: DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH, 67H
DELAY:
PUSH 07
MOV R7,#20
SETB TR0
DELAY1: ; Tạo trễ 50000 chu kỳ = 50000µs = 50ms
MOV TH0,#HIGH(-50000)
MOV TL0,#LOW(-50000)
JNB TF0,$ ; Chờ ñến khi Timer tràn
CLR TF0
DJNZ R7,DELAY1 ; R7 = 20 -> lặp lại 20 lần -> tạo trễ 20*50ms
CLR TR0
POP 07
RET
END
d. Yêu cầu:
- Kết nối ngõ ra của vi ñiều khiển với module diều khiển LED – LED 7
ñoạn. Quan sát kết quả LED 7 ñoạn và cho nhận xét.
- Do trên là chương trình gợi ý, sinh viên hãy edit lại ñể sao cho có thể
thực hiện ñược yêu cầu trên.
- Nếu chương trình hiển thi phút giây chưa hoàn chỉnh, có thể thêm ñoạn
code Delay10ms ñể trì hoãn thời gian lưu ảnh của mắt ngay tại mỗi khi
Bài 5: Timer -Interrupt
Trang V-12
xuất giá trị phút giây ra PORT2. Hãy sửa ñổi lại chương trình sao cho
hiển thị phút giây dễ quan sát nhất.
ðoạn code Delay10ms ñược gợi ý như sau:
Delay10ms:
PUSH 03
PUSH 04
MOV R3, #100
L1: MOV R4, #75
DJNZ R4, $
DJNZ R3, L1
POP 03
POP 04
RET
- Sửa lại chương trình sao cho có thể ñếm giấy và % của giây.
- Sửa lại chương trình cho phép nếu có 2 SW ñược ñưa vào hệ thống ñể
ñiều khiển ñếm thời gian tăng và ñếm ngược thời gian cụ thể như sau:
Khi bắt ñầu chương trình, ñồng hồ sẽ hiển thị 0000. Nếu SW1 ñược ấn
thì ñồng hồ sẽ ñếm thời gian tăng, còn nếu ấn SW2 thì ñồng hồ ñếm
ngược thời gian. Chú ý trong lúc SW1 hoặc SW2 thì SW còn lại sẽ bị vô
hiệu hoá
2. ðiều khiển ngắt Timer
Bài 1: Thực hiện chương trình dùng ngắt Timer 0 – chế ñộ 1 – 16 bit tạo xung vuông
tần số f = xxHz tại P2.0
a. Chương trình mẫu gợi ý
ORG 0000H
JMP MAIN
ORG 000BH
JMP TIMER0_ISR
MAIN:
MOV IE,#82H
MOV TMOD,#02H
MOV TH0,#(-50000) ; f = XXHz -> T = 1/f = YYms -> thời gian
MOV TL0,#(-50000) ; trễ là ZZs -> giá trị ñếm của Timer là TTs
SETB TR0
HERE:
Bài 5: Timer -Interrupt
Trang V-13
JMP HERE
;-----------
TIMER0_ISR:
CPL P2.0
RETI
END
b. Yêu cầu:
- Hãy xác ñịnh các giá trị XX, YY, ZZ và TT
- Có thể thay ñổi lệnh JMP HERE bằng 1 lênh khác ñược không ? Nếu
ñược thì cho biết lệnh ñó và cho chạy lại chương trình ñể kiểm tra.
- Sửa ñổi chương trình ñể có thể tạo xung vuông ON/OFF 1 giây.
- Viết chương trình dùng ngắt Timer 0 và Timer 1 ñồng thời tạo xung
vuông tần số f = 20 KHz tại P2.3 và f = 100Hz tại P2.4
- Thực hiện chương trình dùng ngắt Timer 0 và Timer 1 ñồng thời tạo
xung vuông tần số f = 5 Hz tại P2.0 và f = 1 Hz tại P2.1. Hãy ñưa vào
các giá trị XX, YYYY, ZZZZ, TTTT của chương trình gợi ý bên dưới ñể
thực hiện ñược yêu cầu trên.
ORG 0000h
JMP main
ORG 000Bh
JMP TIMER0_ISR
ORG 001Bh
JMP Timer1_ISR
MAIN:
SETB EA
SETB ET0
SETB ET1
MOV TMOD,#XXh
MOV TH0,#(-YYYY)
MOV TL0,#(-YYYY)
SETB TR0
MOV TH1,#HIGH(-ZZZZ)
MOV TL1,#LOW(-ZZZZ)
SETB TR1
HERE:
JMP HERE
;-----------
TIMER0_ISR:
CPL P2.0
RETI
;-----------
TIMER1_ISR:
MOV TH1,#HIGH(-TTTT)
MOV TL1,#LOW(-TTTT)
CPL P2.1
RETI
;-----------
END
Bài 5: Timer -Interrupt
Trang V-14
Bài 2: Chương trình mẫu gợi ý ñiều khiển phút dây dùng Interrupt Timer
a. Chương trình mẫu gợi ý ñồng hồ hiển thị phút giây dùng ngắt Timer0
ORG 0
JMP Main
ORG 0Bh
JMP Timer0_ISR
Main:
SETB EA
SETB ET0
MOV TMOD,#01h
MOV TH0,#HIGH(-50000) ; ðếm 50000
MOV TL0,#LOW(-50000);chu kỳ =50 ms
MOV R7,#20 ; 20 x 50ms = 1000ms = 1s
SETB TR0
MOV 31h,#0 ; Phút
MOV 32h,#0 ; Giây
CALL display
here:
JMP here
;----------
Timer0_ISR:
MOV TH0,#HIGH(-50000)
MOV TL0,#LOW(-50000)
DJNZ R7,exittimer0
MOV R7,#20
CALL IncTime ; Cứ mỗi 1s thì tăng thời
gian
CALL display ; và hiển thị ra Led
exittimer0:
RETI
;---------
IncTime:
INC 32h ; Tăng giây
MOV A,32h
CJNE A,#60,ExitIncTime ; Nếu Giây = 60
MOV 32h,#0 ; thì Giây = 0
INC 31h ; và tăng phút
MOV A,31h
CJNE A,#60,ExitIncTime ; Nếu Phút = 60
MOV 31h,#0 ; thì Phút = 0
ExitIncTime:
RET
;---------
Display:
MOV A,31h ; Hiển thị 2 Led chỉ phút
MOV B,#10
DIV AB
MOV DPTR,#MaLed7
MOVC A,@A+DPTR
MOV P2,A
MOV P1, #03H
MOV A,B
MOVC A,@A+DPTR
MOV P2,A
MOV P1, #02H
MOV A,32h ; Hiển thị 2 Led chỉ giây
MOV B,#10
DIV AB
MOV DPTR,#MaLed7
MOVC A,@A+DPTR
MOV P2,A
MOV P1, #01H
MOV A,B
MOVC A,@A+DPTR
MOV P2,A
Bài 5: Timer -Interrupt
Trang V-15
MOV P1, #00H
RET
;---------
MaLed7: DB 3FH, 06H, 5BH, 4FH,
66H, 6DH, 7DH, 07H, 7FH, 67H
END
b. Yêu cầu:
- Chạy chương trình và quan sát kết quả trên Led 7 ñoạn, cho nhận xét.
- Do ñây là chương trình mẫu gợi ý, sinh viên hay sửa ñổi lại chương trình
sao cho có kết quả chính xác nhất.
- Sửa ñổi chương trình sao cho hiển thị giờ phút (do hạn chế của phần
cứng thiết kế của Board ET-LAB3A).
3. ðiều khiển ngắt ngoài
Bài 1: Viết chương trình ñếm sử dụng ngắt ngoài 0 như sau (mỗi lần có ngắt xảy ra thì
tăng nội dung ô nhớ 30h lên 1 và xuất ra Led 7 ñoạn). Chú ý Phải kết nối pin P3.2 ứng
với INT0 với Switch ñơn (còn INT1 ứng với pin P3.3)
a. Chương trình mẫu gợi ý
ORG 0000h
JMP main
ORG 03h
JMP Int0_ISR
main:
SETB EA
SETB EX0
MOV 30h,#0
CALL display
here:
JMP here
;----------
Int0_ISR:
INC 30h
MOV A,30h
CJNE A,#100,next
MOV 30h,#0
next:
CALL display
RETI
;---------
display:
MOV A,30h
MOV B,#10
DIV AB
MOV DPTR,#MaLed7
MOVC A,@A+DPTR
MOV P2,A
MOV P1, #00H
MOV A,B
MOVC A,@A+DPTR
MOV P2,A
MOV P1, #01H
RET
;---------
MaLed7: DB 3FH, 06H, 5BH, 4FH,
66H, 6DH, 7DH, 07H, 7FH, 67H
END
Bài 5: Timer -Interrupt
Trang V-17
b. Yêu cầu:
- Chạy chương trình và kiểm tra kết quả
- Thêm vào lệnh cho phép ngắt bằng cạnh như sau (tại ñoạn in ñậm). Sau
ñó So sánh trường hợp sử dụng ngắt bằng cạnh và bằng mức logic
SETB EA
SETB EX0
SETB IT0
- Sửa chương trình trên ñể cho phép ñếm từ 10 – 50.
- Sửa chương trình lại sao cho ñáp ứng với ngắt ngoài 1 – INT1.
Bài 2: Chương trình ñếm giây và ñiều chỉnh giá trị hiển thị bằng 2 công tắc (nhấn
SW1 thì INC thì tăng giá trị hiển thị và nhấn SW2 thì DEC thì giảm giá trị hiển thị).
Dùng 2 Switch ñơn ứng với hai ngõ vào của P3.2 - INT0 và P3.3- INT1.
a. Chương trình mẫu gợi ý
ORG 0
JMP main
ORG 03h
JMP Int0_ISR
ORG 0Bh
JMP Timer0_ISR
ORG 13h
JMP Int1_ISR
Main:
SETB EA
SETB EX0
SETB EX1
SETB ET0
SETB IT0
SETB IT1
MOV TMOD,#01h
MOV TH0,#HIGH(-50000)
MOV TL0,#LOW(-50000)
MOV R7,#20
SETB TR0
MOV 30h,#0
CALL display
here:
JMP here
;----------
Int0_ISR:
INC 30h
MOV A,30h
CJNE A,#100,next
MOV 30h,#0
next:
CALL display
RETI
;----------
Int1_ISR:
DEC 30h
MOV A,30h
CJNE A,#255,next1
MOV 30h,#99
Next1:
CALL display
RETI
;---------
Timer0_ISR:
MOV TH0,#HIGH(-50000)
MOV TL0,#LOW(-50000)
DJNZ R7,exittimer0
MOV R7,#20
INC 30h
MOV A,30h
CJNE A,#100,next2
MOV 30h,#0
next2:
CALL display
exittimer0:
RETI
;---------
display:
MOV A,30h
MOV B,#10
DIV AB
MOV DPTR,#MaLed7
Bài 5: Timer -Interrupt
Trang V-17
MOVC A,@A+DPTR
MOV P2,A
MOV P1, #00H
MOV A,B
MOVC A,@A+DPTR
MOV P2,A
MOV P1, #01H
RET
;---------
MaLed7: DB 3FH, 06H, 5BH, 4FH,
66H, 6DH, 7DH, 07H, 7FH, 67H
END
b. Yêu cầu:
- Chạy chương trình và kiểm tra kết quả khi ấn SW1 và SW2. Chú ý khi
ấn SW1 tương ứng với INT0 ñược tác ñộng, còn khi ấn SW2 thì tương
ứng INT1 ñược ấn
- Sửa chương trình ñể khi nhấn INC thì tăng 2 ñơn vị và nhấn DEC thì
giảm 5 ñơn vị.
4. ðiều khiển ngắt PORT nối tiếp
Viết chương trình cho phép vi ñiều khiển nhận các ký tự số trên bàn phím máy tính,
xuất các ký tự này ra LED 7 ñoạn.
a. Chương trình mẫu gợi ý
; Chương trình viết cho thạch anh tần số 11.0592Mhz, tốc ñộ 19200bps, SMOD=1
ORG 0000H
MAIN:
MOV DPTR, #LED7S; load dia chi cua bang chua cac ma led 7 doan
MOV SCON,#52H
MOV TMOD,#20H
MOV TH1,#-3
; Com Smod Hoat Dong Cua Toc Do Baud
MOV A, PCON ;chu y de truyen dung toc 19200bps,
SETB ACC.7 ; SMOD =1, thanh anh 11.0592m
MOV PCON, A
NHAN: SETB TR1
JNB RI,$
CLR RI
Bài 5: Timer -Interrupt
Trang V-18
MOV A, SBUF
MOV SBUF, A
SUBB A, #31H
CALL LED7
JMP NHAN
LED7:
MOVC A, @A+DPTR
MOV P1, A
RET
LED7S: DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH, 67H
END
b. Yêu cầu:
- Thiết lập kết nối có cùng tốc ñộ baud giữa máy tính sao cho giống như
tốc ñộ baud của AT89xxx. Cho chạy chương trình và kiểm tra kết quả có
truyền và kết nối ñược hay không ? Vì sao ?
- Chương trình gới ý mẫu trên viết cho thạch anh tần số 11.0952Mhz. Sinh
viên sửa lại tốc ñộ baud ñể nạp lại cho thanh ghi TH1 bằng cách xem lại
tần số thạch anh dùng trong board ET-LAB3A và xem lại công thức tính
toán trong bài học. Sao ñó cho chạy chương trình ñể kiểm tra có nhận
ñược hay không ?
- Sửa lai chương trình sao cho có thể truyền các mã Ascii của các ký tự ra
LED 7 ñoạn.
- Sửa lại chương trình có thể truyền các ký tự từ A từ vi ñiều khiển về máy
tính.
- Sửa lại chương trình ñể có thể truyền các ký tự số từ 0 ñến 9 từ máy tính
xuống vi ñiều khiển và xuất ra LED 7 ñoạn dùng SMOD =0, tốc ñộ baud
là 9200 với tần số thạch anh hiện có của Board thí nghiệm ET-LAB3A
-----------Hết-----------