📄 ds1302.lis
字号:
005E .dbline 94
005E ; IO_CLR;
005E 9698 cbi 0x12,6
0060 .dbline 95
0060 ; }
0060 L20:
0060 .dbline 96
0060 959A sbi 0x12,5
0062 .dbline 97
0062 9598 cbi 0x12,5
0064 .dbline 98
0064 0695 lsr R16
0066 .dbline 99
0066 L16:
0066 .dbline 89
0066 6395 inc R22
0068 L18:
0068 .dbline 89
0068 6830 cpi R22,8
006A A8F3 brlo L15
006C .dbline 102
006C ; SCK_SET;
006C ; SCK_CLR;
006C ; addr = addr >> 1;
006C ; }
006C ;
006C ; /*输出数据:temp*/
006C ; IO_IN;
006C 8E98 cbi 0x11,6
006E .dbline 103
006E 6627 clr R22
0070 09C0 xjmp L24
0072 L21:
0072 .dbline 103
0072 ; for (i = 0; i < 8; i ++) {
0072 .dbline 104
0072 ; temp = temp >> 1;
0072 4695 lsr R20
0074 .dbline 105
0074 ; if (IO_R) {
0074 869B sbis 0x10,6
0076 02C0 rjmp L25
0078 .dbline 105
0078 .dbline 106
0078 ; temp |= 0x80;
0078 4068 ori R20,128
007A .dbline 107
007A ; }
007A 01C0 xjmp L26
007C L25:
007C .dbline 108
007C ; else {
007C .dbline 109
007C ; temp &= 0x7F;
007C 4F77 andi R20,127
007E .dbline 110
007E ; }
007E L26:
007E .dbline 111
007E 959A sbi 0x12,5
0080 .dbline 112
0080 9598 cbi 0x12,5
0082 .dbline 113
0082 L22:
0082 .dbline 103
0082 6395 inc R22
0084 L24:
0084 .dbline 103
0084 6830 cpi R22,8
0086 A8F3 brlo L21
0088 .dbline 115
0088 ; SCK_SET;
0088 ; SCK_CLR;
0088 ; }
0088 ;
0088 ; RST_CLR; /*停止DS1302总线*/
0088 9798 cbi 0x12,7
008A .dbline 116
008A ; return temp;
008A 042F mov R16,R20
008C .dbline -2
008C L14:
008C 0E940000 xcall pop_gset2
0090 .dbline 0 ; func end
0090 0895 ret
0092 .dbsym r temp 20 c
0092 .dbsym r i 22 c
0092 .dbsym r addr 16 c
0092 .dbend
0092 .dbfunc e ds1302_write_time _ds1302_write_time fV
.even
0092 _ds1302_write_time::
0092 .dbline -1
0092 .dbline 120
0092 ; }
0092 ;
0092 ; /*向DS302写入时钟数据*/
0092 ; void ds1302_write_time(void) {
0092 .dbline 122
0092 ;
0092 ; ds1302_write_byte(ds1302_control_add,0x00); //关闭写保护
0092 2227 clr R18
0094 0EE8 ldi R16,142
0096 B4DF xcall _ds1302_write_byte
0098 .dbline 123
0098 ; ds1302_write_byte(ds1302_sec_add,0x80); //暂停
0098 20E8 ldi R18,128
009A 00E8 ldi R16,128
009C B1DF xcall _ds1302_write_byte
009E .dbline 125
009E ; //ds1302_write_byte(ds1302_charger_add,0xa9); //涓流充电
009E ; ds1302_write_byte(ds1302_year_add,time_buf[1]); //年
009E 20910100 lds R18,_time_buf+1
00A2 0CE8 ldi R16,140
00A4 ADDF xcall _ds1302_write_byte
00A6 .dbline 126
00A6 ; ds1302_write_byte(ds1302_month_add,time_buf[2]); //月
00A6 20910200 lds R18,_time_buf+2
00AA 08E8 ldi R16,136
00AC A9DF xcall _ds1302_write_byte
00AE .dbline 127
00AE ; ds1302_write_byte(ds1302_date_add,time_buf[3]); //日
00AE 20910300 lds R18,_time_buf+3
00B2 06E8 ldi R16,134
00B4 A5DF xcall _ds1302_write_byte
00B6 .dbline 128
00B6 ; ds1302_write_byte(ds1302_day_add,time_buf[7]); //周
00B6 20910700 lds R18,_time_buf+7
00BA 0AE8 ldi R16,138
00BC A1DF xcall _ds1302_write_byte
00BE .dbline 129
00BE ; ds1302_write_byte(ds1302_hr_add,time_buf[4]); //时
00BE 20910400 lds R18,_time_buf+4
00C2 04E8 ldi R16,132
00C4 9DDF xcall _ds1302_write_byte
00C6 .dbline 130
00C6 ; ds1302_write_byte(ds1302_min_add,time_buf[5]); //分
00C6 20910500 lds R18,_time_buf+5
00CA 02E8 ldi R16,130
00CC 99DF xcall _ds1302_write_byte
00CE .dbline 131
00CE ; ds1302_write_byte(ds1302_sec_add,time_buf[6]); //秒
00CE 20910600 lds R18,_time_buf+6
00D2 00E8 ldi R16,128
00D4 95DF xcall _ds1302_write_byte
00D6 .dbline 132
00D6 ; ds1302_write_byte(ds1302_day_add,time_buf[7]); //周
00D6 20910700 lds R18,_time_buf+7
00DA 0AE8 ldi R16,138
00DC 91DF xcall _ds1302_write_byte
00DE .dbline 133
00DE ; ds1302_write_byte(ds1302_control_add,0x80); //打开写保护
00DE 20E8 ldi R18,128
00E0 0EE8 ldi R16,142
00E2 8EDF xcall _ds1302_write_byte
00E4 .dbline -2
00E4 L27:
00E4 .dbline 0 ; func end
00E4 0895 ret
00E6 .dbend
00E6 .dbfunc e ds1302_read_time _ds1302_read_time fV
.even
00E6 _ds1302_read_time::
00E6 .dbline -1
00E6 .dbline 137
00E6 ; }
00E6 ;
00E6 ; /*从DS302读出时钟数据*/
00E6 ; void ds1302_read_time(void) {
00E6 .dbline 139
00E6 ;
00E6 ; time_buf[1]=ds1302_read_byte(ds1302_year_add); //年
00E6 0CE8 ldi R16,140
00E8 AFDF xcall _ds1302_read_byte
00EA 00930100 sts _time_buf+1,R16
00EE .dbline 140
00EE ; time_buf[2]=ds1302_read_byte(ds1302_month_add); //月
00EE 08E8 ldi R16,136
00F0 ABDF xcall _ds1302_read_byte
00F2 00930200 sts _time_buf+2,R16
00F6 .dbline 141
00F6 ; time_buf[3]=ds1302_read_byte(ds1302_date_add); //日
00F6 06E8 ldi R16,134
00F8 A7DF xcall _ds1302_read_byte
00FA 00930300 sts _time_buf+3,R16
00FE .dbline 142
00FE ; time_buf[4]=ds1302_read_byte(ds1302_hr_add); //时
00FE 04E8 ldi R16,132
0100 A3DF xcall _ds1302_read_byte
0102 00930400 sts _time_buf+4,R16
0106 .dbline 143
0106 ; time_buf[5]=ds1302_read_byte(ds1302_min_add); //分
0106 02E8 ldi R16,130
0108 9FDF xcall _ds1302_read_byte
010A 00930500 sts _time_buf+5,R16
010E .dbline 144
010E ; time_buf[6]=(ds1302_read_byte(ds1302_sec_add))&0x7F;//秒
010E 00E8 ldi R16,128
0110 9BDF xcall _ds1302_read_byte
0112 802F mov R24,R16
0114 8F77 andi R24,127
0116 80930600 sts _time_buf+6,R24
011A .dbline 145
011A ; time_buf[7]=ds1302_read_byte(ds1302_day_add); //周
011A 0AE8 ldi R16,138
011C 95DF xcall _ds1302_read_byte
011E 00930700 sts _time_buf+7,R16
0122 .dbline -2
0122 L36:
0122 .dbline 0 ; func end
0122 0895 ret
0124 .dbend
0124 .dbfunc e ds1302_init _ds1302_init fV
.even
0124 _ds1302_init::
0124 .dbline -1
0124 .dbline 149
0124 ; }
0124 ;
0124 ; /*DS302初始化函数*/
0124 ; void ds1302_init(void) {
0124 .dbline 151
0124 ;
0124 ; RST_CLR; /*RST脚置低*/
0124 9798 cbi 0x12,7
0126 .dbline 152
0126 ; SCK_CLR; /*SCK脚置低*/
0126 9598 cbi 0x12,5
0128 .dbline 153
0128 ; RST_OUT; /*RST脚设置为输出*/
0128 8F9A sbi 0x11,7
012A .dbline 154
012A ; SCK_OUT; /*SCK脚设置为输出*/
012A 8D9A sbi 0x11,5
012C .dbline -2
012C L44:
012C .dbline 0 ; func end
012C 0895 ret
012E .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -