⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 display_board3.0.lis

📁 一个LED特效显示程序
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 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 + -