Vi điều khiển giao tiếp LED 7 đoạn
Trang 1VI ĐIỀU KHIỂN GIAO TIẾP LED 7 ĐOẠN
CHỨC NĂNG LED 7 ĐOẠN LÀ HIỂN THỊ SỐ THẬP PHÂN
CÓ 2 CÁCH: GIAO TIẾP TRỰC TIẾP VÀ GIAO TIẾP THEO PP QUÉT
CÁCH 1: GIAO TIẾP TRỰC TIẾP – DÙNG PORT ĐIỀU KHIỂN
MỖI PORT ĐIỀU KHIỂN 1 LED 7 ĐOẠN LOẠI ANODE CHUNG
MỖI PORT ĐIỀU KHIỂN TRỰC TIẾP 1 LED
HÌNH ẢNH LED – (LINK ĐĨA F TRONG MỤC GT CPLD – WEB HAY)
Trang 2LED SỬ DỤNG LÀ LED ANODE CHUNG: 0 THÌ LED SÁNG, 1 THÌ LED TẮT
Trang 3BÀI SỐ 2-2: CTDK LED 7 ĐOẠN ĐẾM THỜI GIAN TỪ 0 ĐẾN 9 – CÁCH 1 – DÙNG PORT0
LƯU ĐỒ ĐIỀU KHIỂN
CALL DELAY1S MOV P0,#0F9H ;SANG SO 1 CALL DELAY1S
MOV P0,#0A4H ;SANG SO 2 CALL DELAY1S
MOV P0,#0B0H ;SANG SO 3 CALL DELAY1S
MOV P0,#099H ;SANG SO 4 CALL DELAY1S
MOV P0,#092H ;SANG SO 5 CALL DELAY1S
MOV P0,#082H ;SANG SO 6 CALL DELAY1S
MOV P0,#0F8H ;SANG SO 7 CALL DELAY1S
MOV P0,#080H ;SANG SO 8 CALL DELAY1S
Trang 4MOV P0,#090H ;SANG SO 9 CALL DELAY1S
JMP LB
$INCLUDE(TV_DELAY.ASM)
END
LƯU ĐỒ – CÁCH 2
CÁC MÃ 7 ĐOẠN CỦA 10 SỐ TỪ 0 ĐẾN 9 ĐƯỢC LƯU VÀO BỘ NHỚ CHƯƠNG TRÌNH CHƯƠNG TRÌNH CÓ NHIỆM VỤ LẤY LẦN LƯỢT CÁC MÃ ĐEM GỞI RA PORT ĐIỀU KHIỂN LED ĐỂ HIỂN THỊ
VIẾT CHƯƠNG TRÌNH – CÁCH 2
;CHTR DK 1 LED 7 DOAN DEM TU 0 DEN 9
(H6) MOVC A,@A+DPTR ;LẤY MÃ
(H7) MOV P0,A ;HIỂN THỊ
(H8) CALL DELAY1S
(H9) INC DEM
(H10) CJNE DEM,#10,LB1
Trang 5(H13) LIỆT KÊ CÁC MÃ 7 ĐOẠN BẮT ĐẦU BẰNG KÍ HIỆU DB – DEFINE BYTE: ĐỊNH
NGHĨA 1 VÙNG DỮ LIỆU DẠNG BYTE
(H3)LB: MOV DPTR,#MA7DOAN
NẠP ĐỊA CHỈ MA7DOAN VÀO TG DPTR ĐỂ QUẢN LÝ VÙNG NHỚ CHỨA MÃ 7 ĐOẠN
(H13)MA7DOAN: DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H,090H
GIẢ SỬ ĐỊA CHỈ MA7DOAN CÓ GIÁ TRỊ LÀ 1000H
THÌ C0H SẼ LƯU VÀO ON CÓ ĐỊA CHỈ 1000H = 1000H + 0H – MÃ SỐ 0
CÒN F9H SẼ LƯU VÀO ON CÓ ĐỊA CHỈ 1001H = 1000H + 1H - MÃ SỐ 1
CÒN A4H SẼ LƯU VÀO ON CÓ ĐỊA CHỈ 1002H = 1000H + 2H - MÃ SỐ 2
CÒN B0H SẼ LƯU VÀO ON CÓ ĐỊA CHỈ 1003H = 1000H + 3H - MÃ SỐ 3
…
CÒN 90H SẼ LƯU VÀO ON CÓ ĐỊA CHỈ 1009H = 1000H + 9H - MÃ SỐ 9
1000H THÌ LƯU TRONG DPTR, CÒN CÁC CON SỐ 0, 1, 2, … THÌ LƯU TRONG A
LỆNH MOVC A,@A+DPTR COPY NDON (CÓ ĐC BẰNG DPTR + A) SANG TGA
Trang 6+2 +3 +4 +5 +6 +7 +8 +9
+1
90 80 F8 82 92 99 B0 A4 F9 (DPTR+A)=(1000) + 0 C0
DPTR + A = 1000H + 00H = 1000H – LẤY ND ON CÓ DC 1000H ĐƯA SANG A
SAU KHI THỰC HIỆN THÌ A = C0H – LÀ MÃ CỦA SỐ 0 – GỞI RA PORT 0 ĐỂ HIỂN THỊ
;CHTR DEM TU 0 DEN 9 - TREN 1 LED 7 DOAN NOI VOI P0 - CACH 2
DEM EQU R4 ORG 0H
MOV DPTR,#MA7DOAN ;CHO MA7DOAN=1000H
LB1: MOV A,DEM ;A=0,1,2
MOVC A,@A+DPTR ;,1000H,1001H,1002H (MA7DOAN, MA7DOAN+1) MOV P0,A ;P0=C0H,F9H,A4H
CALL DELAY1S INC DEM ;DEM=1,2 CJNE DEM,#10,LB1
;LUU CAC MA 7 DOAN VAO BO NHO CHTR
MA7DOAN: DB 0C0H,0F9H,0A4H,0B0H,99H
DB 092H,082H,0F8H,080H,090H
Trang 7$INCLUDE(TV_DELAY.ASM)
END TÓM TẮT GIẢI MÃ:
MOV DPTR,#MA7DOAN ;KHOI TAO DIA CHI QL MA7DOAN
MOV A,DEM ;DUA BIEN CAN GIAI MA SANG A MOVC A,@A+DPTR ;LAY MA 7 DOAN TUONG UNG
;LUU CAC MA 7 DOAN VAO BO NHO CHTR
MA7DOAN: DB 0C0H,0F9H,0A4H,0B0H,99H
DB 092H,082H,0F8H,080H,090H
GIỚI HẠN CỦA BIẾN ĐẾM LÀ TỪ 0 ĐẾN 9 – CHỈ 1 SỐ
NẾU CÓ NHIỀU SỐ THÌ TÁCH TỪNG CON SỐ RỒI TIẾN HÀNH GIẢI MÃ
GIẢI MÃ SỐ HEX ĐƯỢC KHÔNG?
BÀI SỐ 2-4: CTDK LED 7 ĐOẠN ĐẾM THỜI GIAN TỪ 9 ĐẾN 0 – DÙNG PORT0
DỮ LIỆU ĐIỀU KHIỂN
LƯU ĐỒ ĐIỀU KHIỂN
Trang 8LB: MOV DPTR,#1000H
MOV DEM,#9 LB1: MOV A,DEM
MOVC A,@A+DPTR MOV P0,A
CALL DELAY1S DEC DEM CJNE DEM,#-1,LB1 JMP LB
ORG 1000H
DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H,090H
$INCLUDE(TV_DELAY.ASM)
END
BÀI SỐ 2-5: CTDK LED 7 ĐOẠN ĐẾM THỜI GIAN TỪ 00 ĐẾN 99 – DÙNG P0 VÀ P2
LƯU ĐỒ ĐIỀU KHIỂN
BEGIN
DELAY DEM:=DEM+1
END
DEM=100
LƯU 10 MÃ VÀO BN DEM:=0000 0000B
HEX(DEM) => BCD BCD => MA7DOAN => LED
;CHTR DK 2 LED 7 DOAN DEM TU 00 LEN 99
DEM EQU R2 ORG 0H
MOV DPTR,#MA7DOAN LB: MOV DEM,#00H
Trang 9LB1: CALL HEXTOBCD_GIAIMA ;MOI THEM VAO
CALL DELAY100MS INC DEM
CJNE DEM,#100,LB1 JMP LB
HEXTOBCD_GIAIMA:
MOV A,DEM MOV B,#10 DIV AB ;(A) = BCD_CHUC, (B)=BCD_DONVI MOVC A,@A+DPTR ;LAY MA CHUC
MOV P2,A ;HIEN THI HANG CHUC
MOV A,B ;BCD DONVI => A MOVC A,@A+DPTR ;LAY MA DONVI MOV P0,A ;HIEN THI HANG DON VI RET
MA7DOAN: DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H,090H
$INCLUDE(TV_DELAY.ASM)
END
TẠI SAO CHUYỂN SỐ HEX SANG SỐ BCD?
NHỊ PHÂN HAY HEX
DEM (00H -FFH)
BCD CHUC – DONVI (00H – 99H)
Trang 10 NẾU SỐ HEX NẰM GIỚI HẠN TỪ 10 ĐẾN 99 THÌ SỐ BCD GỒM CHỤC VÀ ĐƠN VỊ LẤY SỐ HEX CHIA CHO 10: ĐƯỢC KẾT QUẢ LÀ SỐ BCD HÀNG CHỤC, SỐ DƯ LÀ SỐ BCD HÀNG ĐƠN VỊ
NẾU SỐ HEX NẰM GIỚI HẠN TỪ 100 ĐẾN 999 THÌ SỐ BCD GỒM TRĂM, CHỤC VÀ ĐƠN VỊ LẤY SỐ HEX CHIA CHO 10 LẦN THỨ NHẤT: ĐƯỢC KẾT QUẢ LẦN 1, SỐ
DƯ LÀ BCD HÀNG ĐƠN VỊ LẤY KẾT QUẢ LẦN 1 CHIA TIẾP CHO 10 LẦN THỨ 2: SỐ DƯ LẦN HAI LÀ BCD CHỤC, KẾT QUẢ LÀ BCD TRĂM
LỆNH CHIA DIV AB LÀ CHIA A(8 BIT) CHO B(8 BIT THƯỜNG LÀ SỐ 10)
SAU KHI CHIA: A LƯU KẾT QUẢ, B LƯU SỐ DƯ
VÍ DỤ1: CHUYỂN SỐ HEX 3FH = 0011 1111B SANG SỐ BCD:
32+16+8+4+2+1=63 BCD = 0110 0011B
Trang 11
MOV DPTR,#MA7DOAN LB: MOV DEM,#00H
LB1: CALL HEXTOBCD_GIAIMA ;MOI THEM VAO
CALL DELAY100MS INC DEM
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
HEXTOBCD_GIAIMA:
MOV A,DEM MOV B,#10 DIV AB ;(A) = BCD CHUC, (B)=BCD DONVI MOVC A,@A+DPTR ;LAY MA CHUC
MOV P2,A ;HIEN THI HANG CHUC MOV A,B ;BCD DONVI => A
MOVC A,@A+DPTR ;LAY MA DONVI MOV P0,A ;HIEN THI HANG DON VI RET
MA7DOAN: DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H,090H
$INCLUDE(TV_DELAY.ASM)
END
Trang 12BÀI SỐ 2-6: CTDK LED 7 ĐOẠN ĐẾM THỜI GIAN TỪ 000 ĐẾN 250 – DÙNG P0 – LED ĐƠN
VỊ, P1 – LED CHỤC VÀ P2 – LED TRĂM
LƯU ĐỒ ĐIỀU KHIỂN
BEGIN
DELAY DEM:=DEM+1
END
DEM=251
LƯU 10 MÃ VÀO BN DEM:=0000 0000B
HEX(DEM) => BCD BCD => MA7DOAN => LED
;CHTR DK 2 LED 7 DOAN DEM TU 000 LEN 250
DEM EQU R2 ORG 0H
MOV DPTR,#MA7DOAN LB: MOV DEM,#00H
LB1: CALL HEXTOBCD_GIAIMA ;MOI THEM VAO
CALL DELAY100MS INC DEM
CJNE DEM,#251,LB1 JMP LB
HEXTOBCD_GIAIMA:
MOV A,DEM MOV B,#10 DIV AB ;(A) = KQ1, (B)=BCD_DONVI MOV 20H,B ;LUU BCD_DVI VAO ON CO ĐC 20H MOV B,#10
DIV AB ; (A) = BCD_TRAM, (B)=BCD_CHUC
Trang 13MOV A,20H ;BCD_DVI => A MOVC A,@A+DPTR ;LAY MA DVI MOV P0,A ;HIEN THI HANG DVI RET
MA7DOAN: DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H,090H
$INCLUDE(TV_DELAY.ASM)
END
CÁC CHƯƠNG TRÌNH CON TỔNG QUÁT
CHUYỂN SỐ HEX 8 BIT SANG 3 SỐ BCD LƯU VÀO 3 ON 20H, 21H, 22H:
MOV B,#10 DIV AB MOV 20H,B ;LUU BCD_DVI MOV B, #10
DIV AB
RET
MOV A,20H MOVC A,@A+DPTR
MOV A,21H
Trang 14MOV 31H,A ;LUU MA_CHUC
MOV A,22H MOVC A,@A+DPTR
RET
HIENTHI_TT: MOV P0,30H
MOV P1,31H MOV P2,32H RET
CÁCH 2: DÙNG IC GIẢI MÃ 74247 – MỖI 1 LED CHỈ CẦN 4 ĐƯỜNG TÍN HIỆU – 1 PORT
DK ĐƯỢC 2 LED, KHÔNG CẦN GIẢI MÃ 7 ĐOẠN VÌ IC GIẢI MÃ ĐÃ THỰC HIỆN, TA CHỈ CẦN GỞI MÃ BCD 4 BIT CHO 1 LED, 8 BIT CHO 2 LED
Trang 15BÀI SỐ 2-6: CTDK 2 LED 7 ĐOẠN ĐẾM THỜI GIAN TỪ 00 ĐẾN 99 – DÙNG P0 KẾT NỐI
VỚI 2 IC GIẢI MÃ 74247
LƯU ĐỒ ĐIỀU KHIỂN
CHƯƠNG TRÌNH
DEM EQU R2 ORG 0H
LB: MOV DEM,#00H
LB1: CALL HEXTOBCD_HTHI ;MOI THEM VAO
CALL DELAY100MS INC DEM
CJNE DEM,#100,LB1 JMP LB
HEXTOBCD_HTHI:
MOV A,DEM MOV B,#10 DIV AB ;(A) = BCD_CHUC, (B)=BCD_DONVI SWAP A ;CHUYEN HANG CHUC LEN 4 BIT CAO ORL A,B
MOV P0,A ;GOI RA 2 IC GIAI MA DE HIEN THI RET
$INCLUDE(TV_DELAY.ASM)
END
Trang 16ĐIỀU KHIỂN LED 7 ĐOẠN DÙNG VDK
CÁCH 2: DÙNG PHƯƠNG PHÁP QUÉT
CÁC ĐOẠN: A, B, C, D, E, F, G, DP NỐI SONG - SONG, QUA ĐIỆN TRỞ HẠN DÒNG NỐI VỚI PORT0
Trang 17CÁC CHÂN ANODE CHUNG THÌ ĐIỀU KHIỂN BẰNG TRANSISTOR PNP,
8 LED NÊN DÙNG 8 TRANSISTOR DÙNG PORT2 ĐIỀU KHIỂN 8 TRANS
CỰC B BẰNG 0 THÌ TRANS DẪN – CỰC B BẰNG 1 THÌ TRANS TẮT
MỖI 1 THỜI ĐIỂM CHỈ CHO 1 TRANS DẪN
DÙNG 2 PORT 0 VÀ 2 ĐIỀU KHIỂN ĐƯỢC 8 LED 7 ĐOẠN
ƯU ĐIỂM: TIẾT KIỆM TÍN HIỆU ĐIỀU KHIỂN
KHUYẾT ĐIỂM: TỐN TRANSISTOR, CHƯƠNG TRÌNH ĐIỀU KHIỂN PHỨC TẠP – CHƯƠNG TRÌNH QUÉT 8 LED PHẢI THỰC HIỆN LIÊN TỤC THÌ LED MỚI SÁNG
BÀI SỐ 3-1: CTDK 1 LED 7 ĐOẠN SÁNG SỐ 0 – DÙNG P0, P2
VIẾT CHƯƠNG TRÌNH
;CHTR DK 1 LED 7 DOAN (L7D0) SANG SO 0
ORG 0H MOV P0,#0C0H ;GOI MA SO 0 MOV P2,#11111110B ;CHO 1 TRANSISTOR DAN JMP $
END THỬ
;CHTR DK 1 LED 7 DOAN (L7D1) SANG SO 0
ORG 0H MOV P0,#0C0H ;GOI MA SO 0 MOV P2,#11111101B ;CHO 1 TRANSISTOR DAN JMP $
END THỬ
;CHTR DK 1 LED 7 DOAN (L7D1) SANG SO 1
ORG 0H MOV P0,#0F9H ;GOI MA SO 1 MOV P2,#11111101B ;CHO 1 TRANSISTOR DAN JMP $
END
BÀI SỐ 3-2: CTDK 8 LED 7 ĐOẠN QUÉT SÁNG SỐ 0 ĐẾN SỐ 7 DÙNG P0, P2
VIẾT CHƯƠNG TRÌNH
Trang 18;CHTR DK 8 LED 7 DOAN QUET SANG SO 0 DEN SO 7 ORG 0H
LB: MOV P0,#0C0H ;0
MOV P2,#11111110B CALL DELAYX
MOV P2,#11111101B CALL DELAYX
MOV P2,#11111011B CALL DELAYX
MOV P2,#11110111B CALL DELAYX
MOV P2,#11101111B CALL DELAYX
MOV P2,#11011111B CALL DELAYX
MOV P2,#10111111B CALL DELAYX
MOV P2,#01111111B CALL DELAYX
JMP LB DELAYX: CALL DELAY1MS
Trang 19RET
$INCLUDE(TV_DELAY.ASM)
END
CÁCH VIẾT TRÊN SỬ DỤNG HẾT 8LED – TA CÓ CÁCH THỨ 2
;CHTR DK 8 LED 7 DOAN QUET SANG SO 0 DEN SO 7 ORG 0H
LB: MOV P0,#0C0H ;0
CLR P2.0 ;TRANSISTOR T0 DAN CALL DELAYX
SETB P2.0 ;TRANSISTOR T0 TAT
CLR P2.1 ;TRANSISTOR T1 DAN CALL DELAYX
SETB P2.1 ;TRANSISTOR T1 TAT
…
JMP LB DELAYX: CALL DELAY1MS
RET
$INCLUDE(TV_DELAY.ASM)
END
BÀI SỐ 3-3: CT ĐẾM GIÂY TỪ 00 ĐẾN 59 – HIỂN THỊ TRÊN 2 LED 7 ĐOẠN QUÉT
LƯU ĐỒ ĐIỀU KHIỂN
Trang 20HEX(GIÂY) => BCD GIẢI MÃ 7 ĐOẠN DELAY – HIỂN THỊ GIÂY:= GIÂY +1
MOV DPTR,#MA7DOAN LB: MOV GIAY,#00
LB1: CALL HEXTOBCD ;CHUYEN HEX SANG SO BCD
CALL GIAIMA ;CHUYEN SO BCD SANG MA 7 DOAN CALL DELAY_HTHI ;VUA DELAY VA VUA HIEN THI
CJNE GIAY,#60,LB1 JMP LB
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
HEXTOBCD: MOV A,GIAY
MOV B,#10 ;KHI BIEN DICH THANH 0000 1010B DIV AB ;(A)=BCD CHUC, (B)=BCD DONVI
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
GIAIMA: MOVC A,@A+DPTR ;GIAI MA HANG CHUC
MOV 31H,A ;CAT TAM MA 7 DOAN CUA CHUC VAO 31H
MOVC A,@A+DPTR ;GIAI MA HANG DON VI MOV 30H,A
Trang 21;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
DELAY_HTHI: MOV 78H,#200
DJNZ 78H,DELHT RET
HIENTHI: MOV P0,30H
CLR P2.0 CALL DELAY1MS SETB P2.0
MOV P0,31H CLR P2.1 CALL DELAY1MS SETB P2.1
RET
$INCLUDE(TV_DELAY.ASM)
MA7DOAN: DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H,090H
END
BÀI SỐ 3-3: CT ĐẾM TỪ 00 ĐẾN 99 – HIỂN THỊ TRÊN 2 LED 7 ĐOẠN QUÉT
LƯU ĐỒ ĐIỀU KHIỂN
END
DEM=100
LƯU 10 MÃ VÀO BN DEM:=0000 0000B
HEX(DEM) => BCD BCD => MA7DOAN => LED
VIẾT CHƯƠNG TRÌNH
Trang 22;CHTR DK DEM GIAY
DEM EQU R1 ORG 0H
MOV DPTR,#MA7DOAN LB: MOV DEM,#00
LB1: CALL HEXTOBCD ;CHUYEN HEX SANG SO BCD
CALL GIAIMA ;CHUYEN SO BCD SANG MA 7 DOAN CALL DELAY_HTHI ;VUA DELAY VA VUA HIEN THI
CJNE DEM,#100,LB1 JMP LB
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
HEXTOBCD: MOV A,DEM
MOV B,#10 ;KHI BIEN DICH THANH 0000 1010B DIV AB ;(A)=BCD CHUC, (B)=BCD DONVI
GIAIMA: MOVC A,@A+DPTR ;GIAI MA HANG CHUC
MOV 31H,A ;CAT TAM MA 7 DOAN CUA CHUC VAO 36H
MOVC A,@A+DPTR ;GIAI MA HANG DON VI MOV 30H,A
RET
DELAY_HTHI: MOV 78H,#200
DJNZ 78H,DELHT RET
HIENTHI: MOV P0,30H
CLR P2.0 CALL DELAY1MS SETB P2.0
MOV P0,31H CLR P2.1 CALL DELAY1MS SETB P2.1
RET
Trang 23MA7DOAN: DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H,090H
END
GIẢI THÍCH CHƯƠNG TRÌNH CON DELAY:
- MỖI LỆNH CẦN 1 HOẶC 2 CHU KỲ MÁY ĐỂ THỰC HIỆN – CHO 1 CHU KỲ MÁY LÀ 1µS NẾU SỬ DỤNG THẠCH ANH 12MHZ
- MUỐN DELAY 1MS = 1000µS – CHO VI ĐIỀU KHIỂN THỰC HIỆN 1000 LỆNH NÀO ĐÓ – MỖI LỆNH 1 CHU KỲ
- VÍ DỤ LỆNH NOP
NOP ;THỨ 1 NOP ;THỨ 2
… NOP ;THỨ 1000
CÁCH VIẾT DÙNG VÒNG LẶP:
1 Lệnh chuyển dữ liệu vào ô nhớ trực tiếp :
Cú pháp : MOV direct, #data
Mã lệnh :
0 1 1 1 0 1 0 1 a7 a6 a5 a4 a3 a2 a1 a0 d7 d6 d5 d4 d3 d2 d1 d0
Lệnh này chiếm 3 byte và thời gian thực hiện lệnh là 2 chu kỳ máy
Trang 24 Chức năng: Nạp dữ liệu data 8 bit (d0 đến d7) vào ô nhớ có địa chỉ direct
2 Lệnh giảm ô nhớ trực tiếp và nhảy :
Cú pháp : DJNZ direct, rel
Mã lệnh :
1 1 0 1 0 1 0 1 a7 a6 a5 a4 a3 a2 a1 a0 r7 r6 r5 r4 r3 r2 r1 r0
Lệnh này chiếm 3 byte và thời gian thực hiện lệnh là 2 chu kỳ máy
Chức năng: Nếu nội dung của ô nhớ có địa chỉ direct giảm đi 1 và nếu kết quả sau khi giảm khác 0 thì vi điều khiển sẽ thực hiện chương trình tại địa chỉ rel, ngược lại nếu kết quả bằng 0 thì vi điều khiển sẽ tiếp tục thực hiện lệnh kế
3 Lệnh trở về từ chương trình con :
Cú pháp : RET
Mã lệnh :
0 0 1 0 0 0 1 0
Lệnh này chiếm 1 byte và thời gian thực hiện lệnh là 2 chu kỳ máy
Chức năng: Lệnh này sẽ kết thúc chương trình con, vi điều khiển sẽ trở lại chương trình chính để tiếp tục thực hiện chương trình
Trang 25DJNZ 71H,DEL ;2T×198 MOV 72H,#101 ;2T DJNZ 72H,$ ;2T×101= 202T
TÍNH Y: Y= (399 – 4)/2 = 197,5 CHỌN 197 THIẾU THÊM 1T
TỔNG THỜI GIAN THIẾU LÀ 247 µS
DELAY100MS: MOV 71H,#250 ;2T
DEL: MOV 70H,#197 ;2T × X
DJNZ 70H,$ ;2T×Y × X DJNZ 71H,DEL ;2T × X MOV 72H,#122 ;2T
Trang 26TẠI SAO CHƯƠNG TRÌNH CON HIENTHI LẠI CHÈN TRONG CHƯƠNG TRÌNH DELAY?
DO CHƯƠNG TRÌNH HIỂN THỊ DÙNG PHƯƠNG PHÁP QUÉT, NÊN PHẢI QUÉT LED LIÊN TỤC, NẾU NGỪNG QUÉT THÌ LED SẼ TẮT, HOẶC NẾU 1 CHƯƠNG TRÌNH NÀO ĐÓ THỰC HIỆN CHIẾM NHIỀU THỜI GIAN THÌ CŨNG LÀM LED TẮT
TRONG CHƯƠNG TRÌNH TRÊN THÌ CHƯƠNG TRÌNH CON DELAY SẼ CHIẾM NHIỀU THỜI GIAN THỰC HIỆN, NÊN PHẢI CHÈN HIỂN THỊ VÀO CHƯƠNG TRÌNH CON DELAY
BÀI SỐ 3-4: CT ĐẾM TỪ 000 ĐẾN 150
;CHTR DEM TU 000 DEN 150
GIAY EQU R2 ORG 0H
MOV DPTR,#MA7DOAN LB: MOV GIAY,#00H
LB1: CALL HEXTOBCD_GIAIMA
CALL DELAY_HIENTHI INC GIAY
CJNE GIAY,#151,LB1 JMP LB
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
HEXTOBCD_GIAIMA:
MOV A,GIAY MOV B,#10 DIV AB ; MOV 20H,B ;(27H)=DVI MOV B,#10
DIV AB ;(B)=CHUC, (A)=TRAM
MOVC A,@A+DPTR ;LAY TRAM MOV 32H,A ;CAT VAO ON 32H
MOV A,B ; MOVC A,@A+DPTR ;LAY CHUC MOV 31H,A ;CAT VAO ON 31H
Trang 27MOV A,20H ; MOVC A,@A+DPTR ;LAY DVI MOV 30H,A ;CAT VAO ON 30H RET
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
DELAY_HIENTHI: MOV 7AH,#0100
DJNZ 7AH,DEL_HT RET
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
HIENTHI: MOV P0,30H ;MA DVI GIAY
CLR P2.0 CALL DELAY1MS SETB P2.0
MOV P0,31H ;MA CHUC GIAY CLR P2.1
CALL DELAY1MS SETB P2.1
MOV P0,32H ;MA CHUC GIAY CLR P2.2
CALL DELAY1MS SETB P2.2
RET MA7DOAN: DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H,090H
$INCLUDE(TV_DELAY.ASM)
END
BÀI SỐ 3-4: CT ĐẾM PHÚT GIÂY – DÙNG PORT 0, 1
LƯU ĐỒ ĐIỀU KHIỂN
Trang 28HEX(PHÚT GIÂY) => BCD GIẢI MÃ 7 ĐOẠN DELAY – HIỂN THỊ GIÂY:= GIÂY +1
GIAY=60
LƯU 10 MÃ VÀO BN
GIÂY:=00 (HEX) PHÚT := 00 (HEX)
MOV DPTR,#MA7DOAN LB: MOV PHUT,#00
LB2: MOV GIAY,#00
LB1: CALL HEXTOBCD ;CHUYEN HEX SANG SO BCD
CALL GIAIMA CALL DELAY_HTHI
INC GIAY CJNE GIAY,#60,LB1 INC PHUT
CJNE PHUT,#60,LB2