Xem mẫu
- Chương2 :Các chương trình phục vụ cho RTC
1. SEND_START (Gửi điều kiện START)
2. SEND_STOP (Gửi điều kiện STOP)
3. SCL_HIGH (đưa SCL lên mức cao)
4. SEND_BYTE (gửi byte vào RTC)
5. READ_BYTE (đọc byte từ RTC)
6. READ_CLOCK (đọc giờ từ RTC)
7. SET_CLOCK (cài đặt giờ RTC)
8. READ_RAM (đọc 56 byte từ RTC)
9. SET_RAM (ghi 56 byte vào RTC)
10. OSC_CONTROL (Điều khiển bộ dao động trong
RTC)
11. SQW_CONTROL_1HZ (xuất xung 1Hz ở chân 7 của RTC)
12. SQW_CONTROL_4KHZ(xuất xung 4.096KHz ở chân 7 của
RTC)
13. SQW_CONTROL_8KHZ(xuất xung 8.192Hz ở chân 7 của
RTC)
14. SQW_CONTROL_32KHZ(xuất xung 32.768Hz ở chân 7 của
RTC)
15. ALARM_TEST (kiểm tra báo thức)
;START CONDITION
- SEND_START:
CLR NO_START
JB _2W_BUSY,SEND_START_ERROR
SETB _2W_BUSY
CLR ACK
JNB SCL,SEND_START_ERROR
JNB SDA,SEND_START_ERROR
SETB SDA
LCALL SCL_HIGH
LCALL DELAY
CLR SDA
LCALL DELAY;
CLR SCL
RET
SEND_START_ERROR:
SETB NO_START
RET
;===============================================
;STOP CONDITION
SEND_STOP:
- CLR SDA
LCALL SCL_HIGH
LCALL DELAY
SETB SDA
NOP
JNB SDA,$
CLR _2W_BUSY
RET
;================================================
;SEND BYTE
;DUA GIA TRI TRONG THANH GHI A VAO DS1307
SEND_BYTE:
MOV BITCOUNT,#8H
SEND_BYTE_LOOP:
JNB ACC.7,LEVEL_LOW
SETB SDA
AJMP SEND_BITS
LEVEL_LOW:
CLR SDA
SEND_BITS:
- ; NOP
; NOP
; NOP
LCALL SCL_HIGH
LCALL DELAY
CLR SCL;KET THUC 1 XUNG NHIP
RL A
DJNZ BITCOUNT,SEND_BYTE_LOOP
SETB SDA;CAU HINH DE NHAN XUNG ACK
NOP
LCALL SCL_HIGH
; NOP
; NOP
; NOP
CLR ACK
JNB SDA,SEND_BYTE_COMPLISH
SETB ACK
SEND_BYTE_COMPLISH:
LCALL DELAY
CLR SCL
LCALL DELAY
RET
- ;=============================================
;DOC GIA TRI VAO A
READ_BYTE:
MOV BITCOUNT,#8H
MOV A,#00H
SETB SDA
READ_BITS:
LCALL SCL_HIGH
; NOP
; NOP
; NOP
MOV C,SDA
RLC A;DUA SDA VAO THANH GHI A
CLR SCL
; NOP
NOP
; NOP
DJNZ BITCOUNT,READ_BITS
JB LAST_READ,NOT_ACK;NEU LA LAN DOC CUOI
CUNG THI KHONG GUI ACK
- CLR SDA;GUI ACK BIT
NOT_ACK:
LCALL SCL_HIGH
CLR SCL
RET;
SCL_HIGH:
SETB SCL
JNB SCL,$
NOP
RET
READ_CLOCK:
MOV R0,#25H
MOV BYTECOUNT,#00
CLR LAST_READ
LCALL SEND_START
MOV A,#0D0H;WRITE COMMAND
LCALL SEND_BYTE
MOV A,#00H;DAT DIA CHI LAM VIEC
LCALL SEND_BYTE
LCALL SEND_STOP
- LCALL SEND_START
MOV A,#0D1H;READ
LCALL SEND_BYTE
READ_LOOP:
MOV A,BYTECOUNT
CJNE A,#07H,NOTLAST
SETB LAST_READ
NOTLAST:
LCALL READ_BYTE
MOV @R0,A
INC R0
INC BYTECOUNT
MOV A,BYTECOUNT
CJNE A,#00H,NOT_FIRST
CLR OSC
MOV A,@R0
JNB ACC.7,NO_OSC
SETB OSC
CLR ACC.7
MOV @R0,A
NO_OSC:
NOT_FIRST:
- CJNE A,#8H,READ_LOOP
RET
SQW_CONTROL_1HZ:
LCALL SEND_START
MOV A,#0D0H
LCALL SEND_BYTE
MOV A,#07H;DAT DIA CHI LAM VIEC
LCALL SEND_BYTE
MOV A,#80H
JNB SQW,TURN_OFF_SQW1
MOV A,#90H
TURN_OFF_SQW1:
LCALL SEND_BYTE
LCALL SEND_STOP
RET
SQW_CONTROL_4KHZ:
LCALL SEND_START
MOV A,#0D0H
LCALL SEND_BYTE
MOV A,#07H;DAT DIA CHI LAM VIEC
- LCALL SEND_BYTE
MOV A,#81H
JNB SQW,TURN_OFF_SQW2
MOV A,#91H
TURN_OFF_SQW2:
LCALL SEND_BYTE
LCALL SEND_STOP
RET
SQW_CONTROL_8KHZ:
LCALL SEND_START
MOV A,#0D0H
LCALL SEND_BYTE
MOV A,#07H;DAT DIA CHI LAM VIEC
LCALL SEND_BYTE
MOV A,#82H
JNB SQW,TURN_OFF_SQW3
MOV A,#92H
TURN_OFF_SQW3:
LCALL SEND_BYTE
LCALL SEND_STOP
RET
SQW_CONTROL_32KHZ:
- LCALL SEND_START
MOV A,#0D0H
LCALL SEND_BYTE
MOV A,#07H;DAT DIA CHI LAM VIEC
LCALL SEND_BYTE
MOV A,#83H
JNB SQW,TURN_OFF_SQW4
MOV A,#93H
TURN_OFF_SQW4:
LCALL SEND_BYTE
LCALL SEND_STOP
RET
;***********************************
READ_RAM:
MOV R0,#30H
MOV BYTECOUNT,#00H
CLR LAST_READ
LCALL SEND_START
MOV A,#0D0H;WRITE COMMAND
LCALL SEND_BYTE
- MOV A,#08H
LCALL SEND_BYTE;DAT DIA CHI LAM VIEC
LCALL SEND_STOP
LCALL SEND_START
MOV A,#0D1H;READ COMMAND
LCALL SEND_BYTE
READ_RAM_LOOP1:
MOV A,BYTECOUNT
CJNE A,#55,NOT_LAST2;KHONG PHAI LAN DOC
CUOI CUNG
SETB LAST_READ
NOT_LAST2:
LCALL READ_BYTE
MOV @R0,A
INC R0
INC BYTECOUNT
MOV A,BYTECOUNT
CJNE A,#56,READ_RAM_LOOP1
LCALL SEND_STOP
RET
- SET_RAM:
MOV R0,#30H
MOV BYTECOUNT,#00H
LCALL SEND_START
MOV A,#0D0H;WRITE COMMAND
LCALL SEND_BYTE
MOV A,#08H
LCALL SEND_BYTE;DIA CHI LAM VIEC
SET_RAM_LOOP:
MOV A,@R0
LCALL SEND_BYTE
INC R0
INC BYTECOUNT
MOV A,BYTECOUNT
CJNE A,#38H,SET_RAM_LOOP
LCALL SEND_STOP
RET
OSC_CONTROL:
LCALL SEND_START
MOV A,#0D0H;WRITE COMMAND
LCALL SEND_BYTE
MOV A,#00H
- LCALL SEND_BYTE
LCALL SEND_STOP
LCALL SEND_START
MOV A,#0D1H;READ COMMAND
LCALL SEND_BYTE
SETB LAST_READ
LCALL READ_BYTE
PUSH ACC;CAT SECOND TRONG REAL TIMER
LCALL SEND_STOP
LCALL SEND_START
MOV A,#0D0H;WRITE COMMAND
LCALL SEND_BYTE
MOV A,#00H
LCALL SEND_BYTE
JB OSC,OSC_ON
POP ACC
SETB ACC.7;OSC DISABLE
LJMP SET_OSC
OSC_ON:
POP ACC
CLR ACC.7
SET_OSC:
- LCALL SEND_BYTE
LCALL SEND_STOP
RET
ALARM_TEST:
JNB ALARM,EXIT_ALARM
MOV A,MINUTE
CJNE A,MINUTE_ALARM,EXIT_ALARM
MOV A,HOUR
CJNE A,HOUR_ALARM,EXIT_ALARM
CLR P3.6;BAO THUC
EXIT_ALARM:
SETB P3.6;TAT BAO THUC
RET
nguon tai.lieu . vn