📄 ds1302.s
字号:
.module DS1302.c
.area data(ram, con, rel)
_WriteAddress::
.blkb 2
.area idata
.byte 140,136
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 134,132
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 130,128
.area data(ram, con, rel)
.blkb 1
.area idata
.byte 138
.area data(ram, con, rel)
.dbfile E:\biyesheji\SUCCES~1\SENDSE~1\SETPFI~2\程序/ds1302.h
.dbsym e WriteAddress _WriteAddress A[7:7]c
_WriteTime::
.blkb 2
.area idata
.byte 7,5
.area data(ram, con, rel)
.dbfile E:\biyesheji\SUCCES~1\SENDSE~1\SETPFI~2\程序/ds1302.h
.blkb 2
.area idata
.byte 2,19
.area data(ram, con, rel)
.dbfile E:\biyesheji\SUCCES~1\SENDSE~1\SETPFI~2\程序/ds1302.h
.blkb 2
.area idata
.byte 'P,48
.area data(ram, con, rel)
.dbfile E:\biyesheji\SUCCES~1\SENDSE~1\SETPFI~2\程序/ds1302.h
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile E:\biyesheji\SUCCES~1\SENDSE~1\SETPFI~2\程序/ds1302.h
.dbsym e WriteTime _WriteTime A[7:7]c
.area text(rom, con, rel)
.dbfile E:\biyesheji\SUCCES~1\SENDSE~1\SETPFI~2\程序/ds1302.h
.dbfunc e DS1302_set _DS1302_set fV
; i -> R16
.even
_DS1302_set::
.dbline -1
.dbline 49
; //ICC-AVR 修改日期: 2007-05-01 15:38:44
; //PC3:功能按键
; //PC4:移位按键
; //PC5:加一按键
; //PB0:减一按键
; // CenWenJiao
; // Target : M8
; // Crystal: 1.0000Mhz
; //2007.05.01 21:08:CC 完成时间调整程序
; #include <iom8v.h>
; #include <macros.h>
; #include "ds1302.h"
; #include "DELAY.C"
; #include "LCD.h" //eureka
;
; /*cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
; 单片机初始化程序
; ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc*/
; void port_init(void) //设置portb和portc端口
; {
; PORTB = 0x01;//PB0 作为减一按键
; DDRB = 0x00;
; PORTC = 0x38; //m103 output only//PC3; PC4; PC5; 功能,移位,加一
; DDRC = 0xC7;
; PORTD = 0x00;
; DDRD = 0xFF;
; }
; /*ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
; 1302初始化驱动
; cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc*/
; void init_devices(void)
; {
; //CLI(); //disable all interrupts
; port_init();
; DS1302_set();
; //timer1_init();
; MCUCR = 0x00;
; GICR = 0x00;
; TIMSK = 0x04;
; //SEI(); //re-enable interrupts
; }
; /*ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
; LCD1602初始化驱动
; cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc*/
; void init_devicesl(void)
; {
; //CLI(); //disable all interrupts
; LCD_init();
; // DS1302_set();
.dbline 50
; MCUCR = 0x00;
cbi 0x15,1
.dbline 51
; GICR = 0x00;
cbi 0x15,0
.dbline 52
; TIMSK = 0x00; //timer interrupt sources
clr R16
rjmp L5
L2:
.dbline 53
.dbline 54
nop
.dbline 55
L3:
.dbline 52
inc R16
L5:
.dbline 52
cpi R16,8
brlo L2
.dbline 56
; // SEI(); //re-enable interrupts
; }
; /*ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
; 基本的显示程序
sbi 0x15,0
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbsym r i 16 c
.dbend
.dbfunc e DS1302_Write _DS1302_Write fV
; i -> R20,R21
; x -> R22
.even
_DS1302_Write::
rcall push_gset2
mov R22,R16
.dbline -1
.dbline 62
; cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc*/
; void SendDataForDisplay(void)
; {
; //DS1302_ReadTime();
; //DataFenli();
;
.dbline 65
; LCD_write_string(0,0,"time:");
; LCD_write_char(6,0,hourth+48); //时
; LCD_write_char(7,0,hourtl+48);
cbi 0x15,1
.dbline 66
; LCD_write_char(8,0,45);
sbi 0x14,2
.dbline 67
; LCD_write_char(9,0,minuteth+48); //分
clr R20
clr R21
L7:
.dbline 68
; LCD_write_char(10,0,minutetl+48);
.dbline 68
cbi 0x15,1
.dbline 69
; LCD_write_char(11,0,45);
ldi R16,1
ldi R17,0
movw R18,R20
rcall lsl16
mov R2,R22
clr R3
and R2,R16
and R3,R17
tst R2
brne X0
tst R3
breq L11
X0:
.dbline 70
; LCD_write_char(12,0,secondth+48);
sbi 0x15,2
rjmp L12
L11:
.dbline 72
; LCD_write_char(13,0,secondtl+48); //秒
;
cbi 0x15,2
L12:
.dbline 73
nop
.dbline 74
sbi 0x15,1
.dbline 75
nop
.dbline 76
L8:
.dbline 67
subi R20,255 ; offset = 1
sbci R21,255
.dbline 67
cpi R20,8
ldi R30,0
cpc R21,R30
brlt L7
.dbline 77
; LCD_write_string(0,1,"data:");
; LCD_write_char(6,1,yearth+48);
; LCD_write_char(7,1,yeartl+48); //年
; LCD_write_char(8,1,45);
; LCD_write_char(9,1,monthth+48); //月
cbi 0x15,1
.dbline -2
L6:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r i 20 I
.dbsym r x 22 c
.dbend
.dbfunc e DS1302_WriteT _DS1302_WriteT fV
; time -> R20
; ddr -> R22
.even
_DS1302_WriteT::
rcall push_gset2
mov R20,R18
mov R22,R16
.dbline -1
.dbline 81
; LCD_write_char(10,1,monthtl+48);
; LCD_write_char(11,1,45);
; LCD_write_char(12,1,dateth+48); //日
; LCD_write_char(13,1,datetl+48);
.dbline 82
;
rcall _DS1302_set
.dbline 83
; delay_nus(200);
mov R16,R22
rcall _DS1302_Write
.dbline 84
;
mov R16,R20
rcall _DS1302_Write
.dbline -2
L13:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r time 20 c
.dbsym r ddr 22 c
.dbend
.dbfunc e DS1302_Read _DS1302_Read fc
; k -> R20
; temp -> R22
; i -> R10
; addr -> R20
.even
_DS1302_Read::
rcall push_gset3
mov R20,R16
.dbline -1
.dbline 90
; }
; /*ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
; 显示中调用的闪烁调用程序
; cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc*/
; void black(int m,int n)//闪烁
; {
.dbline 92
; LCD_write_char(m,n,95);//95为闪烁时"下滑线"的代码
; delay_nus(1000);
clr R22
.dbline 93
; }
sbi 0x14,2
.dbline 94
; /*cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc*/
cbi 0x15,0
.dbline 95
; /*设置分钟,秒,加法子程序*/
cbi 0x15,1
.dbline 96
; /*cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc*/
nop
.dbline 97
; void PlusForSET(int i)
nop
.dbline 98
; {
nop
.dbline 99
; if(WriteTime[i]==0x09) //writetime[i] 是定义存储写地址的数组
nop
.dbline 100
; { WriteTime[i]=0x0f;
sbi 0x15,0
.dbline 101
; }
mov R22,R20
.dbline 102
; if(WriteTime[i]==0x19)
clr R10
rjmp L18
L15:
.dbline 103
; {WriteTime[i]=0x1f;
.dbline 104
; }
ldi R16,1
mov R17,R10
rcall lsl8
mov R2,R22
and R2,R16
breq L19
.dbline 105
; if(WriteTime[i]==0x29)
sbi 0x15,2
rjmp L20
L19:
.dbline 107
; {WriteTime[i]=0x2f;
; }
cbi 0x15,2
L20:
.dbline 108
nop
.dbline 109
nop
.dbline 110
sbi 0x15,1
.dbline 111
cbi 0x15,1
.dbline 112
L16:
.dbline 102
inc R10
L18:
.dbline 102
mov R24,R10
cpi R24,8
brlo L15
.dbline 113
; if(WriteTime[i]==0x39)
; {WriteTime[i]=0x3f;
; }
; if(WriteTime[i]==0x49)
; {WriteTime[i]=0x4f;
; }
cbi 0x14,2
.dbline 115
; if(WriteTime[i]==0x59)
; {WriteTime[i]=0x00;
clr R10
rjmp L24
L21:
.dbline 116
; }
.dbline 117
; else
in R20,0x13
andi R20,4
.dbline 118
; WriteTime[i]=WriteTime[i]+1;
cpi R20,4
brne L25
.dbline 119
; }
ldi R16,1
mov R17,R10
rcall lsl8
or R22,R16
rjmp L26
L25:
.dbline 121
; //ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
; // 设置分钟,秒 减法程序
ldi R16,1
mov R17,R10
rcall lsl8
mov R2,R16
com R2
and R22,R2
L26:
.dbline 122
nop
.dbline 123
nop
.dbline 124
sbi 0x15,1
.dbline 125
cbi 0x15,1
.dbline 126
L22:
.dbline 115
inc R10
L24:
.dbline 115
mov R24,R10
cpi R24,8
brlo L21
.dbline 127
; //ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
; void SubForSET(int i)
; {
; if(WriteTime[i]==0x00)
; { WriteTime[i]=0x5a;
; }
sbi 0x14,2
.dbline 128
; if(WriteTime[i]==0x10)
cbi 0x15,1
.dbline 129
; {WriteTime[i]=0x0a;
cbi 0x15,0
.dbline 130
; }
mov R16,R22
.dbline -2
L14:
rcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r k 20 c
.dbsym r temp 22 c
.dbsym r i 10 c
.dbsym r addr 20 c
.dbend
.dbfunc e DataFenli _DataFenli fV
.even
_DataFenli::
.dbline -1
.dbline 134
; if(WriteTime[i]==0x20)
; {WriteTime[i]=0x1a;
; }
; if(WriteTime[i]==0x30)
.dbline 135
; {WriteTime[i]=0x2a;
lds R24,_second
andi R24,15
sts _secondtl,R24
.dbline 136
; }
lds R24,_second
swap R24
andi R24,#0x0F
sts _secondth,R24
.dbline 138
; if(WriteTime[i]==0x40)
; {WriteTime[i]=0x3a;
lds R24,_minute
andi R24,15
sts _minutetl,R24
.dbline 139
; }
lds R24,_minute
swap R24
andi R24,#0x0F
sts _minuteth,R24
.dbline 141
; if(WriteTime[i]==0x50)
; {WriteTime[i]=0x49;
lds R24,_hour
andi R24,15
sts _hourtl,R24
.dbline 142
; }
lds R24,_hour
swap R24
andi R24,#0x0F
sts _hourth,R24
.dbline 144
; else
; WriteTime[i]=WriteTime[i]-1;
lds R24,_date
andi R24,15
sts _datetl,R24
.dbline 145
; }
lds R24,_date
swap R24
andi R24,#0x0F
sts _dateth,R24
.dbline 147
;
; /*cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc*/
lds R24,_month
andi R24,15
sts _monthtl,R24
.dbline 148
; //设置小时加减法子程序
lds R24,_month
swap R24
andi R24,#0x0F
sts _monthth,R24
.dbline 150
; //ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
; //加法
lds R24,_year
andi R24,15
sts _yeartl,R24
.dbline 151
; void PlusHour(int i)
lds R24,_year
swap R24
andi R24,#0x0F
sts _yearth,R24
.dbline -2
L27:
.dbline 0 ; func end
ret
.dbend
.dbfunc e DS1302_ReadTime _DS1302_ReadTime fV
.even
_DS1302_ReadTime::
.dbline -1
.dbline 157
; {
; if(WriteTime[i]==0x09)
; { WriteTime[i]=0x0f;
; }
; if(WriteTime[i]==0x19)
; {WriteTime[i]=0x1f;
.dbline 158
; }
ldi R16,129
rcall _DS1302_Read
sts _second,R16
.dbline 159
; if(WriteTime[i]==0x23)
ldi R16,131
rcall _DS1302_Read
sts _minute,R16
.dbline 160
; {WriteTime[i]=0x00;
ldi R16,133
rcall _DS1302_Read
sts _hour,R16
.dbline 161
; }
ldi R16,135
rcall _DS1302_Read
sts _date,R16
.dbline 162
; else
ldi R16,137
rcall _DS1302_Read
sts _month,R16
.dbline 163
; WriteTime[i]=WriteTime[i]+1;
ldi R16,141
rcall _DS1302_Read
sts _year,R16
.dbline 170
; }
; //减法
; void SubHour(int i)
; {
; if(WriteTime[i]==0x00)
; { WriteTime[i]=0x24;
; }
rcall _DataFenli
.dbline -2
L28:
.dbline 0 ; func end
ret
.dbend
.dbfunc e DS1302_WriteTime _DS1302_WriteTime fV
; time -> R20,R21
; ddr -> R22,R23
.even
_DS1302_WriteTime::
rcall push_gset2
.dbline -1
.dbline 176
; if(WriteTime[i]==0x10)
; {WriteTime[i]=0x0a;
; }
; if(WriteTime[i]==0x20)
; {WriteTime[i]=0x19;
; }
.dbline 177
; else
ldi R22,<_WriteAddress
ldi R23,>_WriteAddress
.dbline 178
; WriteTime[i]=WriteTime[i]-1;
ldi R20,<_WriteTime
ldi R21,>_WriteTime
rjmp L31
L30:
.dbline 180
.dbline 181
movw R30,R20
ldd R18,z+0
movw R30,R22
ldd R16,z+0
rcall _DS1302_WriteT
.dbline 182
subi R22,255 ; offset = 1
sbci R23,255
.dbline 183
subi R20,255 ; offset = 1
sbci R21,255
.dbline 184
L31:
.dbline 179
; }
movw R30,R22
ldd R2,z+0
tst R2
brne L30
.dbline -2
L29:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r time 20 pc
.dbsym r ddr 22 pc
.dbend
.dbfile E:\biyesheji\SUCCES~1\SENDSE~1\SETPFI~2\程序/DELAY.C
.dbfunc e delay_1us _delay_1us fV
.even
_delay_1us::
.dbline -1
.dbline 5
.dbline 6
nop
.dbline -2
L33:
.dbline 0 ; func end
ret
.dbend
.dbfunc e delay_nus _delay_nus fV
; i -> R20,R21
; n -> R22,R23
.even
_delay_nus::
rcall push_gset2
movw R22,R16
.dbline -1
.dbline 10
.dbline 11
clr R20
clr R21
.dbline 12
rjmp L38
L35:
.dbline 13
rcall _delay_1us
L36:
.dbline 12
subi R20,255 ; offset = 1
sbci R21,255
L38:
.dbline 12
cp R20,R22
cpc R21,R23
brlo L35
.dbline -2
L34:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r i 20 i
.dbsym r n 22 i
.dbend
.dbfunc e delay_1ms _delay_1ms fV
; i -> R16,R17
.even
_delay_1ms::
.dbline -1
.dbline 17
.dbline 19
clr R16
clr R17
rjmp L43
L40:
.dbline 19
L41:
.dbline 19
subi R16,255 ; offset = 1
sbci R17,255
L43:
.dbline 19
cpi R16,141
ldi R30,0
cpc R17,R30
brlo L40
.dbline -2
L39:
.dbline 0 ; func end
ret
.dbsym r i 16 i
.dbend
.dbfunc e delay_nms _delay_nms fV
; i -> R20,R21
; n -> R22,R23
.even
_delay_nms::
rcall push_gset2
movw R22,R16
.dbline -1
.dbline 23
.dbline 24
clr R20
clr R21
.dbline 25
rjmp L48
L45:
.dbline 26
.dbline 27
rcall _delay_1ms
.dbline 28
L46:
.dbline 25
subi R20,255 ; offset = 1
sbci R21,255
L48:
.dbline 25
cp R20,R22
cpc R21,R23
brlo L45
.dbline -2
L44:
rcall pop_gset2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -