📄 rtc8025.lis
字号:
01E8 ; //功 能: 读时间数据
01E8 ; //入口参数: 存放的地方,读的地址,长度
01E8 ; //出口参数: 返回1错误,0成功
01E8 ; //日 期: 2005-07-20 覃道堂
01E8 ; //==========================================================
01E8 ; unsigned char Read_Time_Data(unsigned char *Frame,
01E8 ; unsigned char Address,
01E8 ; unsigned char Len)
01E8 ; {
01E8 .dbline 203
01E8 ; unsigned char i;
01E8 ;
01E8 ; Send_Start();
01E8 13DF xcall _Send_Start
01EA .dbline 204
01EA ; Write_Byte(0x64); //写数据命令;
01EA 04E6 ldi R16,100
01EC CADF xcall _Write_Byte
01EE .dbline 205
01EE ; if(Receive_ACK())
01EE 5BDF xcall _Receive_ACK
01F0 0023 tst R16
01F2 11F0 breq L35
01F4 .dbline 206
01F4 ; return 1;
01F4 01E0 ldi R16,1
01F6 23C0 xjmp L34
01F8 L35:
01F8 .dbline 207
01F8 ; Write_Byte(Address); //写入要读的首地址
01F8 042F mov R16,R20
01FA C3DF xcall _Write_Byte
01FC .dbline 208
01FC ; if(Receive_ACK())
01FC 54DF xcall _Receive_ACK
01FE 0023 tst R16
0200 11F0 breq L37
0202 .dbline 209
0202 ; return 1;
0202 01E0 ldi R16,1
0204 1CC0 xjmp L34
0206 L37:
0206 .dbline 210
0206 ; Send_Start();
0206 04DF xcall _Send_Start
0208 .dbline 211
0208 ; Write_Byte(0x65); //读数据命令
0208 05E6 ldi R16,101
020A BBDF xcall _Write_Byte
020C .dbline 212
020C ; if(Receive_ACK())
020C 4CDF xcall _Receive_ACK
020E 0023 tst R16
0210 11F0 breq L39
0212 .dbline 213
0212 ; return 1;
0212 01E0 ldi R16,1
0214 14C0 xjmp L34
0216 L39:
0216 .dbline 214
0216 ; for(i = 0;i < Len;i ++)
0216 4427 clr R20
0218 0EC0 xjmp L44
021A L41:
021A .dbline 215
021A ; {
021A .dbline 216
021A ; Frame[i] = Read_Byte();
021A 92DF xcall _Read_Byte
021C E42F mov R30,R20
021E FF27 clr R31
0220 EA0D add R30,R10
0222 FB1D adc R31,R11
0224 0083 std z+0,R16
0226 .dbline 217
0226 ; if(i == (Len - 1))
0226 862F mov R24,R22
0228 8150 subi R24,1
022A 4817 cp R20,R24
022C 11F4 brne L45
022E .dbline 218
022E ; Send_No_ACK();
022E 6DDF xcall _Send_No_ACK
0230 01C0 xjmp L46
0232 L45:
0232 .dbline 220
0232 ; else
0232 ; Send_ACK();
0232 51DF xcall _Send_ACK
0234 L46:
0234 .dbline 221
0234 L42:
0234 .dbline 214
0234 4395 inc R20
0236 L44:
0236 .dbline 214
0236 4617 cp R20,R22
0238 80F3 brlo L41
023A .dbline 222
023A ; }
023A ; Send_Stop();
023A 11DF xcall _Send_Stop
023C .dbline 223
023C ; return 0;
023C 0027 clr R16
023E .dbline -2
023E L34:
023E 0E940000 xcall pop_gset3
0242 .dbline 0 ; func end
0242 0895 ret
0244 .dbsym r i 20 c
0244 .dbsym r Len 22 c
0244 .dbsym r Address 20 c
0244 .dbsym r Frame 10 pc
0244 .dbend
0244 .dbfunc e Write_Time_Data _Write_Time_Data fc
0244 ; i -> R20
0244 ; Len -> R22
0244 ; Address -> R20
0244 ; Frame -> R10,R11
.even
0244 _Write_Time_Data::
0244 0E940000 xcall push_gset3
0248 422F mov R20,R18
024A 5801 movw R10,R16
024C 6E81 ldd R22,y+6
024E .dbline -1
024E .dbline 237
024E ; }
024E ; //==========================================================
024E ; //函 数: unsigned char Write_Time_Data(unsigned char *Frame,
024E ; // unsigned char Address,
024E ; // unsigned char Len)
024E ; //功 能: 写时间和数据
024E ; //入口参数: 写入数据,地址,长度
024E ; //出口参数: 返回1错误,0成功
024E ; //日 期: 2005-07-20 覃道堂
024E ; //==========================================================
024E ; unsigned char Write_Time_Data(unsigned char *Frame,
024E ; unsigned char Address,
024E ; unsigned char Len)
024E ; {
024E .dbline 240
024E ; unsigned char i;
024E ;
024E ; Send_Start();
024E E0DE xcall _Send_Start
0250 .dbline 241
0250 ; Write_Byte(0x64); //写数据命令;
0250 04E6 ldi R16,100
0252 97DF xcall _Write_Byte
0254 .dbline 242
0254 ; if(Receive_ACK())
0254 28DF xcall _Receive_ACK
0256 0023 tst R16
0258 11F0 breq L48
025A .dbline 243
025A ; return 1;
025A 01E0 ldi R16,1
025C 19C0 xjmp L47
025E L48:
025E .dbline 244
025E ; Write_Byte(Address); //写入要读的首地址
025E 042F mov R16,R20
0260 90DF xcall _Write_Byte
0262 .dbline 245
0262 ; if(Receive_ACK())
0262 21DF xcall _Receive_ACK
0264 0023 tst R16
0266 11F0 breq L50
0268 .dbline 246
0268 ; return 1;
0268 01E0 ldi R16,1
026A 12C0 xjmp L47
026C L50:
026C .dbline 247
026C ; for(i = 0;i < Len;i ++)
026C 4427 clr R20
026E 0CC0 xjmp L55
0270 L52:
0270 .dbline 248
0270 ; {
0270 .dbline 249
0270 ; Write_Byte(Frame[i]);
0270 E42F mov R30,R20
0272 FF27 clr R31
0274 EA0D add R30,R10
0276 FB1D adc R31,R11
0278 0081 ldd R16,z+0
027A 83DF xcall _Write_Byte
027C .dbline 250
027C ; if(Receive_ACK())
027C 14DF xcall _Receive_ACK
027E 0023 tst R16
0280 11F0 breq L56
0282 .dbline 251
0282 ; return 1;
0282 01E0 ldi R16,1
0284 05C0 xjmp L47
0286 L56:
0286 .dbline 252
0286 L53:
0286 .dbline 247
0286 4395 inc R20
0288 L55:
0288 .dbline 247
0288 4617 cp R20,R22
028A 90F3 brlo L52
028C .dbline 253
028C ; }
028C ; Send_Stop();
028C E8DE xcall _Send_Stop
028E .dbline 254
028E ; return 0;
028E 0027 clr R16
0290 .dbline -2
0290 L47:
0290 0E940000 xcall pop_gset3
0294 .dbline 0 ; func end
0294 0895 ret
0296 .dbsym r i 20 c
0296 .dbsym r Len 22 c
0296 .dbsym r Address 20 c
0296 .dbsym r Frame 10 pc
0296 .dbend
0296 .dbfunc e Reset_R8025 _Reset_R8025 fV
0296 ; Read_COL -> y+1
0296 ; i -> R20,R21
.even
0296 _Reset_R8025::
0296 0E940000 xcall push_gset1
029A 2397 sbiw R28,3
029C .dbline -1
029C .dbline 264
029C ; }
029C ; //==========================================================
029C ; //函 数: void Reset_R8025(void)
029C ; //功 能: 复位
029C ; //入口参数: 无
029C ; //出口参数: 无
029C ; //日 期: 2005-07-20 覃道堂
029C ; //==========================================================
029C ; void Reset_R8025(void)
029C ; {
029C .dbline 268
029C ; unsigned int i;
029C ; unsigned char Read_COL[2];
029C ;
029C ; Read_COL[0] = 0x60;
029C 80E6 ldi R24,96
029E 8983 std y+1,R24
02A0 .dbline 269
02A0 ; Read_COL[1] = 0x20;
02A0 80E2 ldi R24,32
02A2 8A83 std y+2,R24
02A4 .dbline 270
02A4 ; for(i = 0;i < 3;i ++)
02A4 4427 clr R20
02A6 5527 clr R21
02A8 0CC0 xjmp L63
02AA L60:
02AA .dbline 271
02AA ; {
02AA .dbline 272
02AA ; if(Write_Time_Data(Read_COL,Control_Address,2) == 0)
02AA 82E0 ldi R24,2
02AC 8883 std y+0,R24
02AE 20EE ldi R18,224
02B0 8E01 movw R16,R28
02B2 0F5F subi R16,255 ; offset = 1
02B4 1F4F sbci R17,255
02B6 C6DF xcall _Write_Time_Data
02B8 0023 tst R16
02BA 09F4 brne L64
02BC .dbline 273
02BC ; break;
02BC 06C0 xjmp L62
02BE L64:
02BE .dbline 274
02BE L61:
02BE .dbline 270
02BE 4F5F subi R20,255 ; offset = 1
02C0 5F4F sbci R21,255
02C2 L63:
02C2 .dbline 270
02C2 4330 cpi R20,3
02C4 E0E0 ldi R30,0
02C6 5E07 cpc R21,R30
02C8 80F3 brlo L60
02CA L62:
02CA .dbline 275
02CA ; }
02CA ; for(i = 0;i < 30000;i ++)
02CA 4427 clr R20
02CC 5527 clr R21
02CE 03C0 xjmp L69
02D0 L66:
02D0 .dbline 276
02D0 0000 nop
02D2 L67:
02D2 .dbline 275
02D2 4F5F subi R20,255 ; offset = 1
02D4 5F4F sbci R21,255
02D6 L69:
02D6 .dbline 275
02D6 4033 cpi R20,48
02D8 E5E7 ldi R30,117
02DA 5E07 cpc R21,R30
02DC C8F3 brlo L66
02DE .dbline -2
02DE L58:
02DE 2396 adiw R28,3
02E0 0E940000 xcall pop_gset1
02E4 .dbline 0 ; func end
02E4 0895 ret
02E6 .dbsym l Read_COL 1 A[2:2]c
02E6 .dbsym r i 20 i
02E6 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -