Tải bản đầy đủ (.pdf) (14 trang)

Chương2 :Các chương trình phục vụ cho RTC 1. SEND_START (Gửi điều kiện START) 2.

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 (146.05 KB, 14 trang )

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
RTC)

(Điều khiển bộ dao động trong

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
;START CONDITION

(kiểm tra báo thức)


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
SEND_BITS:

SDA


;

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
;

NOP

;

NOP


;

SCL_HIGH

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
;

NOP

;

NOP

;


SCL_HIGH

NOP
MOV
RLC

A;DUA SDA VAO THANH GHI A

CLR
;

C,SDA

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
CJNE
CUOI CUNG
SETB

A,BYTECOUNT
A,#55,NOT_LAST2;KHONG PHAI LAN DOC
LAST_READ

NOT_LAST2:
LCALL
MOV


@R0,A

INC

R0

INC

BYTECOUNT

MOV

A,BYTECOUNT

CJNE

A,#56,READ_RAM_LOOP1

LCALL
RET

READ_BYTE

SEND_STOP


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
RET

P3.6;TAT BAO THUC



×