You are on page 1of 9

@SVKT.

NET

cHÖÔNG TRÌNH ÑOÀNG


HOÀ ÑIEÄN TÖÛ CHO 8051
Bài viết này sửdụng 3 chương trình có cùng chức nă ng
nhưnhau nhưng sửdụng 3 giả i thụât khác nhau đểtính
tóan thời gian mộ t cách chính xác nhấ t.
Những chương trình này đều được chạy thửvà kết
quảthu được là hòan tòan khảquan
Đây chỉ là một bài thực hành, mang tính tìm hiểu.

@svkt.net
1: ;=====================================================================================
2: ;= CHƯƠNG TRÌNH HIỂN THỊ THỜI GIAN THEO PHƯƠNG PHÁP THÔNG THƯỜNG =
3: ;= ĐỒNG HỒ NÀY CHẠY KHÔNG ĐƯỢC CHÍNH XÁC =
4: ;= TÁC GIẢ: PHẠM MINH TUẤN, WEBSITE: WWW.SVKT.NET =
5: ;= CHÚ Ý, BẠN KHÔNG ĐƯỢC GÕ TIẾNG VIỆT VÀO BÀI LÀM, ĐÂY CHỈ LÀ MINH HỌA =
6: ;=====================================================================================
7: %*DEFINE(HIEN_THI(SO,B1,B2))( ;MACRO NÀY SẼ HIỆN THỊ LED 7 ĐỌAN THEO PHƯƠNG
8: MOV A,%SO ;PHÁP QUÉT.
9: MOV B,#10 ;BIẾT SỐ: SẼ HIỂN THỊ GIÁ TRỊ CỦA THANHH GHI
10: DIV AB ;BIẾN B1: BIT ĐIỀU KHIỂN LED HÀNG CHỤC
11: ADD A,#30H ;BIẾN B2: BIT ĐIỀU KHIÊN LED HÀNG ĐƠN VỊ
12: MOV R1,A ;BẠN CÓ THỂ HÌNH DUNG NHƯ SAU: MỘT SỐ ĐƯỢC
13: MOV P0,%B1 ;CHỨA TRONG THANH GHI NÀO ĐÓ CÓ GIÁ TRỊ TỪ
14: MOV P1,@R1 ;0-->99. VÍ DỤ: 25 .ĐEM CHIA CHO 10, THÌ ĐƯỢC
15: ACALL DELAY ;2 DƯ 5. VẬY TA CHỈ VIỆC HIỆN THỊ
16: MOV A,B ;TRÊN 2 LED SỐ 2 VÀ SỐ 5 THEO ĐÚNG THỨ TỰ,
17: ADD A,#30H ; THÌ SẼ CÓ SỐ 25
18: MOV R1,A ;ADD #30H LÀ BỞI VÌ TẠI ĐỊA CHỈ 30H ĐẶT MÃ LED
19: MOV P0,%B2 ;7 ĐỌAN LÀ SÓ 0, VÍ DỤ SỐ 5 ADD VỚI 30H THÌ
20: MOV P1,@R1 ;ĐƯỢC ĐỊA CHỈ 35H, ĐỊA CHỈ NÀY LÀ MÃ 7 ĐỌAN CỦA
21: ACALL DELAY ) ;SỐ 5, VIỆC CÒN LẠI LÀ ĐỊNH ĐỊA
22: ;CHỈ GIÁN TIẾP ĐỂ THAM CHIẾU ĐẾN Ô THỨ 35H
23: %*DEFINE(LED_CODE)(
24: MOV 30H,#0C0H ;MÃ SỐ 0 TƯƠNG ỨNG Ô 30H
25: MOV 31H,#0F9H ;MÃ SỐ 1 31H
26: MOV 32H,#0A4H ;....
27: MOV 33H,#0B0H
28: MOV 34H,#99H
29: MOV 35H,#92H
30: MOV 36H,#82H
31: MOV 37H,#0F8H
32: MOV 38H,#80H
33: MOV 39H,#90H)
34: GIAY EQU R2 ;THANH GHI NHỚ GIÂY
35: PHUT EQU R3 ;THANH GHI NHỚ PHÚT
36: GIO EQU R4 ;THANH GHI NHỚ GIỜ
37: LAP EQU R5 ;SỐ LẦN LẶP ĐỂ ĐỦ 1 GIÂY
38: THOI_GIAN EQU 255 ;THỜI GIAN CỦA MỖI LẦN LẶP
39: TGTRE EQU 20 ;THỜI GIAN TRỄ ĐỂ CHỐNG NHÒE KHI QUÉT LED
40:
41: ;KHOI TAO CAC GIA TRI BAN DAU
42: ;CHƯƠNG TRÌNH SỬ DỤNG PORT 1 LÀ PORT DATA, PORT 0 LÀ PORT LÀ PORT ĐIỀU KHIỂN
43: ;LED 7 ĐỌAN LÀ LED SÁNG KHI ĐƯỢC KÍCH MỨC THẤP
44: ORG 0000H
45: MAIN:
46: %LED_CODE ;KHƠI TẠO MÃ LED 7 ĐỌAN TẠI ĐÂY
47: MOV P0,#0FFH
48: MOV P1,#0FFH
49: MOV P2,#00H
50: MOV P3,#00H
51: MOV GIAY,#00H ;THANH GHI NHƠ GIÂY
52: MOV PHUT,#00H ;THANH GHI NHỚ PHÚT
53: MOV GIO,#00H ;THANH GHI NHỚ GIỜ
54: MOV LAP,#THOI_GIAN
55: LOOP:
56: %HIEN_THI(GIAY,#11111101B,#11111110B)
57: %HIEN_THI(PHUT,#11110111B,#11111011B)
58: %HIEN_THI(GIO,#11011111B,#11101111B)
59: DJNZ LAP,LOOP
60: MOV LAP,#THOI_GIAN
61: INC GIAY
62: CJNE GIAY,#60,LOOP
63: MOV GIAY,#00H
64: INC PHUT
65: CJNE PHUT,#60,LOOP
66: MOV PHUT,#00H
67: INC GIO
68: CJNE GIO,#24,LOOP
69: LJMP MAIN
70: DELAY:
71: MOV R7,#TGTRE
72: DJNZ R7,$
73: RET
74: ;=====================================================================================
75: ;= LỜI KẾT: BÀI NÀY CHỈ MANG TÍNH CHẤT MINH HỌA, KHÔNG THỂ CHÍNH XÁC ĐƯỢC =
76: ;= NẾU BẠN QUAN TÂM CÓ THỂ TÍNH TOẤN CHI TIẾT ĐỂ NÓ CÓ THỂ CHẠY CHÍNH XÁC =
77: ;= HI VỌNG LÀ VẬY =
78: ;= @SVKT.NET =
79: ;=====================================================================================
80: END
1: ;===============================================================================
2: ;= CHUONG TRÌNH NÀY SỬ DỤNG TIMER LÀM ĐỒNG HỒ ĐIỆN TỬ =
3: ;= CHẠY KHÁ CHÍNH XÁC HƠN PHƯƠNG PHÁP THÔNG THƯỜNG =
4: ;= VIẾT BỞI PHẠM MINH TUẤN, @SVKT.NET =
5: ;===============================================================================
6: %*DEFINE(HIEN_THI(SO,B1,B2))(
7: MOV A,%SO
8: MOV B,#10
9: DIV AB
10: ADD A,#30H
11: MOV R1,A
12: MOV P0,%B1
13: MOV P1,@R1
14: ACALL DELAY
15: MOV A,B
16: ADD A,#30H
17: MOV R1,A
18: MOV P0,%B2
19: MOV P1,@R1
20: ACALL DELAY )
21: ;===============================================================================
22: %*DEFINE(LED_CODE)( ;KHỞI TẠO MÃ 7 ĐỌAN
23: MOV 30H,#0C0H
24: MOV 31H,#0F9H
25: MOV 32H,#0A4H
26: MOV 33H,#0B0H
27: MOV 34H,#99H
28: MOV 35H,#92H
29: MOV 36H,#82H
30: MOV 37H,#0F8H
31: MOV 38H,#80H
32: MOV 39H,#90H)
33: ;===============================================================================
34: GIAY EQU R2
35: PHUT EQU R3
36: GIO EQU R4
37: LAP EQU R5
38: ;===============================================================================
39: ORG 0000H
40: ;CHUONG TRÌNH CHÍNH
41: MAIN:
42: MOV TMOD, #00000001B ;SỬ DỤNG TIMER 0 CHẾ ĐỘ 1, 16BIT.
43: MOV TH0,#HIGH(-50000) ;ÐÊM 50.000uMS THÌ PHẤT CỜ
44: MOV TL0,#LOW(-50000)
45: SETB TR0
46: MOV P0,#0FFH
47: MOV P1,#0FFH
48: MOV GIAY,#00H ;THANH GHI NHỚ GIÂY
49: MOV PHUT,#00H ;THANH GHI NHỚ PHÚT
50: MOV GIO,#00H ;THANH GHI NHỚ GIỜ
51: MOV LAP,#21 ;KHỞI TẠO THANH GHI LẶP, MỖI LẦN 50.000uMS, 20
52: SETB TR0 ;LẦN x 50uMS = 1S
53: CLR TF0 ;KHỞI ÐỘNG TIMER 0
54: LOOP:
55: %HIEN_THI(GIAY,#11111101B,#11111110B)
56: %HIEN_THI(PHUT,#11110111B,#11111011B)
57: %HIEN_THI(GIO,#11011111B,#11101111B)
58: ; KIEM TRA NEU TIMMER 1 DEM DU, 20x50.000uMs , THI TANG GIA TRI GIAY, TRO VE
59: JNB TF0,LOOP
60: CLR TF0
61: CLR TR0
62: MOV TH0, #HIGH(-50000)
63: MOV TL0, #LOW(-50000)
64: SETB TR0 ;KH?I Ð?NG L?I TIMER .
65:
66: DJNZ LAP,LOOP ;GIỜ THÌ CÓ THỂ HIỂU LÀ 21 CHỨ KHÔNG
67: MOV LAP,#21 ;PHẢI LÀ 20, GIẢM TỪ 21 VÈ 1 LÀ 20 LẦN
68: INC GIAY
69: CJNE GIAY,#60,LOOP
70: ;59 GIÂY, TANG 1 PHÚT, GIÂY VỀ 00
71: MOV GIAY,#00H
72: INC PHUT
73: CJNE PHUT,#60,LOOP
74: ;59 PHÚT, TANG 1 GIỜ, PHÚT VỀ 00
75: MOV PHUT,#00H
76: INC GIO
77: CJNE GIO,#24,LOOP
78: ;24 GIỜ, HẾT, CHẠY LẠI
79: LJMP MAIN
80: ;HÀM CHỐNG NHÒE
81: DELAY:
82: MOV R7,#255
83: DJNZ R7,$
84: RET
85: ;===============================================================================
86: ;= CÁI NÀY CHẠY KHÁ CHÍNH XÁC, NHƯNG CẦN PHẢI TÍNH TÓAN, =
87: ;= THÊM ĐỂ CÓ THẾ CHÍNH XÁC HƠN =
88: ;= =
89: ;= @SVKT.NET =
90: ;===============================================================================
91: END
1: ;===============================================================================
2: ;= CHƯƠNG TRÌNH SỬ DỤNG NGẮT CỦA TIMER 0 ĐỂ TÍNH TÓAN THỜI GIAN =
3: ;= LÀM ĐỒNG HỒ ĐIỆN TỬ =
4: ;= CHƯƠNG TRÌNH ĐƯỢC VIẾT BỞI PHẠM MINH TUẤN =
5: ;= @SVKT.NET =
6: ;===============================================================================
7: %*DEFINE(LED_CODE)( ;KHƠI TẠO MÃ 7 ĐỌAN
8: MOV 30H,#0C0H
9: MOV 31H,#0F9H
10: MOV 32H,#0A4H
11: MOV 33H,#0B0H
12: MOV 34H,#99H
13: MOV 35H,#92H
14: MOV 36H,#82H
15: MOV 37H,#0F8H
16: MOV 38H,#80H
17: MOV 39H,#90H)
18: ;===============================================================================
19: %*DEFINE(HIEN_THI(SO,B1,B2))(
20: MOV A,%SO
21: MOV B,#10
22: DIV AB
23: ADD A,#30H
24: MOV R1,A
25: MOV P0,%B1
26: MOV P1,@R1
27: ACALL DELAY
28: MOV A,B
29: ADD A,#30H
30: MOV R1,A
31: MOV P0,%B2
32: MOV P1,@R1
33: ACALL DELAY )
34: %*DEFINE(NAP_GIA_TRI)( CLR TR0
35: MOV TH0,#HIGH(-50000)
36: MOV TL0,#LOW(-50000)
37: SETB TR0)
38: ;===============================================================================
39: GIAY EQU R2
40: PHUT EQU R3
41: GIO EQU R4
42: LAP EQU R5
43: ;===============================================================================
44: ORG 00H
45: LJMP MAIN
46: ORG 0BH ;VECTƠ NGẮT CỦA TIMER0
47: LJMP ISP_TIMER0
48: ORG 30H ;CHƯƠNG TRÌNH CHÍNH BẮT ĐẦU Ở ĐÂY
49: MAIN:
50: %LED_CODE ;KHỞI TẠO MÃ 7 ĐỌAN
51: MOV IE,#10000010B ;CHO PHÉP NGẮT TIMER 0
52: MOV TMOD,#00000001 ;TIMER 0 CHẠY CHẾ ĐỘ 1, 16BIT
53: MOV LAP,#21
54: MOV GIO,#00
55: MOV PHUT,#00
56: MOV GIAY,#00
57: MOV P0,#0FFH
58: MOV P1,#0FFH
59: SETB TR0
60: SETB TF0 ;CHO NGẮT NGAY KHI KHỞI TẠO CÁC GIÁ TRỊ
61: LOOP:
62: %HIEN_THI(GIAY,#11111101B,#11111110B)
63: %HIEN_THI(PHUT,#11110111B,#11111011B)
64: %HIEN_THI(GIO,#11011111B,#11101111B)
65: LJMP LOOP ; CỨ HIỂN THỊ VÀ ĐỢI NGẮT
66: ISP_TIMER0:
67: DJNZ LAP,EXIT ;ĐỦ 20 LẦN CHƯA, CHƯA THÌ VỀ, ĐỢI NGẮT
68: MOV LAP,#21 ;ĐỦ RỒI THÌ TRẢ LẠI GIÁ TRỊ
69: INC GIAY
70: CJNE GIAY,#60,EXIT
71: MOV GIAY,#00
72: ;59 S THÌ VỀ 00, TĂNG 1 PHÚT
73: INC PHUT
74: CJNE PHUT,#60,EXIT
75: MOV PHUT,#00
76: ;ĐỦ 59 PHÚT THÌ TRỞ VỀ 0, TĂNG 1 H
77: INC GIO
78: CJNE GIO,#24,EXIT
79: MOV GIO,#00
80: ;ĐỦ 24 H THÌ VỀ LÀM LẠI
81: EXIT:
82: %NAP_GIA_TRI
83: RETI
84: DELAY:
85: MOV R7,#255
86: DJNZ R7,$
87: RET
88: ;===============================================================================
89: ;= END @SVKT.NET
=
90: ;===============================================================================
91: END
SVKT.NET

You might also like