📄 time_8515.lis
字号:
00A0 C4DF rcall _write_data
00A2 .dbline 120
00A2 L19:
00A2 .dbline 117
00A2 4395 inc R20
00A4 L21:
00A4 .dbline 117
00A4 4032 cpi R20,32
00A6 B8F3 brlo L18
00A8 .dbline -2
00A8 L13:
00A8 00D0 rcall pop_gset2
00AA .dbline 0 ; func end
00AA 0895 ret
00AC .dbsym r i 20 c
00AC .dbsym r p 22 pc
00AC .dbend
00AC .dbfunc e InputByte _InputByte fV
00AC ; i -> R20
00AC ; CD -> R22
.even
00AC _InputByte::
00AC 00D0 rcall push_gset2
00AE 602F mov R22,R16
00B0 .dbline -1
00B0 .dbline 130
00B0 ; {
00B0 ; write_data(p[i]);
00B0 ; }
00B0 ; }
00B0 ; /************************************************
00B0 ; 函 数 名: InputByte()
00B0 ; 功 能: 串行写入1字节的数据函数
00B0 ; 输入参数: /
00B0 ; 输出参数: /
00B0 ; 描 述: PA4为数据端,PA3为时钟端,bit0在先,时钟上升沿写入。
00B0 ; ***********************************************/
00B0 ; void InputByte (uchar CD)
00B0 ; {
00B0 .dbline 132
00B0 ; uchar i;
00B0 ; for(i=0;i<8;i++)
00B0 4427 clr R20
00B2 0CC0 rjmp L26
00B4 L23:
00B4 .dbline 133
00B4 ; {
00B4 .dbline 134
00B4 ; if((CD & (1<<i))==0)
00B4 01E0 ldi R16,1
00B6 142F mov R17,R20
00B8 00D0 rcall lsl8
00BA 262E mov R2,R22
00BC 2022 and R2,R16
00BE 11F4 brne L27
00C0 .dbline 135
00C0 ; PORTA &= ~(1<<PA4); //数据端输出0
00C0 DC98 cbi 0x1b,4
00C2 01C0 rjmp L28
00C4 L27:
00C4 .dbline 137
00C4 ; else
00C4 ; PORTA |= (1<<PA4); //否则输出1
00C4 DC9A sbi 0x1b,4
00C6 L28:
00C6 .dbline 138
00C6 DB9A sbi 0x1b,3
00C8 .dbline 139
00C8 DB98 cbi 0x1b,3
00CA .dbline 140
00CA L24:
00CA .dbline 132
00CA 4395 inc R20
00CC L26:
00CC .dbline 132
00CC 4830 cpi R20,8
00CE 90F3 brlo L23
00D0 .dbline -2
00D0 L22:
00D0 00D0 rcall pop_gset2
00D2 .dbline 0 ; func end
00D2 0895 ret
00D4 .dbsym r i 20 c
00D4 .dbsym r CD 22 c
00D4 .dbend
00D4 .dbfunc e OutputByte _OutputByte fc
00D4 ; mid -> R20
00D4 ; i -> R22
.even
00D4 _OutputByte::
00D4 00D0 rcall push_gset2
00D6 .dbline -1
00D6 .dbline 150
00D6 ; PORTA |= (1<<PA3); //时钟置高,产生上升沿。
00D6 ; PORTA &= ~(1<<PA3); //时钟置低
00D6 ; }
00D6 ; }
00D6 ; /************************************************
00D6 ; 函 数 名: OutputByte
00D6 ; 功 能: 从DS1302串行读出1字节的数据函数
00D6 ; 输入参数: /
00D6 ; 输出参数: /
00D6 ; 描 述: PA4为数据端,PA3为时钟端,bit0在先,时钟下降沿读出。
00D6 ; ***********************************************/
00D6 ; uchar OutputByte (void)
00D6 ; {
00D6 .dbline 151
00D6 ; uchar i,mid=0;
00D6 4427 clr R20
00D8 .dbline 152
00D8 ; for(i=0;i<8;i++)
00D8 6627 clr R22
00DA 10C0 rjmp L33
00DC L30:
00DC .dbline 153
00DC ; {
00DC .dbline 154
00DC ; if((PINA & 0x10)==0) //操作的是PA4
00DC CC99 sbic 0x19,4
00DE 07C0 rjmp L34
00E0 .dbline 155
00E0 ; {
00E0 .dbline 156
00E0 ; mid &= ~(1<<i); //读取0
00E0 01E0 ldi R16,1
00E2 162F mov R17,R22
00E4 00D0 rcall lsl8
00E6 202E mov R2,R16
00E8 2094 com R2
00EA 4221 and R20,R2
00EC .dbline 157
00EC ; }
00EC 04C0 rjmp L35
00EE L34:
00EE .dbline 159
00EE ; else
00EE ; {
00EE .dbline 160
00EE ; mid |= (1<<i); //读取1
00EE 01E0 ldi R16,1
00F0 162F mov R17,R22
00F2 00D0 rcall lsl8
00F4 402B or R20,R16
00F6 .dbline 161
00F6 ; }
00F6 L35:
00F6 .dbline 162
00F6 DB9A sbi 0x1b,3
00F8 .dbline 163
00F8 DB98 cbi 0x1b,3
00FA .dbline 164
00FA L31:
00FA .dbline 152
00FA 6395 inc R22
00FC L33:
00FC .dbline 152
00FC 6830 cpi R22,8
00FE 70F3 brlo L30
0100 .dbline 165
0100 ; PORTA |= (1<<PA3); //时钟置高
0100 ; PORTA &= ~(1<<PA3); //时钟置低,产生下降沿
0100 ; }
0100 ; return (mid);
0100 042F mov R16,R20
0102 .dbline -2
0102 L29:
0102 00D0 rcall pop_gset2
0104 .dbline 0 ; func end
0104 0895 ret
0106 .dbsym r mid 20 c
0106 .dbsym r i 22 c
0106 .dbend
0106 .dbfunc e write_DS1302 _write_DS1302 fV
0106 ; i -> R20
.even
0106 _write_DS1302::
0106 00D0 rcall push_gset1
0108 .dbline -1
0108 .dbline 176
0108 ; }
0108 ; /************************************************
0108 ; 函 数 名: write_DS1302
0108 ; 功 能: 给DS1302写入上电数据,置需要设定的时钟值
0108 ; 输入参数: /
0108 ; 输出参数: /
0108 ; 描 述: 单字节和多字节操作模式都用了。
0108 ; 数据格式为:秒 分 时 日 月 星期 年 写保护字节
0108 ; ***********************************************/
0108 ; void write_DS1302 (void)
0108 ; {
0108 .dbline 179
0108 ; uchar i;
0108 ;
0108 ; DDRA |= (1<<DDA5)|(1<<DDA4)|(1<<DDA3); //复位,数据和时钟脚都为输出
0108 8AB3 in R24,0x1a
010A 8863 ori R24,56
010C 8ABB out 0x1a,R24
010E .dbline 180
010E ; PORTA &= ~(1<<PA5); //RST=0
010E DD98 cbi 0x1b,5
0110 .dbline 181
0110 ; PORTA &= ~(1<<PA3); //CLK=0
0110 DB98 cbi 0x1b,3
0112 .dbline 182
0112 ; PORTA |= (1<<PA5); //RST=1
0112 DD9A sbi 0x1b,5
0114 .dbline 183
0114 ; NOP();
0114 0000 nop
0116 .dbline 184
0116 ; InputByte(0x8e); //写保护命令字节的地址
0116 0EE8 ldi R16,142
0118 C9DF rcall _InputByte
011A .dbline 185
011A ; InputByte(0x00); //解除写保护命令
011A 0027 clr R16
011C C7DF rcall _InputByte
011E .dbline 186
011E ; PORTA &= ~(1<<PA5); //RST=0
011E DD98 cbi 0x1b,5
0120 .dbline 187
0120 ; PORTA &= ~(1<<PA3); //CLK=0
0120 DB98 cbi 0x1b,3
0122 .dbline 188
0122 ; PORTA |= (1<<PA5); //RST=1
0122 DD9A sbi 0x1b,5
0124 .dbline 189
0124 ; NOP();
0124 0000 nop
0126 .dbline 190
0126 ; InputByte(0b10010000); //涓流充电寄存器的地址
0126 00E9 ldi R16,144
0128 C1DF rcall _InputByte
012A .dbline 191
012A ; InputByte(0b10101010); //设置涓流充电
012A 0AEA ldi R16,170
012C BFDF rcall _InputByte
012E .dbline 192
012E ; PORTA &= ~(1<<PA5); //RST=0
012E DD98 cbi 0x1b,5
0130 .dbline 193
0130 ; PORTA &= ~(1<<PA3); //CLK=0
0130 DB98 cbi 0x1b,3
0132 .dbline 194
0132 ; PORTA |= (1<<PA5); //RST=1
0132 DD9A sbi 0x1b,5
0134 .dbline 195
0134 ; NOP();
0134 0000 nop
0136 .dbline 196
0136 ; InputByte(0xbe); //多字节写操作命令
0136 0EEB ldi R16,190
0138 B9DF rcall _InputByte
013A .dbline 197
013A ; for (i=0;i<8;i++)
013A 4427 clr R20
013C 09C0 rjmp L40
013E L37:
013E .dbline 198
013E .dbline 199
013E 80E0 ldi R24,<_buf_write
0140 90E0 ldi R25,>_buf_write
0142 E42F mov R30,R20
0144 FF27 clr R31
0146 E80F add R30,R24
0148 F91F adc R31,R25
014A 0081 ldd R16,z+0
014C AFDF rcall _InputByte
014E .dbline 200
014E L38:
014E .dbline 197
014E 4395 inc R20
0150 L40:
0150 .dbline 197
0150 4830 cpi R20,8
0152 A8F3 brlo L37
0154 .dbline 201
0154 ; {
0154 ; InputByte(buf_write[i]);
0154 ; }
0154 ; PORTA &= ~(1<<PA5); //RST=0
0154 DD98 cbi 0x1b,5
0156 .dbline -2
0156 L36:
0156 00D0 rcall pop_gset1
0158 .dbline 0 ; func end
0158 0895 ret
015A .dbsym r i 20 c
015A .dbend
015A .dbfunc e read_DS1302 _read_DS1302 fV
015A ; i -> R20
.even
015A _read_DS1302::
015A 00D0 rcall push_gset1
015C .dbline -1
015C .dbline 212
015C ; }
015C ; /************************************************
015C ; 函 数 名: read_DS1302
015C ; 功 能: 读取DS1302的所有时间数据
015C ; 输入参数: /
015C ; 输出参数: /
015C ; 描 述: 使用多字节方式。
015C ; 数据格式为:秒 分 时 日 月 星期 年
015C ; ***********************************************/
015C ; void read_DS1302 (void)
015C ; {
015C .dbline 214
015C ; uchar i;
015C ; DDRA |= (1<<DDA5)|(1<<DDA3); //复位和时钟脚都为输出
015C 8AB3 in R24,0x1a
015E 8862 ori R24,40
0160 8ABB out 0x1a,R24
0162 .dbline 215
0162 ; PORTA &= ~(1<<PA5); //RST=0
0162 DD98 cbi 0x1b,5
0164 .dbline 216
0164 ; PORTA &= ~(1<<PA3); //CLK=0
0164 DB98 cbi 0x1b,3
0166 .dbline 217
0166 ; PORTA |= (1<<PA5); //RST=1
0166 DD9A sbi 0x1b,5
0168 .dbline 218
0168 ; DDRA |= (1<<DDA4); //数据脚为输出
0168 D49A sbi 0x1a,4
016A .dbline 219
016A ; NOP();
016A 0000 nop
016C .dbline 220
016C ; InputByte(0xbf); //多字节读命令
016C 0FEB ldi R16,191
016E 9EDF rcall _InputByte
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -