📄 1302模块.s
字号:
.module _1302模块.c
.area text(rom, con, rel)
.dbfile D:\AVR实验\DS1302时间芯片\1302模块.c
.dbfunc e Delayus _Delayus fV
; i -> R16
.even
_Delayus::
.dbline -1
.dbline 29
; #include <iom8515v.h>
; #include <macros.h>
;
; #define uchar unsigned char
; #define uint unsigned int
;
; #define ds1302_clk PC1
; #define ds1302_data PC2
; #define ds1302_rst PC3
;
; #define Set_ds1302_clk PORTC |=(1<<ds1302_clk)
; #define Set_ds1302_data PORTC |=(1<<ds1302_data)
; #define Set_ds1302_rst PORTC |=(1<<ds1302_rst)
;
; #define Clr_ds1302_clk PORTC &=~(1<<ds1302_clk)
; #define Clr_ds1302_data PORTC &=~(1<<ds1302_data)
; #define Clr_ds1302_rst PORTC &=~(1<<ds1302_rst)
;
; #define read_data PORTC &=~(1<<ds1302_data)
;
; #define uchar unsigned char
; #define uint unsigned int
;
; uchar ReadSec(void);
;
;
;
; void Delayus(uchar i)
; {
L2:
.dbline 30
L3:
.dbline 30
; 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 35
; }
;
;
; uchar ReadSec(void)
; {
.dbline 36
; 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 39
; }
; uchar ReadMin(void)
; {
.dbline 40
; 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 43
; }
; uchar ReadHour(void)
; {
.dbline 44
; 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 50
; }
;
;
;
; void WriteSec(uchar number)
; {
.dbline 51
; 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 54
; }
; void WriteMin(uchar number)
; {
.dbline 55
; 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 58
; }
; void WriteHour(uchar number) //向DS1302中写入分字节
; {
.dbline 59
; 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,R21
; address -> R20
.even
_ReadRTC_Byte::
rcall push_gset1
mov R20,R16
.dbline -1
.dbline 66
; }
;
;
;
;
; uint ReadRTC_Byte(uchar address)
; {
.dbline 71
; unsigned int redata;
;
;
;
; Clr_ds1302_rst;//ds1302_rst = 0;
cbi 0x15,3
.dbline 72
; Clr_ds1302_clk;//ds1302_clk = 0;
cbi 0x15,1
.dbline 73
; Set_ds1302_rst;//ds1302_rst = 1;
sbi 0x15,3
.dbline 74
; Write(address);
mov R16,R20
clr R17
rcall _Write
.dbline 75
; redata=Read(address);
mov R16,R20
clr R17
rcall _Read
movw R20,R16
.dbline 76
; Clr_ds1302_rst;//ds1302_rst = 0;
cbi 0x15,3
.dbline 77
; Set_ds1302_clk;//ds1302_clk = 1;
sbi 0x15,1
.dbline 78
; return read_data;
in R24,0x15
andi R24,251
out 0x15,R24
mov R16,R24
clr R17
.dbline -2
L11:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r redata 20 i
.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 82
; }
;
; void WriteRTC_Byte(uchar address,uchar number)
; {
.dbline 83
; Clr_ds1302_clk;//ds1302_clk = 0;
cbi 0x15,1
.dbline 84
; Clr_ds1302_rst;// ds1302_rst = 0;
cbi 0x15,3
.dbline 85
; Set_ds1302_rst;//ds1302_rst = 1;
sbi 0x15,3
.dbline 86
; Write(address);
mov R16,R22
clr R17
rcall _Write
.dbline 87
; Write(number);
mov R16,R20
clr R17
rcall _Write
.dbline 88
; Clr_ds1302_rst;//ds1302_rst = 0;
cbi 0x15,3
.dbline 89
; 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 97
; }
;
;
;
;
;
; void Write_bit (uchar addr)
; {
.dbline 98
; uchar i=0;
clr R20
.dbline 99
ldi R20,8
rjmp L17
L14:
.dbline 99
; for(i=8;i>0;i--){
.dbline 100
; if((addr&0x01)==0x01)
mov R24,R16
andi R24,1
cpi R24,1
brne L18
.dbline 101
; Set_ds1302_data;//ds1302_dat = 1;
sbi 0x15,2
rjmp L19
L18:
.dbline 103
; else
; Clr_ds1302_data;//ds1302_dat = 0;
cbi 0x15,2
L19:
.dbline 104
sbi 0x15,1
.dbline 105
cbi 0x15,1
.dbline 106
lsr R16
.dbline 107
L15:
.dbline 99
dec R20
L17:
.dbline 99
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
; data_r -> R20
; num -> R22
; i -> R10
; addr -> R20
.even
_Read_bit::
rcall push_gset3
mov R20,R16
.dbline -1
.dbline 111
; Set_ds1302_clk;//ds1302_clk=1;
; Clr_ds1302_clk;//ds1302_clk=0;
; addr>>=1;
; }
; }
;
; uchar Read_bit (uchar addr)
; {
.dbline 112
; uchar i=0,num;
clr R10
.dbline 113
; uchar data_r=0;;
clr R20
.dbline 113
.dbline 114
; Delayus(2);
ldi R16,2
rcall _Delayus
.dbline 116
ldi R24,8
mov R10,R24
rjmp L24
L21:
.dbline 116
; //ds1302_dat = 1;
; for(i=8;i>0;i--){
.dbline 117
; data_r>>=1;
lsr R20
.dbline 118
; read_data;
cbi 0x15,2
.dbline 119
; num=PINC&0x04;
in R22,0x13
andi R22,4
.dbline 120
; if(num == 1)
cpi R22,1
brne L25
.dbline 121
; {
.dbline 122
; data_r|=0x80;
ori R20,128
.dbline 123
; }
L25:
.dbline 124
sbi 0x15,1
.dbline 125
cbi 0x15,1
.dbline 126
L22:
.dbline 116
dec R10
L24:
.dbline 116
clr R2
cp R2,R10
brlo L21
.dbline 127
; Set_ds1302_clk;//ds1302_clk = 1;
; Clr_ds1302_clk;//ds1302_clk = 0;
; }
; return data_r;
mov R16,R20
.dbline -2
L20:
rcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r data_r 20 c
.dbsym r num 22 c
.dbsym r i 10 c
.dbsym r addr 20 c
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -