Bài 5: Timer -Interrupt

BÀI 5:

LẬP TRÌNH ðIỀU KHIỂN TIMER - INTERRUPT (cid:1)(cid:2)(cid:2)(cid:2)(cid:2)

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:

Trang V-1

Cấu trúc của bộ Timer/ Counter trong 89C51 như hình sau.

Bài 5: Timer -Interrupt

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

Trang V-2

• Chế ñộ 0 (13 bit):

Bài 5: Timer -Interrupt

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

Trang V-3

Thanh ghi IE (Interrupt Enable Register)

Bài 5: Timer -Interrupt

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:

Trang V-4

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

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

Trang V-6

Cấu trúc chương trình sử dụng ngắt

Bài 5: Timer -Interrupt

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).

Trang V-7

a. Chương trình mẫu gợi ý

Bài 5: Timer -Interrupt

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

ORG 0000H

KHOI DONG:

JMP START

MOV TCON, #00H

Trang V-8

a. Chương trình mẫu gợi ý

Bài 5: Timer -Interrupt

MOV TMOD, #00H

MOV A, R3

MOV PSW, #00H

JNZ LOOPC

MOV IE, #00H

RET

RET

TONE_TWO:

DELAYMS:

MOV R4, #00H

MOV R7, #00H

MOV R3, #02H

LOOPA:

INC R7

LOOPD:

INC R4

MOV A, R7

CALL DELAY

CJNE A, #0FFH, LOOPA

CALL DELAYMS

RET

INC R2

DELAYHS:

CPL P1.5 ; ; kết nối với speaker

MOV A, R4

MOV R6, #80H

JNZ LOOPD

MOV R5, #02H

DEC R3

LOOPB:

INC R6

MOV A, R3

CALL DELAYMS

JNZ LOOPD

MOV A, R6

RET

JNZ LOOPB

DELAY:

DEC R5

MOV A, R2

MOV A, R5

MOV R7, A

JNZ LOOPB

LOOPE: INC R7

RET

MOV A, R7

TONE_ONE:

CJNE A, #0FFH, LOOPE

MOV R4, #00H

RET

MOV R3, #02H

START:

LOOPC:

INC R4

CALL KHOI DONG

CALL DELAY

LOOP:

CALL DELAYMS

CALL TONE-ONE

DEC R2

CALL TONE_TWO

CPL

P1.5 ; kết nối với speaker

MOV A, R4

JMP LOOP

JNZ LOOPC

END

DEC R3

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

Trang V-9

của chương trình.

Bài 5: Timer -Interrupt

- 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

Trang V-10

MOV P2,A ; giá trị ñơn vị của giây

Bài 5: Timer -Interrupt

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.

Trang V-11

- 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

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

Trang V-12

HERE:

Bài 5: Timer -Interrupt

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

- Sửa ñổi chương trình ñể có thể tạo xung vuông ON/OFF 1 giây.

ñược thì cho biết lệnh ñó và cho chạy lại chương trình ñể kiểm tra.

- 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 SETB TR1

JMP main HERE:

ORG 000Bh JMP HERE

JMP TIMER0_ISR ;-----------

ORG 001Bh TIMER0_ISR:

JMP Timer1_ISR CPL P2.0

MAIN: RETI

SETB EA ;-----------

SETB ET0 TIMER1_ISR:

SETB ET1 MOV TH1,#HIGH(-TTTT)

MOV TMOD,#XXh MOV TL1,#LOW(-TTTT)

MOV TH0,#(-YYYY) CPL P2.1

MOV TL0,#(-YYYY) RETI

SETB TR0 ;-----------

MOV TH1,#HIGH(-ZZZZ) END

Trang V-13

MOV TL1,#LOW(-ZZZZ)

Bài 5: Timer -Interrupt

Bài 2: Chương trình mẫu gợi ý ñiều khiển phút dây dùng Interrupt Timer

ORG 0

CJNE A,#60,ExitIncTime ; Nếu Giây = 60

JMP Main

MOV 32h,#0 ; thì Giây = 0

ORG 0Bh

INC 31h ; và tăng phút

JMP Timer0_ISR

MOV A,31h

Main:

CJNE A,#60,ExitIncTime ; Nếu Phút = 60

SETB EA

MOV 31h,#0 ; thì Phút = 0

SETB ET0

ExitIncTime:

MOV TMOD,#01h

RET

MOV TH0,#HIGH(-50000) ; ðếm 50000

;---------

MOV TL0,#LOW(-50000);chu kỳ =50 ms

Display:

MOV R7,#20 ; 20 x 50ms = 1000ms = 1s

MOV A,31h ; Hiển thị 2 Led chỉ phút

MOV B,#10

SETB TR0

DIV AB

MOV 31h,#0 ; Phút

MOV DPTR,#MaLed7

MOV 32h,#0 ; Giây

MOVC A,@A+DPTR

CALL display

MOV P2,A

here:

MOV P1, #03H

JMP here

MOV A,B

;----------

MOVC A,@A+DPTR

Timer0_ISR:

MOV P2,A

MOV TH0,#HIGH(-50000)

MOV P1, #02H

MOV TL0,#LOW(-50000)

DJNZ R7,exittimer0

MOV A,32h ; Hiển thị 2 Led chỉ giây

MOV B,#10

MOV R7,#20

DIV AB

CALL IncTime ; Cứ mỗi 1s thì tăng thời gian

MOV DPTR,#MaLed7

CALL display ; và hiển thị ra Led

MOVC A,@A+DPTR

exittimer0:

MOV P2,A

RETI

MOV P1, #01H

;---------

MOV A,B

IncTime:

MOVC A,@A+DPTR

INC 32h ; Tăng giây

MOV P2,A

MOV A,32h

Trang V-14

a. Chương trình mẫu gợi ý ñồng hồ hiển thị phút giây dùng ngắt Timer0

Bài 5: Timer -Interrupt

MOV P1, #00H

MaLed7: DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH, 67H

RET

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 RETI

JMP main ;---------

ORG 03h display:

JMP Int0_ISR MOV A,30h

main: MOV B,#10

DIV AB SETB EA

MOV DPTR,#MaLed7

SETB EX0 MOV 30h,#0 MOVC A,@A+DPTR

CALL display MOV P2,A

here: MOV P1, #00H

JMP here MOV A,B

;---------- MOVC A,@A+DPTR

Int0_ISR: MOV P2,A

INC 30h MOV P1, #01H

MOV A,30h RET

CJNE A,#100,next ;---------

MOV 30h,#0 MaLed7: DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH, 67H next: END

Trang V-15

CALL display

Bài 5: Timer -Interrupt

- 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

b. Yêu cầu:

SETB EA SETB EX0 SETB IT0

ñó So sánh trường hợp sử dụng ngắt bằng cạnh và bằng mức logic

- 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

CALL display RETI ;---------- Int1_ISR: DEC 30h MOV A,30h CJNE A,#255,next1 MOV 30h,#99 Next1: CALL display RETI

;---------

Trang V-17

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: 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

RET

;---------

MaLed7: DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH, 67H

END MOVC A,@A+DPTR MOV P2,A MOV P1, #00H MOV A,B MOVC A,@A+DPTR MOV P2,A MOV P1, #01H

- 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

b. Yêu cầu:

- 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,$

Trang V-17

CLR RI

Bài 5: Timer -Interrupt

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

Trang V-18

-----------Hết-----------