📄 display_board3.0.lis
字号:
0250 ;
0250 ; /****************************************
0250 ; 器件初始化函数
0250 ; ****************************************/
0250 ; void device_int(void)
0250 ; {
0250 .dbline 212
0250 ; CLI();
0250 F894 cli
0252 .dbline 213
0252 ; port_int();
0252 C2DF xcall _port_int
0254 .dbline 214
0254 ; timer_int();
0254 D1DF xcall _timer_int
0256 .dbline 215
0256 ; exit_int();
0256 DCDF xcall _exit_int
0258 .dbline 216
0258 ; uart_int();
0258 E0DF xcall _uart_int
025A .dbline 217
025A ; SPI_MasterInit();
025A EADF xcall _SPI_MasterInit
025C .dbline 218
025C ; twi_init();
025C EEDF xcall _twi_init
025E .dbline 219
025E ; SEI();
025E 7894 sei
0260 .dbline -2
0260 .dbline 220
0260 ; }
0260 L46:
0260 .dbline 0 ; func end
0260 0895 ret
0262 .dbend
0262 .dbfunc e uart_TX _uart_TX fV
0262 ; data -> R16
.even
0262 _uart_TX::
0262 .dbline -1
0262 .dbline 225
0262 ; /****************************************
0262 ; 串口收发数据
0262 ; ****************************************/
0262 ; void uart_TX(unsigned char data)
0262 ; {
0262 .dbline 226
0262 ; UCSRA |=0X40; //标志清零
0262 5E9A sbi 0xb,6
0264 .dbline 227
0264 ; UDR =data;
0264 0CB9 out 0xc,R16
0266 .dbline -2
0266 .dbline 228
0266 ; }
0266 L47:
0266 .dbline 0 ; func end
0266 0895 ret
0268 .dbsym r data 16 c
0268 .dbend
0268 .dbfunc e uart_time_out _uart_time_out fV
.even
0268 _uart_time_out::
0268 .dbline -1
0268 .dbline 233
0268 ; //***************
0268 ; //传输超时处理,当time_out_ms大于设定值的时候,等待等待20S,并且
0268 ; //一直发送标志符号,超过20S以后,进行错误处理
0268 ; void uart_time_out(void)
0268 ; {
0268 .dbline 234
0268 ; time_out_ms++;
0268 80912C00 lds R24,_time_out_ms
026C 90912D00 lds R25,_time_out_ms+1
0270 0196 adiw R24,1
0272 90932D00 sts _time_out_ms+1,R25
0276 80932C00 sts _time_out_ms,R24
027A .dbline 235
027A ; if (HeadEN ==0 && FileEnd ==0 && time_out_ms >=800 )
027A 20902700 lds R2,_HeadEN
027E 2220 tst R2
0280 61F5 brne L49
0282 20902500 lds R2,_FileEnd
0286 2220 tst R2
0288 41F5 brne L49
028A 8032 cpi R24,32
028C E3E0 ldi R30,3
028E 9E07 cpc R25,R30
0290 20F1 brlo L49
0292 .dbline 236
0292 ; {
0292 .dbline 237
0292 ; if(sys_cont ==0) //秒记时
0292 20901D00 lds R2,_sys_cont
0296 30901E00 lds R3,_sys_cont+1
029A 2220 tst R2
029C 99F4 brne L51
029E 3320 tst R3
02A0 89F4 brne L51
02A2 X1:
02A2 .dbline 238
02A2 ; {
02A2 .dbline 239
02A2 ; time_out_s++;
02A2 80912E00 lds R24,_time_out_s
02A6 8F5F subi R24,255 ; addi 1
02A8 80932E00 sts _time_out_s,R24
02AC .dbline 240
02AC ; if (time_out_s ==20) //结束标志
02AC 8431 cpi R24,20
02AE 51F4 brne L53
02B0 .dbline 241
02B0 ; {
02B0 .dbline 242
02B0 ; time_out_ms=1; //闲置标志
02B0 81E0 ldi R24,1
02B2 90E0 ldi R25,0
02B4 90932D00 sts _time_out_ms+1,R25
02B8 80932C00 sts _time_out_ms,R24
02BC .dbline 243
02BC ; HeadEN=1;
02BC 80932700 sts _HeadEN,R24
02C0 .dbline 244
02C0 ; FileEnd=1;
02C0 80932500 sts _FileEnd,R24
02C4 .dbline 246
02C4 ; //进行错误处理,并要跳出此结构体
02C4 ; {/**********/}
02C4 .dbline 246
02C4 .dbline 247
02C4 ; }
02C4 L53:
02C4 .dbline 248
02C4 ; }
02C4 L51:
02C4 .dbline 249
02C4 ; uart_TX(0xAA); //重复发送标志位
02C4 0AEA ldi R16,170
02C6 CDDF xcall _uart_TX
02C8 .dbline 250
02C8 ; time_out_ms--;
02C8 80912C00 lds R24,_time_out_ms
02CC 90912D00 lds R25,_time_out_ms+1
02D0 0197 sbiw R24,1
02D2 90932D00 sts _time_out_ms+1,R25
02D6 80932C00 sts _time_out_ms,R24
02DA .dbline 251
02DA ; }
02DA L49:
02DA .dbline 252
02DA 80912C00 lds R24,_time_out_ms
02DE 90912D00 lds R25,_time_out_ms+1
02E2 883E cpi R24,232
02E4 E3E0 ldi R30,3
02E6 9E07 cpc R25,R30
02E8 31F4 brne L55
02EA .dbline 253
02EA 81E0 ldi R24,1
02EC 90E0 ldi R25,0
02EE 90932D00 sts _time_out_ms+1,R25
02F2 80932C00 sts _time_out_ms,R24
02F6 L55:
02F6 .dbline -2
02F6 .dbline 254
02F6 ; if (time_out_ms ==1000)
02F6 ; time_out_ms=1; //1 表示空闲状态
02F6 ; }
02F6 L48:
02F6 .dbline 0 ; func end
02F6 0895 ret
02F8 .dbend
02F8 .dbfunc e twi_send _twi_send fV
02F8 ; data -> R20
.even
02F8 _twi_send::
02F8 0E940000 xcall push_gset1
02FC 402F mov R20,R16
02FE .dbline -1
02FE .dbline 259
02FE ; /***************************************************
02FE ; I2C送数据
02FE ; ***************************************************/
02FE ; void twi_send(char data)
02FE ; {
02FE L58:
02FE .dbline 261
02FE ; start:
02FE ; I2C_TIME_OUT =0;
02FE 2224 clr R2
0300 3324 clr R3
0302 30923000 sts _I2C_TIME_OUT+1,R3
0306 20922F00 sts _I2C_TIME_OUT,R2
030A .dbline 262
030A ; TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
030A 84EA ldi R24,164
030C 86BF out 0x36,R24
030E 0CC0 xjmp L60
0310 L59:
0310 .dbline 264
0310 ; while (!(TWCR & (1<<TWINT)))
0310 ; {
0310 .dbline 265
0310 ; if(I2C_TIME_OUT >1000)
0310 88EE ldi R24,1000
0312 93E0 ldi R25,3
0314 20902F00 lds R2,_I2C_TIME_OUT
0318 30903000 lds R3,_I2C_TIME_OUT+1
031C 8215 cp R24,R2
031E 9305 cpc R25,R3
0320 18F4 brsh L62
0322 .dbline 266
0322 ; {
0322 .dbline 267
0322 ; TWCR = (1<<TWINT)|(1<<TWSTO)|(1<<TWEN);
0322 84E9 ldi R24,148
0324 86BF out 0x36,R24
0326 .dbline 268
0326 ; goto start;
0326 EBCF xjmp L58
0328 L62:
0328 .dbline 270
0328 L60:
0328 .dbline 263
0328 26B6 in R2,0x36
032A 27FE sbrs R2,7
032C F1CF rjmp L59
032E .dbline 271
032E ; }
032E ; }
032E ; Disp_Buff[7] ++;
032E 80910700 lds R24,_Disp_Buff+7
0332 8F5F subi R24,255 ; addi 1
0334 80930700 sts _Disp_Buff+7,R24
0338 .dbline 272
0338 ; if ((TWSR & 0xF8) != START)
0338 81B1 in R24,0x1
033A 887F andi R24,248
033C 8830 cpi R24,8
033E 31F0 breq L65
0340 .dbline 273
0340 ; {
0340 .dbline 274
0340 ; TWCR = (1<<TWINT)|(1<<TWSTO)|(1<<TWEN);
0340 84E9 ldi R24,148
0342 86BF out 0x36,R24
0344 .dbline 275
0344 ; delay(2);
0344 02E0 ldi R16,2
0346 10E0 ldi R17,0
0348 5BDE xcall _delay
034A .dbline 276
034A ; goto start;
034A D9CF xjmp L58
034C L65:
034C .dbline 278
034C ; }
034C ; TWDR = 0x02; //送地址1.主机发送模式
034C 82E0 ldi R24,2
034E 83B9 out 0x3,R24
0350 .dbline 279
0350 ; TWCR = (1<<TWINT) | (1<<TWEN);
0350 84E8 ldi R24,132
0352 86BF out 0x36,R24
0354 0CC0 xjmp L68
0356 L67:
0356 .dbline 281
0356 ; while (!(TWCR & (1<<TWINT)))
0356 ; {
0356 .dbline 282
0356 ; if(I2C_TIME_OUT >1000)
0356 88EE ldi R24,1000
0358 93E0 ldi R25,3
035A 20902F00 lds R2,_I2C_TIME_OUT
035E 30903000 lds R3,_I2C_TIME_OUT+1
0362 8215 cp R24,R2
0364 9305 cpc R25,R3
0366 18F4 brsh L70
0368 .dbline 283
0368 ; {
0368 .dbline 284
0368 ; TWCR = (1<<TWINT)|(1<<TWSTO)|(1<<TWEN);
0368 84E9 ldi R24,148
036A 86BF out 0x36,R24
036C .dbline 285
036C ; goto start;
036C C8CF xjmp L58
036E L70:
036E .dbline 287
036E L68:
036E .dbline 280
036E 26B6 in R2,0x36
0370 27FE sbrs R2,7
0372 F1CF rjmp L67
0374 .dbline 288
0374 ; }
0374 ; }
0374 ; Disp_Buff[7] =2;
0374 82E0 ldi R24,2
0376 80930700 sts _Disp_Buff+7,R24
037A .dbline 289
037A ; if ((TWSR & 0xF8) != MT_SLA_ACK)
037A 81B1 in R24,0x1
037C 887F andi R24,248
037E 8831 cpi R24,24
0380 19F0 breq L73
0382 .dbline 290
0382 ; {
0382 .dbline 291
0382 ; TWCR = (1<<TWINT)|(1<<TWSTO)|(1<<TWEN);
0382 84E9 ldi R24,148
0384 86BF out 0x36,R24
0386 .dbline 292
0386 ; goto start;
0386 BBCF xjmp L58
0388 L73:
0388 .dbline 294
0388 ; }
0388 ; TWDR = data; //送数据
0388 43B9 out 0x3,R20
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -