vi điều khiển đồng hồ thời gian 8051

- 0 / 0
(Tài liệu chưa được thẩm định)
Nguồn:
Người gửi: Đỗ Trường Giang
Ngày gửi: 21h:10' 24-02-2013
Dung lượng: 64.8 KB
Số lượt tải: 10
Nguồn:
Người gửi: Đỗ Trường Giang
Ngày gửi: 21h:10' 24-02-2013
Dung lượng: 64.8 KB
Số lượt tải: 10
Số lượt thích:
0 người
Code đồng hồ thoi gian
;=============DINH NGHIA THANH GHI====================
ORG 0000H
LJMP MAIN
ORG 13h
LJMP CHON_CHE_DO
DATA_DS EQU 30H ;DU LIEU TU DS
ADD_LOW EQU 31H ;DIA CHI THANH GHI
SEC EQU 32H
MIN EQU 33H
HOUR EQU 34H
DAY EQU 35H
DATE EQU 36H
MONTH EQU 37H
YEAR EQU 38H
TAM EQU 39H
Q0_SEC EQU 40H
Q1_SEC EQU 41H
Q0_MIN EQU 42H
Q1_MIN EQU 43H
Q0_HOUR EQU 44H
Q1_HOUR EQU 45H
Q0_DATE EQU 46H
Q1_DATE EQU 47H
Q0_MONTH EQU 48H
Q1_MONTH EQU 49H
Q0_YEAR EQU 50H
Q1_YEAR EQU 51H
Q0_DAY EQU 52H
Q1_DAY EQU 53H
I EQU 54H
CHE_DO EQU 55H
BYTE_W EQU 0D0H ;CHO PHEP GHI
BYTE_R EQU 0D1H ;CHO PHEP DOC
SCL EQU P3.6
SDA EQU P3.7
MAIN:
SETB EA
SETB EX1
;===========================================
MOV A,CHE_DO
LCALL READ_DATA_DS1307
LCALL HIEN_THI_LED
CJNE A,#0,CAI_DAT
JMP MAIN
CAI_DAT:
LCALL KIEM_TRA_KEY
LJMP MAIN
CHON_CHE_DO:
INC CHE_DO
MOV A,CHE_DO
CJNE A,#8,THOAT
mov CHE_DO,#0
THOAT:
LCALL HIEN_THI_LED
JNB INT1,THOAT
RETI
;======================= CTC DOC DU LIEU ==================
READ_DATA_DS1307:
LCALL DOC_SEC
LCALL DOC_MIN
LCALL DOC_HOUR
LCALL DOC_DAY
LCALL DOC_DATE
LCALL DOC_MONTH
LCALL DOC_YEAR
RET
DOC_SEC:
MOV ADD_LOW,#00H
LCALL READ_BYTE
MOV A,DATA_DS
LCALL BCD_HEX
MOV SEC,A
LCALL I2C_STOP
RET
DOC_MIN:
MOV ADD_LOW,#01H
LCALL READ_BYTE
MOV A,DATA_DS
LCALL BCD_HEX
MOV MIN,A
LCALL I2C_STOP
RET
DOC_HOUR:
MOV ADD_LOW,#02H
LCALL READ_BYTE
MOV A,DATA_DS
LCALL BCD_HEX
MOV HOUR,A
LCALL I2C_STOP
RET
DOC_DAY:
MOV ADD_LOW,#03H
LCALL READ_BYTE
MOV A,DATA_DS
CALL BCD_HEX
MOV DAY,A
LCALL I2C_STOP
RET
DOC_DATE:
MOV ADD_LOW,#04H
LCALL READ_BYTE
MOV A,DATA_DS
CALL BCD_HEX
MOV DATE,A
LCALL I2C_STOP
RET
DOC_MONTH:
MOV ADD_LOW,#05H
LCALL READ_BYTE ; CHUONG TRINH DOC BYTE
MOV A,DATA_DS
CALL BCD_HEX
MOV MONTH,A ;DU LIEU DAY
LCALL I2C_STOP
RET
DOC_YEAR:
MOV ADD_LOW,#06H
LCALL READ_BYTE
MOV A,DATA_DS
CALL BCD_HEX
MOV YEAR,A
LCALL I2C_STOP
RET
;=================== CHUONG TRINH CON GIAO TIEP I2C VOI DS1307==============
;===================== CHUONG TRINH CON TAO " STOP AND START " TRONG I2C =============
I2C_STOP:
CLR SDA
SETB SCL
NOP
SETB SDA
RET
;================== CHUONG TRINH CON DE GHI DATA TRONG I2C ==============
WRITE_BYTE:
CLR SCL
SETB SDA
SETB SCL
CLR SDA
MOV A,#BYTE_W ;GUI TIN HIEU DK
LCALL LOOP_WRITE_BYTE
SETB SDA
SETB SCL
JB SDA,WRITE_BYTE; KIEM TRA SDA
CLR SCL
MOV A,ADD_LOW ;GUI DIA CHI
LCALL LOOP_WRITE_BYTE
SETB SDA
SETB SCL
JB SDA,WRITE_BYTE
CLR SCL
MOV A,DATA_DS ;GUI DU LIEU
LCALL LOOP_WRITE_BYTE
SETB SDA
SETB SCL
JB SDA,WRITE_BYTE
CLR SDA
CLR SCL
SETB SCL ;DUNG BIT
SETB SDA
RET
;========================= CHUONG TRINH CON DE GUI 1 BYTE TRONG I2C===============
LOOP_WRITE_BYTE:
MOV R2,#08H
LOOP_SEND:
CLR SCL
RLC A
MOV SDA,C
SETB SCL
DJNZ R2,LOOP_SEND
CLR SCL
SETB SDA
RET
;======================== CHUONG TRINH CON DE DOC DATA TRONG I2C==============
READ_BYTE:
CLR SCL
SETB SDA
SETB SCL
CLR SDA
MOV A,#BYTE_W
LCALL LOOP_WRITE_BYTE
SETB SDA
SETB SCL
JB SDA,READ_BYTE ;KIEM TRA SDA CO BAN
CLR SCL
MOV A,ADD_LOW
LCALL LOOP_WRITE_BYTE
SETB SDA
SETB SCL
JB SDA,READ_BYTE ;KIEM TRA SDA CO BAN
CLR SCL
SETB SCL
SETB SDA
CLR SDA
CLR SCL
MOV A,#BYTE_R ;GUI TIN HIEU DK DOC 1 BYTE
LCALL LOOP_WRITE_BYTE
SETB SDA
SETB SCL
JB SDA,READ_BYTE
CLR SCL
LCALL LOOP_READ
SETB SDA
SETB SCL
CLR SCL
SETB SCL ;DUNG DOC BIT
SETB SDA
RET
;============CHUONG TRINH CON DE DOC 1 BYTE TRONG I2C==============
LOOP_READ:
MOV R2,#08H
LOOP_READ1:
CLR SCL
SETB SCL
MOV C,SDA
RLC A
DJNZ R2,LOOP_READ1
CLR SCL
SETB SDA
MOV DATA_DS,A
RET
;=============================CHUONG TRINH DOI MA====================
BCD_HEX:
MOV B,#10H
DIV AB ; SO DU LUU TAI B
MOV TAM,B ;LUU HANG DON VI VAO TAM
MOV B,#10
MUL AB ; BYTE THAP VAO A, BYTE CAO VAO B
ADD A,TAM
RET
;===========================================
HEX_BCD:
MOV B,#10
DIV AB
MOV TAM,B
MOV B,#10H
MUL AB
ADD A,TAM
RET
;============================================
HIEN_THI_LED:
HIEN_THI_SEC:
MOV B,#10
MOV A,SEC
DIV AB
MOV Q0_SEC,B
MOV Q1_SEC,A
LCALL HIEN_LED
HIEN_THI_MIN:
MOV B,#10
MOV A,MIN
DIV AB
MOV Q0_MIN,B
MOV Q1_MIN,A
LCALL HIEN_LED
HIEN_THI_HOUR:
MOV B,#10
MOV A,HOUR
DIV AB
MOV Q0_HOUR,B
MOV Q1_HOUR,A
LCALL HIEN_LED
HIEN_THI_DAY:
MOV B,#10
MOV A,DAY
DIV AB
MOV Q0_DAY,B
MOV Q1_DAY,A
HIEN_THI_DATE:
MOV B,#10
MOV A,DATE
DIV AB
MOV Q0_DATE,B
MOV Q1_DATE,A
LCALL HIEN_LED
HIEN_THI_MONTH:
MOV B,#10
MOV A,MONTH
DIV AB
MOV Q0_MONTH,B
MOV Q1_MONTH,A
LCALL HIEN_LED
HIEN_THI_YEAR:
MOV B,#10
MOV A,YEAR
DIV AB
MOV Q0_YEAR,B
MOV Q1_YEAR,A
LCALL HIEN_LED
RET
;=========================================
DELAY:
LCALL DELAY_5MS
DJNZ I,DELAY
MOV I,#20
RET
DELAY_5MS:
MOV TMOD,#01h
MOV TH0,#high(-2000)
MOV TL0,#low(-2000)
SETB TR0
JNB TF0,$
CLR TF0
RET
////////////////000000////////////////////////////////////
KIEM_TRA_KEY:
KIEM_TRA_SEC:
MOV A,CHE_DO
CJNE A,#1,KIEM_TRA_MIN
LCALL CHINH_SEC
KIEM_TRA_MIN:
MOV A,CHE_DO
CJNE A,#2,KIEM_TRA_HOUR
LCALL CHINH_MIN
KIEM_TRA_HOUR:
MOV A,CHE_DO
CJNE A,#3,KIEM_TRA_DAY
LCALL CHINH_HOUR
KIEM_TRA_DAY:
MOV A,CHE_DO
CJNE A,#4,KIEM_TRA_DATE
LCALL CHINH_DAY
KIEM_TRA_DATE:
MOV A,CHE_DO
CJNE A,#5,KIEM_TRA_MONTH
LCALL CHINH_DATE
KIEM_TRA_MONTH:
MOV A,CHE_DO
CJNE A,#6,KIEM_TRA_YEAR
LCALL CHINH_MONTH
KIEM_TRA_YEAR:
MOV A,CHE_DO
CJNE A,#7,RA
LCALL CHINH_YEAR
RA:
RET
///////////////////0000000000000000////////////////////////
CHINH_SEC:
LCALL DOC_SEC
SEC1:
LCALL HIEN_THI_LED
JNB P3.4,TANG_SEC
JNB P3.5,GIAM_SEC
MOV A,CHE_DO
CJNE A,#1,THOAT_SEC
LJMP SEC1
THOAT_SEC:
RET
TANG_SEC:
INC SEC
MOV A,SEC
CJNE A,#60,SEC2
MOV SEC,#0
INC MIN
SEC2:
LCALL HEX_BCD
MOV DATA_DS,A
MOV ADD_LOW,#00H
LCALL WRITE_BYTE
SEC3:
LCALL HIEN_THI_LED
JNB P3.4,SEC3
LJMP SEC1
GIAM_SEC:
DEC SEC
MOV A,SEC
CJNE A,#255,SEC4
MOV SEC,#59
DEC MIN
SEC4:
LCALL HEX_BCD
MOV DATA_DS,A
MOV ADD_LOW,#00H
LCALL WRITE_BYTE
SEC5:
LCALL HIEN_THI_LED
JNB P3.5,SEC5
LJMP SEC1
/////////////////////000000000000////////////////////
CHINH_MIN:
LCALL DOC_MIN
MIN1:
LCALL HIEN_THI_LED
JNB P3.4,TANG_MIN
JNB P3.5,GIAM_MIN
MOV A,CHE_DO
CJNE A,#2,THOAT_MIN
LJMP MIN1
THOAT_MIN:
RET
TANG_MIN:
INC MIN
MOV A,MIN
CJNE A,#60,MIN2
MOV MIN,#0
INC HOUR
MIN2:
LCALL HEX_BCD
MOV DATA_DS,A
MOV ADD_LOW,#01H
LCALL WRITE_BYTE
MIN3:
LCALL HIEN_THI_LED
JNB P3.4,MIN3
LJMP MIN1
GIAM_MIN:
DEC MIN
MOV A,MIN
CJNE A,#255,MIN4
MOV MIN,#59
DEC HOUR
MIN4:
LCALL HEX_BCD
MOV DATA_DS,A
MOV ADD_LOW,#00H
LCALL WRITE_BYTE
MIN5:
LCALL HIEN_THI_LED
JNB P3.5,MIN5
LJMP MIN1
//////////////////00000000000000000////////////////////
CHINH_HOUR:
LCALL DOC_HOUR
HOUR1:
LCALL HIEN_THI_LED
JNB P3.4,TANG_HOUR
JNB P3.5,GIAM_HOUR
MOV A,CHE_DO
CJNE A,#3,THOAT_HOUR
LJMP HOUR1
THOAT_HOUR:
RET
TANG_HOUR:
INC HOUR
MOV A,HOUR
CJNE A,#24,HOUR2
MOV HOUR,#0
HOUR2:
LCALL HEX_BCD
MOV DATA_DS,A
MOV ADD_LOW,#02H
LCALL WRITE_BYTE
HOUR3:
LCALL HIEN_THI_LED
JNB P3.4,HOUR3
LJMP HOUR1
GIAM_HOUR:
DEC HOUR
MOV A,HOUR
CJNE A,#255,HOUR4
MOV HOUR,#23
HOUR4:
LCALL HEX_BCD
MOV DATA_DS,A
MOV ADD_LOW,#02H
LCALL WRITE_BYTE
HOUR5:
LCALL HIEN_THI_LED
JNB P3.5,HOUR5
LJMP HOUR1
//////////////000000000000000////////////////////
CHINH_DAY:
LCALL DOC_DAY
DAY1:
LCALL HIEN_THI_LED
JNB P3.4,TANG_DAY
JNB P3.5,GIAM_DAY
MOV A,CHE_DO
CJNE A,#4,THOAT_DAY
LJMP DAY1
THOAT_DAY:
RET
TANG_DAY:
INC DAY
MOV A,DAY
CJNE A,#8,DAY2
MOV DAY,#1
DAY2:
LCALL HEX_BCD
MOV DATA_DS,A
MOV ADD_LOW,#03H
LCALL WRITE_BYTE
DAY3:
LCALL HIEN_THI_LED
JNB P3.4,DAY3
LJMP DAY1
GIAM_DAY:
DEC DAY
MOV A,DAY
CJNE A,#255,DAY4
MOV DAY,#1
DAY4:
LCALL HEX_BCD
MOV DATA_DS,A
MOV ADD_LOW,#03H
LCALL WRITE_BYTE
DAY5:
LCALL HIEN_THI_LED
JNB P3.5,DAY5
LJMP DAY1
////////////////////000000000000000///////////////////////
CHINH_DATE:
LCALL DOC_DATE
DATE1:
LCALL HIEN_THI_LED
JNB P3.4,TANG_DATE
JNB P3.5,GIAM_DATE
MOV A,CHE_DO
CJNE A,#5,THOAT_DATE
LJMP DATE1
THOAT_DATE:
RET
TANG_DATE:
INC DATE
MOV A,DATE
CJNE A,#32,DATE2
MOV DATE,#1
INC MONTH
DATE2:
LCALL HEX_BCD
MOV DATA_DS,A
MOV ADD_LOW,#04H
LCALL WRITE_BYTE
DATE3:
LCALL HIEN_THI_LED
JNB P3.4,DATE3
LJMP DATE1
GIAM_DATE:
DEC DATE
MOV A,DATE
CJNE A,#255,DATE4
MOV DATE,#1
DEC MONTH
DATE4:
LCALL HEX_BCD
MOV DATA_DS,A
MOV ADD_LOW,#04H
LCALL WRITE_BYTE
DATE5:
LCALL HIEN_THI_LED
JNB P3.5,DATE5
LJMP DATE1
//////////////0000000000000///////////////////////
CHINH_MONTH:
LCALL DOC_MONTH
MONTH1:
LCALL HIEN_THI_LED
JNB P3.4,TANG_MONTH
JNB P3.5,GIAM_MONTH
MOV A,CHE_DO
CJNE A,#6,THOAT_MONTH
LJMP MONTH1
THOAT_MONTH:
RET
TANG_MONTH:
INC MONTH
MOV A,MONTH
CJNE A,#13,MONTH2
MOV MONTH,#1
INC YEAR
MONTH2:
LCALL HEX_BCD
MOV DATA_DS,A
MOV ADD_LOW,#05H
LCALL WRITE_BYTE
MONTH3:
LCALL HIEN_THI_LED
JNB P3.4,MONTH3
LJMP MONTH1
GIAM_MONTH:
DEC MONTH
MOV A,MONTH
CJNE A,#255,MONTH4
MOV MONTH,#1
DEC YEAR
MONTH4:
LCALL HEX_BCD
MOV DATA_DS,A
MOV ADD_LOW,#05H
LCALL WRITE_BYTE
MONTH5:
LCALL HIEN_THI_LED
JNB P3.5,MONTH5
LJMP MONTH1
/////////////////00000000000000000//////////////////////
CHINH_YEAR:
LCALL DOC_YEAR
YEAR1:
LCALL HIEN_THI_LED
JNB P3.4,TANG_YEAR
JNB P3.5,GIAM_YEAR
MOV A,CHE_DO
CJNE A,#7,THOAT_YEAR
LJMP YEAR1
THOAT_YEAR:
RET
TANG_YEAR:
INC YEAR
MOV A,YEAR
CJNE A,#100,YEAR2
MOV YEAR,#1
YEAR2:
LCALL HEX_BCD
MOV DATA_DS,A
MOV ADD_LOW,#06H
LCALL WRITE_BYTE
YEAR3:
LCALL HIEN_THI_LED
JNB P3.4,YEAR3
LJMP YEAR1
GIAM_YEAR:
DEC YEAR
MOV A,YEAR
CJNE A,#255,YEAR4
MOV YEAR,#1
YEAR4:
LCALL HEX_BCD
MOV DATA_DS,A
MOV ADD_LOW,#06H
LCALL WRITE_BYTE
YEAR5:
LCALL HIEN_THI_LED
JNB P3.5,YEAR5
LJMP YEAR1
////////////0000000000000000000////////////////////////////
;==========================================================
HIEN_LED:
HIEN_SEC:
MOV A,Q0_SEC
MOV DPTR,#MALED
MOVC A,@A+DPTR
MOV P0,A
SETB P2.5
LCALL DELAY_5MS
MOV P1,#00H
MOV P2,#00H
LCALL DELAY_5MS
;=========================
MOV A,Q1_SEC
MOV DPTR,#MALED
MOVC A,@A+DPTR
MOV P0,A
SETB P1.0
LCALL DELAY_5MS
MOV P1,#00H
MOV P2,#00H
LCALL DELAY_5MS
HIENMIN:
MOV A,Q0_MIN
MOV DPTR,#MALED
MOVC A,@A+DPTR
MOV P0,A
SETB P1.1
LCALL DELAY_5MS
MOV P1,#00H
MOV P2,#00H
LCALL DELAY_5MS
;============================
MOV A,Q1_MIN
MOV DPTR,#MALED
MOVC A,@A+DPTR
MOV P0,A
SETB P1.2
LCALL DELAY_5MS
MOV P1,#00H
MOV P2,#00H
LCALL DELAY_5MS
HIENHOUR:
MOV A,Q0_HOUR
MOV DPTR,#MALED
MOVC A,@A+DPTR
MOV P0,A
SETB P1.3
LCALL DELAY_5MS
MOV P1,#00H
MOV P2,#00H
LCALL DELAY_5MS
;=================================
MOV A,Q1_HOUR
MOV DPTR,#MALED
MOVC A,@A+DPTR
MOV P0,A
SETB P1.4
LCALL DELAY_5MS
MOV P1,#00H
MOV P2,#00H
LCALL DELAY_5MS
HIENDAY:
MOV A,Q0_DAY
MOV DPTR,#MALED
MOVC A,@A+DPTR
MOV P0,A
SETB P1.5
LCALL DELAY_5MS
MOV P1,#00H
MOV P2,#00H
LCALL DELAY_5MS
HIENDATE:
MOV A,Q0_DATE
MOV DPTR,#MALED
MOVC A,@A+DPTR
MOV P0,A
SETB P1.6
LCALL DELAY_5MS
MOV P1,#00H
MOV P2,#00H
LCALL DELAY_5MS
;=============================
MOV A,Q1_DATE
MOV DPTR,#MALED
MOVC A,@A+DPTR
MOV P0,A
SETB P2.0
LCALL DELAY_5MS
MOV P1,#00H
MOV P2,#00H
LCALL DELAY_5MS
HIENMONTH:
MOV A,Q0_MONTH
MOV DPTR,#MALED
MOVC A,@A+DPTR
MOV P0,A
SETB P2.1
LCALL DELAY_5MS
MOV P1,#00H
MOV P2,#00H
LCALL DELAY_5MS
;=================================
MOV A,Q1_MONTH
MOV DPTR,#MALED
MOVC A,@A+DPTR
MOV P0,A
SETB P2.2
LCALL DELAY_5MS
MOV P1,#00H
MOV P2,#00H
LCALL DELAY_5MS
HIENYEAR:
MOV A,Q0_YEAR
MOV DPTR,#MALED
MOVC A,@A+DPTR
MOV P0,A
SETB P2.3
LCALL DELAY_5MS
MOV P1,#00H
MOV P2,#00H
LCALL DELAY_5MS
;==========================
MOV A,Q1_YEAR
MOV DPTR,#MALED
MOVC A,@A+DPTR
MOV P0,A
SETB P2.4
LCALL DELAY_5MS
MOV P1,#00H
MOV P2,#00H
LCALL DELAY_5MS
RET
MALED:
DB 00111111b,00000110b,01011011b,01001111b,01100110b,01101101b,01111101b,00000111b,01111111b,01101111b
END
;========= NGUYEN VAN KY HUNG VA DO TRUONG GIANG ============
;=============DINH NGHIA THANH GHI====================
ORG 0000H
LJMP MAIN
ORG 13h
LJMP CHON_CHE_DO
DATA_DS EQU 30H ;DU LIEU TU DS
ADD_LOW EQU 31H ;DIA CHI THANH GHI
SEC EQU 32H
MIN EQU 33H
HOUR EQU 34H
DAY EQU 35H
DATE EQU 36H
MONTH EQU 37H
YEAR EQU 38H
TAM EQU 39H
Q0_SEC EQU 40H
Q1_SEC EQU 41H
Q0_MIN EQU 42H
Q1_MIN EQU 43H
Q0_HOUR EQU 44H
Q1_HOUR EQU 45H
Q0_DATE EQU 46H
Q1_DATE EQU 47H
Q0_MONTH EQU 48H
Q1_MONTH EQU 49H
Q0_YEAR EQU 50H
Q1_YEAR EQU 51H
Q0_DAY EQU 52H
Q1_DAY EQU 53H
I EQU 54H
CHE_DO EQU 55H
BYTE_W EQU 0D0H ;CHO PHEP GHI
BYTE_R EQU 0D1H ;CHO PHEP DOC
SCL EQU P3.6
SDA EQU P3.7
MAIN:
SETB EA
SETB EX1
;===========================================
MOV A,CHE_DO
LCALL READ_DATA_DS1307
LCALL HIEN_THI_LED
CJNE A,#0,CAI_DAT
JMP MAIN
CAI_DAT:
LCALL KIEM_TRA_KEY
LJMP MAIN
CHON_CHE_DO:
INC CHE_DO
MOV A,CHE_DO
CJNE A,#8,THOAT
mov CHE_DO,#0
THOAT:
LCALL HIEN_THI_LED
JNB INT1,THOAT
RETI
;======================= CTC DOC DU LIEU ==================
READ_DATA_DS1307:
LCALL DOC_SEC
LCALL DOC_MIN
LCALL DOC_HOUR
LCALL DOC_DAY
LCALL DOC_DATE
LCALL DOC_MONTH
LCALL DOC_YEAR
RET
DOC_SEC:
MOV ADD_LOW,#00H
LCALL READ_BYTE
MOV A,DATA_DS
LCALL BCD_HEX
MOV SEC,A
LCALL I2C_STOP
RET
DOC_MIN:
MOV ADD_LOW,#01H
LCALL READ_BYTE
MOV A,DATA_DS
LCALL BCD_HEX
MOV MIN,A
LCALL I2C_STOP
RET
DOC_HOUR:
MOV ADD_LOW,#02H
LCALL READ_BYTE
MOV A,DATA_DS
LCALL BCD_HEX
MOV HOUR,A
LCALL I2C_STOP
RET
DOC_DAY:
MOV ADD_LOW,#03H
LCALL READ_BYTE
MOV A,DATA_DS
CALL BCD_HEX
MOV DAY,A
LCALL I2C_STOP
RET
DOC_DATE:
MOV ADD_LOW,#04H
LCALL READ_BYTE
MOV A,DATA_DS
CALL BCD_HEX
MOV DATE,A
LCALL I2C_STOP
RET
DOC_MONTH:
MOV ADD_LOW,#05H
LCALL READ_BYTE ; CHUONG TRINH DOC BYTE
MOV A,DATA_DS
CALL BCD_HEX
MOV MONTH,A ;DU LIEU DAY
LCALL I2C_STOP
RET
DOC_YEAR:
MOV ADD_LOW,#06H
LCALL READ_BYTE
MOV A,DATA_DS
CALL BCD_HEX
MOV YEAR,A
LCALL I2C_STOP
RET
;=================== CHUONG TRINH CON GIAO TIEP I2C VOI DS1307==============
;===================== CHUONG TRINH CON TAO " STOP AND START " TRONG I2C =============
I2C_STOP:
CLR SDA
SETB SCL
NOP
SETB SDA
RET
;================== CHUONG TRINH CON DE GHI DATA TRONG I2C ==============
WRITE_BYTE:
CLR SCL
SETB SDA
SETB SCL
CLR SDA
MOV A,#BYTE_W ;GUI TIN HIEU DK
LCALL LOOP_WRITE_BYTE
SETB SDA
SETB SCL
JB SDA,WRITE_BYTE; KIEM TRA SDA
CLR SCL
MOV A,ADD_LOW ;GUI DIA CHI
LCALL LOOP_WRITE_BYTE
SETB SDA
SETB SCL
JB SDA,WRITE_BYTE
CLR SCL
MOV A,DATA_DS ;GUI DU LIEU
LCALL LOOP_WRITE_BYTE
SETB SDA
SETB SCL
JB SDA,WRITE_BYTE
CLR SDA
CLR SCL
SETB SCL ;DUNG BIT
SETB SDA
RET
;========================= CHUONG TRINH CON DE GUI 1 BYTE TRONG I2C===============
LOOP_WRITE_BYTE:
MOV R2,#08H
LOOP_SEND:
CLR SCL
RLC A
MOV SDA,C
SETB SCL
DJNZ R2,LOOP_SEND
CLR SCL
SETB SDA
RET
;======================== CHUONG TRINH CON DE DOC DATA TRONG I2C==============
READ_BYTE:
CLR SCL
SETB SDA
SETB SCL
CLR SDA
MOV A,#BYTE_W
LCALL LOOP_WRITE_BYTE
SETB SDA
SETB SCL
JB SDA,READ_BYTE ;KIEM TRA SDA CO BAN
CLR SCL
MOV A,ADD_LOW
LCALL LOOP_WRITE_BYTE
SETB SDA
SETB SCL
JB SDA,READ_BYTE ;KIEM TRA SDA CO BAN
CLR SCL
SETB SCL
SETB SDA
CLR SDA
CLR SCL
MOV A,#BYTE_R ;GUI TIN HIEU DK DOC 1 BYTE
LCALL LOOP_WRITE_BYTE
SETB SDA
SETB SCL
JB SDA,READ_BYTE
CLR SCL
LCALL LOOP_READ
SETB SDA
SETB SCL
CLR SCL
SETB SCL ;DUNG DOC BIT
SETB SDA
RET
;============CHUONG TRINH CON DE DOC 1 BYTE TRONG I2C==============
LOOP_READ:
MOV R2,#08H
LOOP_READ1:
CLR SCL
SETB SCL
MOV C,SDA
RLC A
DJNZ R2,LOOP_READ1
CLR SCL
SETB SDA
MOV DATA_DS,A
RET
;=============================CHUONG TRINH DOI MA====================
BCD_HEX:
MOV B,#10H
DIV AB ; SO DU LUU TAI B
MOV TAM,B ;LUU HANG DON VI VAO TAM
MOV B,#10
MUL AB ; BYTE THAP VAO A, BYTE CAO VAO B
ADD A,TAM
RET
;===========================================
HEX_BCD:
MOV B,#10
DIV AB
MOV TAM,B
MOV B,#10H
MUL AB
ADD A,TAM
RET
;============================================
HIEN_THI_LED:
HIEN_THI_SEC:
MOV B,#10
MOV A,SEC
DIV AB
MOV Q0_SEC,B
MOV Q1_SEC,A
LCALL HIEN_LED
HIEN_THI_MIN:
MOV B,#10
MOV A,MIN
DIV AB
MOV Q0_MIN,B
MOV Q1_MIN,A
LCALL HIEN_LED
HIEN_THI_HOUR:
MOV B,#10
MOV A,HOUR
DIV AB
MOV Q0_HOUR,B
MOV Q1_HOUR,A
LCALL HIEN_LED
HIEN_THI_DAY:
MOV B,#10
MOV A,DAY
DIV AB
MOV Q0_DAY,B
MOV Q1_DAY,A
HIEN_THI_DATE:
MOV B,#10
MOV A,DATE
DIV AB
MOV Q0_DATE,B
MOV Q1_DATE,A
LCALL HIEN_LED
HIEN_THI_MONTH:
MOV B,#10
MOV A,MONTH
DIV AB
MOV Q0_MONTH,B
MOV Q1_MONTH,A
LCALL HIEN_LED
HIEN_THI_YEAR:
MOV B,#10
MOV A,YEAR
DIV AB
MOV Q0_YEAR,B
MOV Q1_YEAR,A
LCALL HIEN_LED
RET
;=========================================
DELAY:
LCALL DELAY_5MS
DJNZ I,DELAY
MOV I,#20
RET
DELAY_5MS:
MOV TMOD,#01h
MOV TH0,#high(-2000)
MOV TL0,#low(-2000)
SETB TR0
JNB TF0,$
CLR TF0
RET
////////////////000000////////////////////////////////////
KIEM_TRA_KEY:
KIEM_TRA_SEC:
MOV A,CHE_DO
CJNE A,#1,KIEM_TRA_MIN
LCALL CHINH_SEC
KIEM_TRA_MIN:
MOV A,CHE_DO
CJNE A,#2,KIEM_TRA_HOUR
LCALL CHINH_MIN
KIEM_TRA_HOUR:
MOV A,CHE_DO
CJNE A,#3,KIEM_TRA_DAY
LCALL CHINH_HOUR
KIEM_TRA_DAY:
MOV A,CHE_DO
CJNE A,#4,KIEM_TRA_DATE
LCALL CHINH_DAY
KIEM_TRA_DATE:
MOV A,CHE_DO
CJNE A,#5,KIEM_TRA_MONTH
LCALL CHINH_DATE
KIEM_TRA_MONTH:
MOV A,CHE_DO
CJNE A,#6,KIEM_TRA_YEAR
LCALL CHINH_MONTH
KIEM_TRA_YEAR:
MOV A,CHE_DO
CJNE A,#7,RA
LCALL CHINH_YEAR
RA:
RET
///////////////////0000000000000000////////////////////////
CHINH_SEC:
LCALL DOC_SEC
SEC1:
LCALL HIEN_THI_LED
JNB P3.4,TANG_SEC
JNB P3.5,GIAM_SEC
MOV A,CHE_DO
CJNE A,#1,THOAT_SEC
LJMP SEC1
THOAT_SEC:
RET
TANG_SEC:
INC SEC
MOV A,SEC
CJNE A,#60,SEC2
MOV SEC,#0
INC MIN
SEC2:
LCALL HEX_BCD
MOV DATA_DS,A
MOV ADD_LOW,#00H
LCALL WRITE_BYTE
SEC3:
LCALL HIEN_THI_LED
JNB P3.4,SEC3
LJMP SEC1
GIAM_SEC:
DEC SEC
MOV A,SEC
CJNE A,#255,SEC4
MOV SEC,#59
DEC MIN
SEC4:
LCALL HEX_BCD
MOV DATA_DS,A
MOV ADD_LOW,#00H
LCALL WRITE_BYTE
SEC5:
LCALL HIEN_THI_LED
JNB P3.5,SEC5
LJMP SEC1
/////////////////////000000000000////////////////////
CHINH_MIN:
LCALL DOC_MIN
MIN1:
LCALL HIEN_THI_LED
JNB P3.4,TANG_MIN
JNB P3.5,GIAM_MIN
MOV A,CHE_DO
CJNE A,#2,THOAT_MIN
LJMP MIN1
THOAT_MIN:
RET
TANG_MIN:
INC MIN
MOV A,MIN
CJNE A,#60,MIN2
MOV MIN,#0
INC HOUR
MIN2:
LCALL HEX_BCD
MOV DATA_DS,A
MOV ADD_LOW,#01H
LCALL WRITE_BYTE
MIN3:
LCALL HIEN_THI_LED
JNB P3.4,MIN3
LJMP MIN1
GIAM_MIN:
DEC MIN
MOV A,MIN
CJNE A,#255,MIN4
MOV MIN,#59
DEC HOUR
MIN4:
LCALL HEX_BCD
MOV DATA_DS,A
MOV ADD_LOW,#00H
LCALL WRITE_BYTE
MIN5:
LCALL HIEN_THI_LED
JNB P3.5,MIN5
LJMP MIN1
//////////////////00000000000000000////////////////////
CHINH_HOUR:
LCALL DOC_HOUR
HOUR1:
LCALL HIEN_THI_LED
JNB P3.4,TANG_HOUR
JNB P3.5,GIAM_HOUR
MOV A,CHE_DO
CJNE A,#3,THOAT_HOUR
LJMP HOUR1
THOAT_HOUR:
RET
TANG_HOUR:
INC HOUR
MOV A,HOUR
CJNE A,#24,HOUR2
MOV HOUR,#0
HOUR2:
LCALL HEX_BCD
MOV DATA_DS,A
MOV ADD_LOW,#02H
LCALL WRITE_BYTE
HOUR3:
LCALL HIEN_THI_LED
JNB P3.4,HOUR3
LJMP HOUR1
GIAM_HOUR:
DEC HOUR
MOV A,HOUR
CJNE A,#255,HOUR4
MOV HOUR,#23
HOUR4:
LCALL HEX_BCD
MOV DATA_DS,A
MOV ADD_LOW,#02H
LCALL WRITE_BYTE
HOUR5:
LCALL HIEN_THI_LED
JNB P3.5,HOUR5
LJMP HOUR1
//////////////000000000000000////////////////////
CHINH_DAY:
LCALL DOC_DAY
DAY1:
LCALL HIEN_THI_LED
JNB P3.4,TANG_DAY
JNB P3.5,GIAM_DAY
MOV A,CHE_DO
CJNE A,#4,THOAT_DAY
LJMP DAY1
THOAT_DAY:
RET
TANG_DAY:
INC DAY
MOV A,DAY
CJNE A,#8,DAY2
MOV DAY,#1
DAY2:
LCALL HEX_BCD
MOV DATA_DS,A
MOV ADD_LOW,#03H
LCALL WRITE_BYTE
DAY3:
LCALL HIEN_THI_LED
JNB P3.4,DAY3
LJMP DAY1
GIAM_DAY:
DEC DAY
MOV A,DAY
CJNE A,#255,DAY4
MOV DAY,#1
DAY4:
LCALL HEX_BCD
MOV DATA_DS,A
MOV ADD_LOW,#03H
LCALL WRITE_BYTE
DAY5:
LCALL HIEN_THI_LED
JNB P3.5,DAY5
LJMP DAY1
////////////////////000000000000000///////////////////////
CHINH_DATE:
LCALL DOC_DATE
DATE1:
LCALL HIEN_THI_LED
JNB P3.4,TANG_DATE
JNB P3.5,GIAM_DATE
MOV A,CHE_DO
CJNE A,#5,THOAT_DATE
LJMP DATE1
THOAT_DATE:
RET
TANG_DATE:
INC DATE
MOV A,DATE
CJNE A,#32,DATE2
MOV DATE,#1
INC MONTH
DATE2:
LCALL HEX_BCD
MOV DATA_DS,A
MOV ADD_LOW,#04H
LCALL WRITE_BYTE
DATE3:
LCALL HIEN_THI_LED
JNB P3.4,DATE3
LJMP DATE1
GIAM_DATE:
DEC DATE
MOV A,DATE
CJNE A,#255,DATE4
MOV DATE,#1
DEC MONTH
DATE4:
LCALL HEX_BCD
MOV DATA_DS,A
MOV ADD_LOW,#04H
LCALL WRITE_BYTE
DATE5:
LCALL HIEN_THI_LED
JNB P3.5,DATE5
LJMP DATE1
//////////////0000000000000///////////////////////
CHINH_MONTH:
LCALL DOC_MONTH
MONTH1:
LCALL HIEN_THI_LED
JNB P3.4,TANG_MONTH
JNB P3.5,GIAM_MONTH
MOV A,CHE_DO
CJNE A,#6,THOAT_MONTH
LJMP MONTH1
THOAT_MONTH:
RET
TANG_MONTH:
INC MONTH
MOV A,MONTH
CJNE A,#13,MONTH2
MOV MONTH,#1
INC YEAR
MONTH2:
LCALL HEX_BCD
MOV DATA_DS,A
MOV ADD_LOW,#05H
LCALL WRITE_BYTE
MONTH3:
LCALL HIEN_THI_LED
JNB P3.4,MONTH3
LJMP MONTH1
GIAM_MONTH:
DEC MONTH
MOV A,MONTH
CJNE A,#255,MONTH4
MOV MONTH,#1
DEC YEAR
MONTH4:
LCALL HEX_BCD
MOV DATA_DS,A
MOV ADD_LOW,#05H
LCALL WRITE_BYTE
MONTH5:
LCALL HIEN_THI_LED
JNB P3.5,MONTH5
LJMP MONTH1
/////////////////00000000000000000//////////////////////
CHINH_YEAR:
LCALL DOC_YEAR
YEAR1:
LCALL HIEN_THI_LED
JNB P3.4,TANG_YEAR
JNB P3.5,GIAM_YEAR
MOV A,CHE_DO
CJNE A,#7,THOAT_YEAR
LJMP YEAR1
THOAT_YEAR:
RET
TANG_YEAR:
INC YEAR
MOV A,YEAR
CJNE A,#100,YEAR2
MOV YEAR,#1
YEAR2:
LCALL HEX_BCD
MOV DATA_DS,A
MOV ADD_LOW,#06H
LCALL WRITE_BYTE
YEAR3:
LCALL HIEN_THI_LED
JNB P3.4,YEAR3
LJMP YEAR1
GIAM_YEAR:
DEC YEAR
MOV A,YEAR
CJNE A,#255,YEAR4
MOV YEAR,#1
YEAR4:
LCALL HEX_BCD
MOV DATA_DS,A
MOV ADD_LOW,#06H
LCALL WRITE_BYTE
YEAR5:
LCALL HIEN_THI_LED
JNB P3.5,YEAR5
LJMP YEAR1
////////////0000000000000000000////////////////////////////
;==========================================================
HIEN_LED:
HIEN_SEC:
MOV A,Q0_SEC
MOV DPTR,#MALED
MOVC A,@A+DPTR
MOV P0,A
SETB P2.5
LCALL DELAY_5MS
MOV P1,#00H
MOV P2,#00H
LCALL DELAY_5MS
;=========================
MOV A,Q1_SEC
MOV DPTR,#MALED
MOVC A,@A+DPTR
MOV P0,A
SETB P1.0
LCALL DELAY_5MS
MOV P1,#00H
MOV P2,#00H
LCALL DELAY_5MS
HIENMIN:
MOV A,Q0_MIN
MOV DPTR,#MALED
MOVC A,@A+DPTR
MOV P0,A
SETB P1.1
LCALL DELAY_5MS
MOV P1,#00H
MOV P2,#00H
LCALL DELAY_5MS
;============================
MOV A,Q1_MIN
MOV DPTR,#MALED
MOVC A,@A+DPTR
MOV P0,A
SETB P1.2
LCALL DELAY_5MS
MOV P1,#00H
MOV P2,#00H
LCALL DELAY_5MS
HIENHOUR:
MOV A,Q0_HOUR
MOV DPTR,#MALED
MOVC A,@A+DPTR
MOV P0,A
SETB P1.3
LCALL DELAY_5MS
MOV P1,#00H
MOV P2,#00H
LCALL DELAY_5MS
;=================================
MOV A,Q1_HOUR
MOV DPTR,#MALED
MOVC A,@A+DPTR
MOV P0,A
SETB P1.4
LCALL DELAY_5MS
MOV P1,#00H
MOV P2,#00H
LCALL DELAY_5MS
HIENDAY:
MOV A,Q0_DAY
MOV DPTR,#MALED
MOVC A,@A+DPTR
MOV P0,A
SETB P1.5
LCALL DELAY_5MS
MOV P1,#00H
MOV P2,#00H
LCALL DELAY_5MS
HIENDATE:
MOV A,Q0_DATE
MOV DPTR,#MALED
MOVC A,@A+DPTR
MOV P0,A
SETB P1.6
LCALL DELAY_5MS
MOV P1,#00H
MOV P2,#00H
LCALL DELAY_5MS
;=============================
MOV A,Q1_DATE
MOV DPTR,#MALED
MOVC A,@A+DPTR
MOV P0,A
SETB P2.0
LCALL DELAY_5MS
MOV P1,#00H
MOV P2,#00H
LCALL DELAY_5MS
HIENMONTH:
MOV A,Q0_MONTH
MOV DPTR,#MALED
MOVC A,@A+DPTR
MOV P0,A
SETB P2.1
LCALL DELAY_5MS
MOV P1,#00H
MOV P2,#00H
LCALL DELAY_5MS
;=================================
MOV A,Q1_MONTH
MOV DPTR,#MALED
MOVC A,@A+DPTR
MOV P0,A
SETB P2.2
LCALL DELAY_5MS
MOV P1,#00H
MOV P2,#00H
LCALL DELAY_5MS
HIENYEAR:
MOV A,Q0_YEAR
MOV DPTR,#MALED
MOVC A,@A+DPTR
MOV P0,A
SETB P2.3
LCALL DELAY_5MS
MOV P1,#00H
MOV P2,#00H
LCALL DELAY_5MS
;==========================
MOV A,Q1_YEAR
MOV DPTR,#MALED
MOVC A,@A+DPTR
MOV P0,A
SETB P2.4
LCALL DELAY_5MS
MOV P1,#00H
MOV P2,#00H
LCALL DELAY_5MS
RET
MALED:
DB 00111111b,00000110b,01011011b,01001111b,01100110b,01101101b,01111101b,00000111b,01111111b,01101111b
END
;========= NGUYEN VAN KY HUNG VA DO TRUONG GIANG ============
 
↓ CHÚ Ý: Bài giảng này được nén lại dưới dạng RAR và có thể chứa nhiều file. Hệ thống chỉ hiển thị 1 file trong số đó, đề nghị các thầy cô KIỂM TRA KỸ TRƯỚC KHI NHẬN XÉT ↓








Các ý kiến mới nhất