📄 mudle1302.s
字号:
.module mudle1302.c
.area text(rom, con, rel)
.dbfile D:\AVR实验\DS1302时间芯片\mudle1302.c
.dbfunc e Delayus _Delayus fV
; i -> R16
.even
_Delayus::
.dbline -1
.dbline 5
; #include "ds1302.h"
;
;
; void Delayus(uchar i)
; {
L2:
.dbline 6
L3:
.dbline 6
; while(--i);
mov R24,R16
subi R24,1
mov R16,R24
tst R24
brne L2
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbsym r i 16 c
.dbend
.dbfunc e ReadSec _ReadSec fc
.even
_ReadSec::
.dbline -1
.dbline 13
; }
;
;
;
;
; uchar ReadSec(void)
; {
.dbline 14
; return ReadRTC_Byte(0x81);
ldi R16,129
ldi R17,0
rcall _ReadRTC_Byte
.dbline -2
L5:
.dbline 0 ; func end
ret
.dbend
.dbfunc e ReadMin _ReadMin fc
.even
_ReadMin::
.dbline -1
.dbline 17
; }
; uchar ReadMin(void)
; {
.dbline 18
; return ReadRTC_Byte(0x83);
ldi R16,131
ldi R17,0
rcall _ReadRTC_Byte
.dbline -2
L6:
.dbline 0 ; func end
ret
.dbend
.dbfunc e ReadHour _ReadHour fc
.even
_ReadHour::
.dbline -1
.dbline 21
; }
; uchar ReadHour(void)
; {
.dbline 22
; return ReadRTC_Byte(0x85);
ldi R16,133
ldi R17,0
rcall _ReadRTC_Byte
.dbline -2
L7:
.dbline 0 ; func end
ret
.dbend
.dbfunc e WriteSec _WriteSec fV
; number -> R20
.even
_WriteSec::
rcall push_gset1
mov R20,R16
.dbline -1
.dbline 28
; }
;
;
;
; void WriteSec(uchar number)
; {
.dbline 29
; WriteRTC_Byte(0x80,number);
mov R18,R20
clr R19
ldi R16,128
ldi R17,0
rcall _WriteRTC_Byte
.dbline -2
L8:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r number 20 c
.dbend
.dbfunc e WriteMin _WriteMin fV
; number -> R20
.even
_WriteMin::
rcall push_gset1
mov R20,R16
.dbline -1
.dbline 32
; }
; void WriteMin(uchar number)
; {
.dbline 33
; WriteRTC_Byte(0x82,number);
mov R18,R20
clr R19
ldi R16,130
ldi R17,0
rcall _WriteRTC_Byte
.dbline -2
L9:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r number 20 c
.dbend
.dbfunc e WriteHour _WriteHour fV
; number -> R20
.even
_WriteHour::
rcall push_gset1
mov R20,R16
.dbline -1
.dbline 36
; }
; void WriteHour(uchar number) //向DS1302中写入分字节
; {
.dbline 37
; WriteRTC_Byte(0x84,number);
mov R18,R20
clr R19
ldi R16,132
ldi R17,0
rcall _WriteRTC_Byte
.dbline -2
L10:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r number 20 c
.dbend
.dbfunc e ReadRTC_Byte _ReadRTC_Byte fi
; redata -> R20
; address -> R20
.even
_ReadRTC_Byte::
rcall push_gset1
mov R20,R16
.dbline -1
.dbline 44
; }
;
;
;
;
; uint ReadRTC_Byte(uchar address)
; {
.dbline 47
; unsigned char redata;
;
; Clr_ds1302_rst;//ds1302_rst = 0;
cbi 0x15,3
.dbline 48
; Clr_ds1302_clk;//ds1302_clk = 0;
cbi 0x15,1
.dbline 49
; Set_ds1302_rst;//ds1302_rst = 1;
sbi 0x15,3
.dbline 50
; Write_bit(address);
mov R16,R20
clr R17
rcall _Write_bit
.dbline 51
; redata=Read_bit();
rcall _Read_bit
mov R20,R16
.dbline 52
; Clr_ds1302_rst;//ds1302_rst = 0;
cbi 0x15,3
.dbline 53
; Set_ds1302_clk;//ds1302_clk = 1;
sbi 0x15,1
.dbline 54
; return redata;
clr R17
.dbline -2
L11:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r redata 20 c
.dbsym r address 20 c
.dbend
.dbfunc e WriteRTC_Byte _WriteRTC_Byte fV
; number -> R20
; address -> R22
.even
_WriteRTC_Byte::
rcall push_gset2
mov R20,R18
mov R22,R16
.dbline -1
.dbline 58
; }
;
; void WriteRTC_Byte(uchar address,uchar number)
; {
.dbline 59
; Clr_ds1302_clk;//ds1302_clk = 0;
cbi 0x15,1
.dbline 60
; Clr_ds1302_rst;// ds1302_rst = 0;
cbi 0x15,3
.dbline 61
; Set_ds1302_rst;//ds1302_rst = 1;
sbi 0x15,3
.dbline 62
; Write_bit(address);
mov R16,R22
clr R17
rcall _Write_bit
.dbline 63
; Write_bit(number);
mov R16,R20
clr R17
rcall _Write_bit
.dbline 64
; Clr_ds1302_rst;//ds1302_rst = 0;
cbi 0x15,3
.dbline 65
; Set_ds1302_clk;//ds1302_clk = 1;
sbi 0x15,1
.dbline -2
L12:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r number 20 c
.dbsym r address 22 c
.dbend
.dbfunc e Write_bit _Write_bit fV
; i -> R20
; addr -> R16
.even
_Write_bit::
rcall push_gset1
.dbline -1
.dbline 73
; }
;
;
;
;
;
; void Write_bit (uchar addr)
; {
.dbline 74
; uchar i=0;
clr R20
.dbline 75
ldi R20,8
rjmp L17
L14:
.dbline 75
; for(i=8;i>0;i--){
.dbline 76
; if((addr&0x01)==0x01)
mov R24,R16
andi R24,1
cpi R24,1
brne L18
.dbline 77
; Set_ds1302_data;//ds1302_dat = 1;
sbi 0x15,2
rjmp L19
L18:
.dbline 79
; else
; Clr_ds1302_data;//ds1302_dat = 0;
cbi 0x15,2
L19:
.dbline 80
sbi 0x15,1
.dbline 81
cbi 0x15,1
.dbline 82
lsr R16
.dbline 83
L15:
.dbline 75
dec R20
L17:
.dbline 75
clr R2
cp R2,R20
brlo L14
.dbline -2
L13:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r addr 16 c
.dbend
.dbfunc e Read_bit _Read_bit fc
; num -> <dead>
; data_r -> R20
; i -> R22
.even
_Read_bit::
rcall push_gset2
.dbline -1
.dbline 87
; Set_ds1302_clk;//ds1302_clk=1;
; Clr_ds1302_clk;//ds1302_clk=0;
; addr>>=1;
; }
; }
;
; uchar Read_bit ()
; {
.dbline 88
; uchar i=0,num;
clr R22
.dbline 89
; uchar data_r=0;
clr R20
.dbline 90
; Delayus(15);//19us delay
ldi R16,15
rcall _Delayus
.dbline 91
; data_in;
cbi 0x14,2
.dbline 94
ldi R22,8
rjmp L24
L21:
.dbline 94
;
;
; for(i=8;i>0;i--){
.dbline 95
; data_r>>=1;
lsr R20
.dbline 98
;
;
; if(data_in_read)
sbis 0x13,2
rjmp L25
.dbline 99
; {
.dbline 100
; data_r|=0x80;
ori R20,128
.dbline 101
; }
L25:
.dbline 102
sbi 0x15,1
.dbline 103
cbi 0x15,1
.dbline 104
L22:
.dbline 94
dec R22
L24:
.dbline 94
clr R2
cp R2,R22
brlo L21
.dbline 105
; Set_ds1302_clk;//ds1302_clk = 1;
; Clr_ds1302_clk;//ds1302_clk = 0;
; }
; return data_r;
mov R16,R20
.dbline -2
L20:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym l num 1 c
.dbsym r data_r 20 c
.dbsym r i 22 c
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -