Tải bản đầy đủ (.doc) (41 trang)

thi nghiem vi xu ly

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (138.58 KB, 41 trang )

THÍ NGHIỆM VI XƯ LÝ EME – MC8
BÀI 1: THÍ NGHIỆM VỚI NÚT NHẤN VÀ LED ĐƠN
1. Thí nghiệm 1: Viết chương trình thực hiện đọc liện tục trạng thái nút nhấn
được nối đến P1.0 và hiển thò ra Led được nối tại chân P1.1 ( bit thứ 1 của
port 1)
ORG 2000H

MAIN:
MOV C,P1.0
MOV P1.1,C
SJMP MAIN
END
a. Khi nhấn có 2 đèn sáng cùng lúc: khi mình nhấn P1.0 ( đèn sáng) thì dữ liệu từ P1.0 được
chuyển qua P1.1 thông qua cờ C, thời gian chuyển quá nhanh ( thời gian thực hiện lệnh là
vài micro giây) => ta nhìn sẽ thấy 2 đèn cùng sáng/tắt cùng lúc.
b. Các bit của 4 port được sử dụng trong thì nghiệm trên: Vì EME-MC8 thiết kế hoat động ở
chế độ 3 bus, nên port 0: bus dữ liệu, port 2: bus đòa chỉ, P3.0, P3.1, P3.6, P3.7 dùng làm
bus điều khiển. Các chân còn lại của các port đều có thể dùng trong thí nghiệm này.

2. Thí nghiệm 2: Viết chương trình tạo xung vuông 1Hz được nối đến chân P1.0
với tần số dao động dùng trong hệ thống là 11.059MHz
a.
Duty cycle: 50% - Hz
ORG 2000H

LAP:
CPL P1.0
ACALL DL
SJMP LAP
DL:
MOV R5,#10


L2:
MOV R6,#100
L1:
MOV
DJNZ
DJNZ
DJNZ
RET
END

R7,#250
R7,$
R6,L1
R5,L2


Dùng vòng lặp để tạo trễ 0.5s, với giá trò nạp cho R5, R6, R7 như trên tính theo công thức
gần đúng là t=2*m*n*p
Với giá trò nạp: R5 = 10, R6 = 200, R7 = 250 để giảm sai số.

b.

Duty cycle: 30% - tầân số 0.5Hz
ORG 2000H
LAP:
MOV R1,#3
MOV R2,#7
CLR P1.0
LAP1:
ACALL DL

DJNZ R1,LAP1
SETB P1.0
LAP2:
ACALL DL
DJNZ R2,LAP2
SJMP LAP
DL:
L2:
L1:

MOV
MOV
MOV
DJNZ
DJNZ
DJNZ
RET
END

R5,#4
R6,#200
R7,#250
R7,$
R6,L1
R5,L2

3. Thí nghiệm 3:
a.
Viết chương trình tạo xung vuông 1Hz dùng timer 0
ORG 2000H


MAIN:
CPL P1.0
ACALL DL500
SJMP MAIN
DL500:
MOV TMOD,#01H
MOV R7,#10
LOOP:
MOV TH0,#HIGH(-50000) ; giá trò nạp là 50000*10 = 500000us = 0.5s
MOV TL0,#LOW(-50000)
SETB TR0


JNB
CLR
CLR
DJNZ
RET
END

b.

TF0,$
TF0
TR0
R7,LOOP

; đợi cờ TF0 tràn và xóa cờ tràn


Dùng ngắt Timer 0:
ORG
LJMP
ORG
LJMP

2000H
MAIN
200BH
ISRT0

MOV
SETB
MOV
MOV
SJMP

TMOD,#01H
TF0
IE,#82H
R7,#11
$

DJNZ
CPL
MOV
SJMP

R7,NAP
P1.0

R7,#10
KT

CLR
MOV
MOV
SETB
RETI
END

TR0
TH0,#HIGH(-50000)
TL0,#LOW(-50000)
TR0

MAIN:

ISRT0:

NAP:

KT:

4. Thí nghiệm 4: Viết chương trình làm cho led nối đến chân P1.0 chớp tắt với
tần số có thể tăng hoặc giảm bằng cách nhấn nút nối đến chân P1.1 hoặc
P1.2. Chu kì chớp tắt trung bình là 1s
ORG 2000H
MAIN:
CPL
MOV

JNB
DEC

P1.0
A,#10
P1.1,KT_GIAM
A
;Khi nhấn P1.1 thì f tăng => Chu kỳ giảm => giảm R7


MOV R7,A
SJMP LAP
; mỗi lần giảm là 1*25000us = 0.025s
KT_GIAM:
JNB P1.2,LAP
INC A
MOV R7,A
LAP:
ACALL DL500
DJNZ R7,LAP
SJMP MAIN
DL500:
MOV TMOD,#01H
MOV TH0,#HIGH(-25000) ; giá trò là 50000*R7 (R7TB = 10) = 500000us = 0.5s
MOV TL0,#LOW(-25000)
SETB TR0
JNB TF0,$
; đợi cờ TF0 tràn và xóa cờ tràn
CLR TF0
CLR TR0

RET
END

BÀI TẬP:
1. Viết chương trình thực hiện cổng logic: XOR 2 ngõ vào
ORG 2000H

MAIN:
CLR
MOV
MOV
MOV
MOV
MOV
XRL
MOV
MOV
SJMP
END

A
C,P1.0
ACC.0,C
R0,A
C,P1.1
ACC.0,C
A,R0
C,ACC.0
P1.5,C
MAIN


2. Viết chương trình thực hiện mạch đèn chạy: STTTTTT-SSTTTTTT-SSSTTTTTSSSSTTTT…….-SSSSSSSS-TTTTTTT. Thời gian thực hiện chương trình là 4.5s
(với S: đèn sáng, T: đèn tắt)
ORG 2000H

MAIN:
CLR

A


MOV DPTR,#TABLE
MOV R7,#8
LAP:
MOVC A,@A+DPTR
ACALL DL500
INC A
DJNZ R7,LAP
SJMP MAIN
DL500:
MOV TMOD,#01H
MOV R6,#10
LOOP:
MOV TH0,#HIGH(-50000) ; giá trò nạp là 50000*10 = 500000us = 0.5s
MOV TL0,#LOW(-50000)
SETB TR0
JNB TF0,$
; đợi cờ TF0 tràn và xóa cờ tràn
CLR TF0
CLR TR0

DJNZ R6,LOOP
RET
TABLE:
DB
7FH,3FH,1FH,0FH,07H,03H,01H,00H,0FFH
END

3. Viết chương trình thực hiện phép logic: P1.5 = (P1.0 XOR P1.1) AND P1.2)
ORG 2000H

MAIN:
CLR
MOV
MOV
MOV
MOV
MOV
XRL
MOV
MOV
MOV
ANL
MOV
MOV
SJMP
END

A
C,P1.0
ACC.0,C

R0,A
C,P1.1
ACC.0,C
A,R0
R0,A
C,P1.2
ACC.0,C
A,R0
C,ACC.0
P1.5,C
MAIN

; R0 = P1.0 XOR P1.1


BÀI 2: THÍ NGHIỆM HIỂN THỊ DÙNG LED 7 ĐOẠN
1. Thí nghiệm 1:Viết chương trính thực hiện bộ đếm từ 0->9 và hiển thò trên led
7 đoạn, mỗi lần cách nhau 2s
ORG 2000H

MAIN:
MOV R7,#10
MOV R5,#0
LOOP:
MOV DPTR,#TABLE
MOV A,R5
MOVC A,@A+DPTR
ACALL DL2S
MOV DPTR,#0000H
MOVX @DPTR,A

INC R5
DJNZ R7,LOOP
SJMP MAIN
DL2S:
MOV R6,#40
MOV TMOD,#01H
LAP:
MOV
MOV
SETB
JNB
CLR
CLR
DJNZ
RET
TABLE:
DB
END

TH0,#HIGH(-50000)
TL0,#LOW(-50000)
TR0
TF0,$
TF0
TR0
R6,LAP

70H,71H,72H,73H,74H,75H,76H,77H,78H,79H

2. Thí nghiệm 2:

a.
Viết chương trình hiển thò giá trò 1234 lên led 7 đoạn
ORG 2000H

MAIN:
MOV R7,#4


MOV R5,#0
LOOP:
MOV DPTR,#TABLE
MOV A,R5
MOVC A,@A+DPTR
ACALL DL2MS
MOV DPTR,#0000H
MOVX @DPTR,A
INC R5
DJNZ R7,LOOP
SJMP MAIN
DL2MS:
MOV TMOD,#01H
MOV TH0,#HIGH(-2000)
MOV TL0,#LOW(-2000)
SETB TR0
JNB TF0,$
CLR TF0
CLR TR0
RET
TABLE:
DB 71H,0B2H,0D3H,0E4H ;tương ứng với giá trò 1234 hiển thò lên Led 1 2 3 4

END

b.

Thay đổi chương trình để giá trò 1234 có thể hiển thò thông qua mã
BCD nén chứa trong cặp thanh ghi R7 & R6,Biết R7 là MSB
ORG 2000H

MAIN:
MOV R7,#12H
MOV R6,#34H
MOV A,R7
ANL A,#0F0H
SWAP A
ADD A,#70H
MOV R1,A ; R1 chưa gía trò 71H tương ứng với giá trò 1 đươc xuất ra led 1
MOV A,R7
ANL A,#0FH
ADD A,#0B0H
MOV R2,A ; R2 chưa giá trò 0B2H tương ứng với giá trò 1 được xuất ra led 2
MOV A,R6
ANL A,#0F0H


SWAP A
ADD A,#0D0H
MOV R3,A ; R3 chưa giá trò 0D3H tương ứng với giá trò 1 được xuất ra led 3
MOV A,R6
ANL A,#0FH
ADD A,#0E0H

MOV R4,A ; R4 chưa giá trò 0E4H trương ứng với giá trò 1 đươc xuất ra led 4
LAP:
MOV DPTR,#0
MOV A,R1
MOVX @DPTR,A
ACALL DL2MS
MOV A,R2
MOVX @DPTR,A
ACALL DL2MS
MOV A,R3
MOVX @DPTR,A
ACALL DL2MS
MOV A,R4
MOVX @DPTR,A
ACALL DL2MS
SJMP LAP
DL2MS:
MOV TMOD,#01H
MOV TH0,#HIGH(-2000)
MOV TL0,#LOW(-2000)
SETB TR0
JNB TF0,$
CLR TF0
CLR TR0
RET
END

3. Thí nghiệm 3: Viết chương trình hiển thò giá trò nhò phân trong thanh ghi R7
lên led 7 đoạn
ORG 2000H


MAIN:
MOV
MOV
MOV
DIV
MOV
MOV

R7,#254
B,#10
A,R7
AB
R4,B
B,#10

; nạp tùy ý giá trò R7 để kiểm tra

; R4 chứa giá trò hàng đơn vò


DIV AB
MOV R3,B
MOV R2,A

; R3 chứa giá trò hàng chục
; R2 chưa giá trò hàng trăm

LAP:
MOV DPTR,#0

MOV A,R2
ADD A,#0B0H
MOVX @DPTR,A
ACALL DL2MS
MOV A,R3
ADD A,#0D0H
MOVX @DPTR,A
ACALL DL2MS
MOV A,R4
ADD A,#0E0H
MOVX @DPTR,A
ACALL DL2MS
SJMP LAP
DL2MS:
MOV TMOD,#01H
MOV TH0,#HIGH(-2000)
MOV TL0,#LOW(-2000)
SETB TR0
JNB TF0,$
CLR TF0
CLR TR0
RET
END

BÀI TẬP:
1. Đếm số từ 0-99 (giả sử <100) xuất ra led 7 đoạn. Mỗi lần xuất cách nhau
ORG 2000H

MAIN:
MOV DPTR,#0

MOV R7,#0
MOV R6,#0
JB
SJMP
NHAY:
INC
CJNE

P1.0,NHAY
MAIN
R7
R7,#0AH,SKIP

; nhảy khi nhấn P1.0

; nhảy đến SKIP khi R7 # 0AH


MOV R7,#0
INC R6
SKIP:
MOV A,R7
ADD A,#0E0H
MOVX @DPTR,A
ACALL DL2MS
MOV A,R6
ADD A,#0D0H
MOVX @DPTR,A
JNB P1.0,SKIP
; nhảy đến SKIP khi không nhấn P1.0

SJMP NHAY
DL2MS:
MOV TMOD,#01H
MOV TH0,#HIGH(-2000)
MOV TL0,#LOW(-2000)
SETB TR0
JNB TF0,$
CLR TF0
CLR TR0
RET
END

2. Viết chương trình đếm từ 0-60 rồi lặp lại, mỗi lần đếm cách nhau 1s

ORG 2000H
MOV R6,#0
MOV R7,#0
LOOP1:
MOV R5,#100
; gán R5 = 100*(5ms+5ms) = 1s để led xuất ra có sự lưu ảnh.
LOOP:
MOV DPTR,#0
MOV A,R7
ADD A,#0E0H
MOVX @DPTR,A
ACALL DL5MS
MOV A,R6
ADD A,#0D0H
MOVX @DPTR,A
ACALL DL5MS

DJNZ R5,LOOP
INC R7
CJNE R7,#0AH,LOOP1


MOV
INC
CJNE
MOV
SJMP
DL5MS:
MOV
MOV
MOV
SETB
JNB
CLR
CLR
RET
END

R7,#0
R6
R6,#6,LOOP1
R6,#0
LOOP1
TMOD,#01H
TH0,#HIGH(-5000)
TL0,#LOW(-5000)
TR0

TF0,$
TF0
TR0

BAØI 3: THÍ NGHIỆM HIỂN THỊ BẰNG LCD
1. Thí nghiệm 1: Hiển thị chuỗi “Hello world” leân LCD
ORG 2000H

MAIN:
MOV DPTR,#8000H
ACALL CLEAR
ACALL INIT_LCD
ACALL HIEN_CHU
ACALL DELAY1
SJMP MAIN
;=============================================Chương trình con LCD
INIT_LCD:
MOV A,#38H
ACALL WRITECOM
MOV A,#0EH
ACALL WRITECOM
MOV A,#06H
ACALL WRITECOM
RET
CLEAR:
MOV A,#01H
ACALL WRITECOM
RET



WRITECOM:
SETB P3.4
CLR P3.5
MOVX @DPTR,A
CLR P3.4
ACALL DELAY_50MS
RET
WRITETEXT:
SETB P3.4
SETB P3.5
MOVX @DPTR,A
CLR P3.4
ACALL DELAY2
RET
HIEN_CHU:
MOV A,#'H'
ACALL WRITETEXT
MOV A,#'E'
ACALL WRITETEXT
MOV A,#'L'
ACALL WRITETEXT
MOV A,#' 'O’
ACALL WRITETEXT
MOV A,#'’W'
ACALL WRITETEXT
MOV A,#'’O'
ACALL WRITETEXT
MOV A,#'’R'
ACALL WRITETEXT
MOV A,#'’L'

ACALL WRITETEXT
RET
; ===============================================Chương trình DELAY
DELAY_50MS:
MOV R3,#100
LOOP1:
MOV R7,#250
DJNZ R7,$
DJNZ R3,LOOP1
RET
DELAY1:
; delay 300ms
MOV R6,#3
LOP1:


MOV R5,#200
LOP:
MOV
DJNZ
DJNZ
DJNZ
RET
DELAY2:
MOV
LOOP2:
MOV
DJNZ
DJNZ
RET

END

R4,#250
R4,$
R5,LOP
R6,LOP1

R3,#1
R7,#50
R7,$
R3,LOOP2

BÀI TẬP:
Viết chương trình hiển thị chuỗi: “DHBK TPHCM” chạy trên màn hình, khi hết
màn hình thì chạy ngược lại, lặp lại quá trình trên
ORG 2000H
MAIN:
MOV DPTR,#8000H
MOV R1,#6
ACALL CLEAR
ACALL INIT_LCD
ACALL HIEN_CHU
ACALL DELAY
LAP1:
MOV A,#1CH
ACALL WRITECOM
ACALL DELAY
DJNZ R1,LAP1
MOV R1,#6


; dòch phải

MOV A,#18H
ACALL WRITECOM
ACALL DELAY
DJNZ R1,LAP
MOV R1,#6
SJMP LAP1

; dòch trái

LAP:


;=============================================Chương trình con LCD
INIT_LCD:
MOV A,#38H
ACALL WRITECOM
MOV A,#0EH
ACALL WRITECOM
MOV A,#06H
ACALL WRITECOM
RET
CLEAR:
MOV A,#01H
ACALL WRITECOM
RET
WRITECOM:
SETB P3.4
CLR P3.5

MOVX @DPTR,A
CLR P3.4
ACALL DELAY_50MS
RET
WRITETEXT:
SETB P3.4
SETB P3.5
MOVX @DPTR,A
CLR P3.4
ACALL DELAY2
RET
HIEN_CHU:
MOV A,#'D'
ACALL WRITETEXT
MOV A,#'H'
ACALL WRITETEXT
MOV A,#'B'
ACALL WRITETEXT
MOV A,#'K'
ACALL WRITETEXT
MOV A,#' '
ACALL WRITETEXT
MOV A,#'T'
ACALL WRITETEXT
MOV A,#'P'


ACALL WRITETEXT
MOV A,#'H'
ACALL WRITETEXT

MOV A,#'C'
ACALL WRITETEXT
MOV A,#'M'
ACALL WRITETEXT
RET
; ===============================================Chương trình DELAY
DELAY_50MS:
MOV R3,#100
LOOP1:
MOV R7,#250
DJNZ R7,$
DJNZ R3,LOOP1
RET
DELAY:
MOV R6,#3
LOP1:
MOV R5,#200
LOP:
MOV R4,#250
DJNZ R4,$
DJNZ R5,LOP
DJNZ R6,LOP1
RET
DELAY2:
MOV R3,#1
LOOP2:
MOV R7,#50
DJNZ R7,$
DJNZ R3,LOOP2
RET

END

BÀI 4: THÍ NGHIỆM GIAO TIẾP QUA CỔNG NỐI TIẾP
1. Thí nghiệm 1: Phát chuỗi “Hello World” ra port nối tiếp
ORG 2000H

MAIN:
MOV SCON,#52H
MOV TMOD,#20H


MOV TH1,#-3
SETB TR1
MOV DPTR,#TABLE
LAP:
CLR A
MOVC A,@A+DPTR
INC DPTR
ACALL OUT_CHAR
JNZ LAP
SJMP $
OUT_CHAR:
JNB TI, $
CLR TI
MOV SBUF, A
RET
TABLE:
DB
'Hello, world',0
END


;phaựt kớ t ra port ni tip

; phaựt ti khi gp kớ t 0 thỡ dng

2. Thớ nghim 2: Nhn kớ t t port ni tip hin th ra LCD (tc ủ port chn laứ
9600pbs)
EN
RS

ORG 2000H
BIT P3.4
BIT P3.5

MAIN:
MOV DPTR, #8000H
ACALL LCD_INIT
ACALL UART_INIT
ACALL CLEAR
LOOP:
MOV R4,#16
LAP1:
ACALL IN_CHAR
ACALL WRITE_TEXT
DJNZ R4,LA
MOV R4,#16
MOV A,#0C8H
ACALL WRITE_COM
LAP2:
ACALL IN_CHAR

ACALL WRITE_TEXT

;ủeồ con troỷ xuoỏng haứng


DJNZ R4,LAP2
ACALL CLEAR
SJMP LOOP
;============================================ Chương trình con port nối tiếp
UART_INIT:
MOV SCON,#52H
MOV TMOD,#20H
MOV TH1,#-3
SETB TR1
RET
OUT_CHAR:
JNB TI, $
;khi phaùt heát TI=1
CLR TI
MOV SBUF, A
RET
IN_CHAR:
JNB RI, $
CLR RI
MOV A, SBUF
RET
;============================================== Chương trình con LCD
LCD_INIT:
MOV A,#38H
ACALL WRITE_COM

MOV A,#0EH
ACALL WRITE_COM
MOV A,#06H
ACALL WRITE_COM
RET
CLEAR:
MOV A,#01H
ACALL WRITE_COM
RET
WAIT_LCD:
MOV R7, #100
DEL1:
MOV R6, #250
DJNZ R6, $
DJNZ R7, DEL1
RET
WRITE_TEXT:
ACALL WAIT_LCD
SETB RS


MOVX @DPTR, A
SETB EN
CLR EN
RET
WRITE_COM:
ACALL WAIT_LCD
CLR RS
MOVX @DPTR, A
SETB EN

CLR EN
RET
END

3. Thí nghiệm 3: Nhận kí tự từ port nối tiếp hiển thị ra LCD đồng thời phát ra
lại port nối tiếp (tốc độ port chọn là 9600pbs)
EN
RS
MAIN:

ORG 2000H
BIT P3.4
BIT P3.5
; chương trình chính
MOV DPTR, #8000H
ACALL LCD_INIT
ACALL UART_INIT
ACALL CLEAR

LOOP:
MOV R4,#16

; gán R4 = 16 để nhập chữ đđủ trên hàng 1 rồi xuống hàng 2

LAP1:
ACALL IN_CHAR
ACALL WRITE_TEXT
ACALL OUT_CHAR
DJNZ R4,LAP1
MOV R4,#16

MOV A,#0C0H
; để con trỏ xuống hàng
ACALL WRITE_COM
LAP2:
ACALL IN_CHAR
ACALL WRITE_TEXT
ACALL OUT_CHAR
DJNZ R4,LAP2
ACALL CLEAR


SJMP LOOP
;========================================= Chương trình con port nối tiếp
UART_INIT:
MOV
MOV
MOV
SETB
RET

; khởi đñộng port nối tiếp
SCON,#52H
TMOD,#20H
TH1,#-3
TR1

OUT_CHAR:
JNB TI, $
CLR TI
MOV SBUF, A

RET

; phaùt kí tự ra port nối tiếp
;khi phaùt heát TI = 1

IN_CHAR:
; thu kí tự từ port nối tiếp
JNB RI, $
CLR RI
MOV A, SBUF
RET
;============================================== Chương trình con LCD
LCD_INIT:
; khởi đñộng LCD
MOV A,#38H
ACALL WRITE_COM
MOV A,#0EH
ACALL WRITE_COM
MOV A,#06H
ACALL WRITE_COM
RET
CLEAR:
MOV A,#01H
ACALL WRITE_COM
RET
WAIT_LCD:
MOV
DEL1:
MOV
DJNZ

DJNZ

; chương trình tạo delay chờ cho LCD
R7, #100
R6, #250
R6, $
R7, DEL1


RET
WRITE_TEXT:
; ghi kí tự ra LCD
ACALL WAIT_LCD
SETB RS
MOVX @DPTR, A
SETB EN
CLR EN
RET
WRITE_COM:
; ghi lệnh ra LCD
ACALL WAIT_LCD
CLR RS
MOVX @DPTR, A
SETB EN
CLR EN
RET
END

BÀI TẬP:
Viết chương trình nhập kí tự từ bàn phím về làm công việc sau đây:

a. Kiểm tra xem kí tự nhận được là A-Z hoặc a-z thì hiển thị lên LCD
b. Kiểm tra xem kí tự nhận nhấn được số từ 0-9 thì hiển thị qua led 7 đoạn
c. Nếu nhấn phím Enter thì xuống hàng mã ASCII 13H
d. Nếu nhấn phím ESC thì xóa màn hình LCD mã ASCII 27H
EN
RS
MAIN:

ORG 2000H
BIT P3.4
BIT P3.5
MOV DPTR, #8000H
ACALL LCD_INIT
ACALL UART_INIT
ACALL CLEAR

LOOP:
MOV R4,#16
LAP1:
ACALL IN_CHAR
ACALL NHANKYTU
ACALL OUT_CHAR
DJNZ R4,LAP1


MOV R4,#16
MOV A,#0C0H
ACALL WRITE_COM

;để con trỏ xuống hàng


LAP2:
ACALL IN_CHAR
ACALL NHANKYTU
ACALL OUT_CHAR
DJNZ R4,LAP2
ACALL CLEAR
SJMP LOOP
;=======================================Chương trình con Port nối tiếp
UART_INIT:
MOV SCON,#52H
MOV TMOD,#20H
MOV TH1,#-3
SETB TR1
RET
OUT_CHAR:
JNB TI, $
;khi phát hết TI = 1
CLR TI
MOV SBUF, A
RET
IN_CHAR:
JNB RI, $
CLR RI
MOV A, SBUF
RET
;========================================== Chương trình con LCD
LCD_INIT:
MOV A,#38H
ACALL WRITE_COM

MOV A,#0EH
ACALL WRITE_COM
MOV A,#06H
ACALL WRITE_COM
RET
CLEAR:
MOV A,#01H
ACALL WRITE_COM
RET
WAIT_LCD:
MOV R7, #100


DEL1:
MOV R6, #250
DJNZ R6, $
DJNZ R7, DEL1
RET
WRITE_TEXT:
ACALL WAIT_LCD
SETB RS
MOVX @DPTR, A
SETB EN
CLR EN
RET

baứi

WRITE_COM:
ACALL WAIT_LCD

CLR RS
MOVX @DPTR, A
SETB EN
CLR EN
RET
;=========Chng trỡnh con kim tra kớ t nhn ủc t Port ni tip ve x lớ theo ủ
NHANKYTU:
PUSH ACC
;....................................................................................kim tra ESC VA ENTER
CJNE A,#13,SKIP1
MOV A,#0C0H
ACALL WRITE_COM
SJMP THOAT

;ủeồ con troỷ xuoỏng haứng

SKIP1:
CJNE A,#27,TIEP
ACALL CLEAR
SJMP THOAT
;............................................................................................................ki m tra 0-9
TIEP:
CJNE
JNC
SJMP
KTRA3:
CJNE

A,#30H,$+3
KTRA3

THOAT
A,#3AH,$+3


JC
XUAT_LED
;............................................................................................................kiểm tra A-Z
CJNE A,#41H,$+3
JNC KTRA1
SJMP THOAT
KTRA1:
CJNE A,#5BH,$+3
JC
XUAT_LCD
; C=1 thì A < 5AH
;............................................................................................................ki ểm tra a-z
CJNE A,#61H,$+3
JNC KTRA2
SJMP THOAT
KTRA2:
CJNE A,#7BH,$+3
JC
XUAT_LCD
XUAT_LED:
PUSH DPH
PUSH DPL
MOV DPTR,#0
ANL A,#0FH
ADD A,#0E0H
MOVX @DPTR,A

ACALL DELAY_2MS
POP DPL
POP DPH
SJMP THOAT
XUAT_LCD:
ACALL WRITE_TEXT
THOAT:
POP ACC
RET
;========================Chương trình con tạo trễ tạo sự lưu ảnh treân led 7 ñoạn
DELAY_2MS:
MOV R1,#4
LAP9:
MOV R2,#250
DJNZ R2,$
DJNZ R1,LAP9
RET


END

BÀI 5: THÍ NGHIỆM ĐIỀU KHIỂN ADC
1. Thí nghiệm 1: Viết chương trình thực hiện đọc điện áp của biến trở trên
kênh 0 và hiển thò ra led 7 đoạn.
ORG 2000H

MAIN:
MOV DPTR,#4000H
MOV A,#0
MOVX @DPTR,A

ACALL DELAY_100US
MOVX A,@DPTR
MOV DPTR,#0000H
MOV B,#10
DIV AB
MOV R7,B
MOV B,#10
DIV AB
ORL A,#0B0H
MOVX @DPTR,A
ACALL DELAY_1MS
MOV A,B
ORL A,#0D0H
MOVX @DPTR,A
ACALL DELAY_1MS
MOV A,R7
ORL A,#0E0H
MOVX @DPTR,A
ACALL DELAY_1MS
SJMP MAIN
DELAY_100US:
MOV R6,#200
DJNZ R6,$
RET
DELAY_1MS:
MOV R6,#5
LOOP:
MOV R5,#100
DJNZ R5,$
DJNZ R6,LOOP

RET

;đòa chỉ khối ADC


END

2. Thí nghiệm 2: Viết chương trình đọc điện áp của kênh 0 và hiển thò lên LCD
ORG 2000H
MAIN:
MOV DPTR,#4000H
;đòa chỉ khối ADC
MOV A,#0
MOVX @DPTR,A
ACALL DELAY_100US
MOVX A,@DPTR
MOV B,#10
DIV AB
MOV R2,B
MOV B,#10
DIV AB
MOV DPTR,#8000H
ACALL CLEAR
ACALL INIT_LCD
ACALL HIEN_CHU
ACALL DELAY1
SJMP MAIN
;=============================================Chương trình con LCD
INIT_LCD:
MOV A,#38H

ACALL WRITECOM
MOV A,#0EH
ACALL WRITECOM
MOV A,#06H
ACALL WRITECOM
RET
CLEAR:
MOV A,#01H
ACALL WRITECOM
RET
WRITECOM:
SETB P3.4
CLR P3.5
MOVX @DPTR,A
CLR P3.4
ACALL DELAY_50MS
RET


Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×