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

📄 main.lis

📁 AVR试验板程序,有LED,键盘和串口的程序
💻 LIS
📖 第 1 页 / 共 3 页
字号:
 01D0           L34:
 01D0                   .dbline -2
 01D0           L30:
 01D0                   .dbline 0 ; func end
 01D0 0895              ret
 01D2                   .dbsym r tmp_PD 16 c
 01D2                   .dbend
 01D2                   .dbfunc e delay30ms _delay30ms fV
 01D2           ;   tmp_delay_cn -> R16,R17
                        .even
 01D2           _delay30ms::
 01D2                   .dbline -1
 01D2                   .dbline 192
 01D2           ; }                 
 01D2           ; }
 01D2           ; 
 01D2           ; 
 01D2           ; void delay30ms(void)                          //延时30毫秒的子程序
 01D2           ; {
 01D2                   .dbline 194
 01D2           ; unsigned int tmp_delay_cn;
 01D2           ; for (tmp_delay_cn=0;tmp_delay_cn<300;tmp_delay_cn++)
 01D2 0027              clr R16
 01D4 1127              clr R17
 01D6 02C0              xjmp L46
 01D8           L43:
 01D8                   .dbline 195
 01D8           L44:
 01D8                   .dbline 194
 01D8 0F5F              subi R16,255  ; offset = 1
 01DA 1F4F              sbci R17,255
 01DC           L46:
 01DC                   .dbline 194
 01DC 0C32              cpi R16,44
 01DE E1E0              ldi R30,1
 01E0 1E07              cpc R17,R30
 01E2 D0F3              brlo L43
 01E4                   .dbline -2
 01E4           L42:
 01E4                   .dbline 0 ; func end
 01E4 0895              ret
 01E6                   .dbsym r tmp_delay_cn 16 i
 01E6                   .dbend
 01E6                   .dbfunc e check_key_pressed _check_key_pressed fc
 01E6           ;        key_tem -> R16
                        .even
 01E6           _check_key_pressed::
 01E6                   .dbline -1
 01E6                   .dbline 200
 01E6           ; ;
 01E6           ; }
 01E6           ; 
 01E6           ; 
 01E6           ; unsigned char check_key_pressed(void)         //检查是否有键盘按下
 01E6           ; {
 01E6                   .dbline 202
 01E6           ; unsigned char key_tem;
 01E6           ; key_tem=PINA &= ~(0XC3);
 01E6 89B3              in R24,0x19
 01E8 8C73              andi R24,60
 01EA 89BB              out 0x19,R24
 01EC 082F              mov R16,R24
 01EE                   .dbline 203
 01EE           ; if(key_tem!=0X3C)
 01EE 8C33              cpi R24,60
 01F0 11F0              breq L48
 01F2                   .dbline 204
 01F2           ; return 1;
 01F2 01E0              ldi R16,1
 01F4 01C0              xjmp L47
 01F6           L48:
 01F6                   .dbline 206
 01F6           ; else
 01F6           ; return 0;
 01F6 0027              clr R16
 01F8                   .dbline -2
 01F8           L47:
 01F8                   .dbline 0 ; func end
 01F8 0895              ret
 01FA                   .dbsym r key_tem 16 c
 01FA                   .dbend
 01FA                   .dbfunc e find_key_code _find_key_code fc
 01FA           ;            uuu -> R20
                        .even
 01FA           _find_key_code::
 01FA 0E940000          xcall push_gset1
 01FE                   .dbline -1
 01FE                   .dbline 211
 01FE           ; }
 01FE           ; 
 01FE           ; 
 01FE           ; unsigned char find_key_code(void)
 01FE           ; {
 01FE                   .dbline 213
 01FE           ; unsigned char uuu;
 01FE           ; if(check_key_pressed()==1)
 01FE F3DF              xcall _check_key_pressed
 0200 0130              cpi R16,1
 0202 41F4              brne L51
 0204                   .dbline 214
 0204           ; {
 0204                   .dbline 215
 0204           ;  delay30ms();                                //延时去抖动
 0204 E6DF              xcall _delay30ms
 0206                   .dbline 216
 0206           ;  if(check_key_pressed()==1)
 0206 EFDF              xcall _check_key_pressed
 0208 0130              cpi R16,1
 020A 21F4              brne L53
 020C                   .dbline 217
 020C           ;   {
 020C                   .dbline 218
 020C           ;   uuu=(PINA & 0X3C);
 020C 49B3              in R20,0x19
 020E 4C73              andi R20,60
 0210                   .dbline 219
 0210           ;   return uuu;                   //屏蔽最高和最低两位
 0210 042F              mov R16,R20
 0212 01C0              xjmp L50
 0214           L53:
 0214                   .dbline 221
 0214           ;   }
 0214           ; }
 0214           L51:
 0214                   .dbline 222
 0214           ; return 0XC3;
 0214 03EC              ldi R16,195
 0216                   .dbline -2
 0216           L50:
 0216 0E940000          xcall pop_gset1
 021A                   .dbline 0 ; func end
 021A 0895              ret
 021C                   .dbsym r uuu 20 c
 021C                   .dbend
                        .area vector(rom, abs)
                        .org 36
 0024 0C940E01          jmp _timer0_ovf_isr
                        .area text(rom, con, rel)
 021C                   .dbfile E:\work\百步梯攀登计划\AVR程序\new\main.c
 021C                   .dbfunc e timer0_ovf_isr _timer0_ovf_isr fV
                        .even
 021C           _timer0_ovf_isr::
 021C 0E940000          xcall push_lset
 0220 0E940000          xcall push_gset1
 0224                   .dbline -1
 0224                   .dbline 227
 0224           ; }
 0224           ; 
 0224           ; #pragma interrupt_handler timer0_ovf_isr:10  //
 0224           ; void timer0_ovf_isr(void)
 0224           ; {
 0224                   .dbline 228
 0224           ;  TCNT0 = 0xB2;                               //计数器初始值重载
 0224 82EB              ldi R24,178
 0226 82BF              out 0x32,R24
 0228                   .dbline 229
 0228           ;  if (tmp_cn_0==100)                           //固定时间产生变化
 0228 80910200          lds R24,_tmp_cn_0
 022C 8436              cpi R24,100
 022E 09F0              breq X2
 0230 3EC0              xjmp L56
 0232           X2:
 0232                   .dbline 230
 0232           ;  {
 0232                   .dbline 231
 0232           ;    switch (key_code)                         //根据按下的键盘产生一定的闪灯花样
 0232 40910000          lds R20,_key_code
 0236 5527              clr R21
 0238 4C32              cpi R20,44
 023A E0E0              ldi R30,0
 023C 5E07              cpc R21,R30
 023E C9F0              breq L62
 0240 8CE2              ldi R24,44
 0242 90E0              ldi R25,0
 0244 8417              cp R24,R20
 0246 9507              cpc R25,R21
 0248 2CF0              brlt L66
 024A           L65:
 024A 4C31              cpi R20,28
 024C E0E0              ldi R30,0
 024E 5E07              cpc R21,R30
 0250 71F0              breq L61
 0252 15C0              xjmp L58
 0254           L66:
 0254 4433              cpi R20,52
 0256 E0E0              ldi R30,0
 0258 5E07              cpc R21,R30
 025A 69F0              breq L63
 025C 4433              cpi R20,52
 025E E0E0              ldi R30,0
 0260 5E07              cpc R21,R30
 0262 6CF0              brlt L58
 0264           L67:
 0264 4833              cpi R20,56
 0266 E0E0              ldi R30,0
 0268 5E07              cpc R21,R30
 026A 39F0              breq L64
 026C 08C0              xjmp L58
 026E           X1:
 026E                   .dbline 232
 026E           ;    {
 026E           L61:
 026E                   .dbline 233
 026E           ;    case 0X1C: flash_led_type4(); break;      
 026E 73DF              xcall _flash_led_type4
 0270                   .dbline 233
 0270 07C0              xjmp L59
 0272           L62:
 0272                   .dbline 234
 0272           ;    case 0X2c: flash_led_type3(); break;      
 0272 69DF              xcall _flash_led_type3
 0274                   .dbline 234
 0274 05C0              xjmp L59
 0276           L63:
 0276                   .dbline 235
 0276           ;    case 0X34: flash_led_type2(); break;      
 0276 56DF              xcall _flash_led_type2
 0278                   .dbline 235
 0278 03C0              xjmp L59
 027A           L64:
 027A                   .dbline 236
 027A           ;    case 0X38: flash_led_type1(); break;     
 027A 43DF              xcall _flash_led_type1
 027C                   .dbline 236
 027C 01C0              xjmp L59
 027E           L58:
 027E                   .dbline 237
 027E           ;    default:   flash_led_type4(); break;
 027E 6BDF              xcall _flash_led_type4
 0280                   .dbline 237
 0280           L59:
 0280                   .dbline 240
 0280           ;    }                 
 0280           ;  
 0280           ;  disp_led(LED_INDEX[tmp_led_index]);        //循环显示8段数字LED
 0280 80E0              ldi R24,<_LED_INDEX
 0282 90E0              ldi R25,>_LED_INDEX
 0284 E0910100          lds R30,_tmp_led_index
 0288 FF27              clr R31
 028A E80F              add R30,R24
 028C F91F              adc R31,R25
 028E 0491              lpm R16,Z
 0290 04DF              xcall _disp_led
 0292                   .dbline 241
 0292           ;  tmp_led_index++;
 0292 80910100          lds R24,_tmp_led_index
 0296 8F5F              subi R24,255    ; addi 1
 0298 80930100          sts _tmp_led_index,R24
 029C                   .dbline 242
 029C           ;  if (tmp_led_index==10) tmp_led_index=0;    //LED计数器归零
 029C 8A30              cpi R24,10
 029E 19F4              brne L68
 02A0                   .dbline 242
 02A0 2224              clr R2
 02A2 20920100          sts _tmp_led_index,R2
 02A6           L68:
 02A6                   .dbline 244
 02A6           ;  
 02A6           ;  tmp_cn_0=0;                                //临时计数器0归零
 02A6 2224              clr R2
 02A8 20920200          sts _tmp_cn_0,R2
 02AC                   .dbline 245
 02AC           ;  }
 02AC 05C0              xjmp L57
 02AE           L56:
 02AE                   .dbline 247
 02AE                   .dbline 248
 02AE 80910200          lds R24,_tmp_cn_0
 02B2 8F5F              subi R24,255    ; addi 1
 02B4 80930200          sts _tmp_cn_0,R24
 02B8                   .dbline 249
 02B8           L57:
 02B8                   .dbline -2
 02B8           L55:
 02B8 0E940000          xcall pop_gset1
 02BC 0E940000          xcall pop_lset
 02C0                   .dbline 0 ; func end
 02C0 1895              reti
 02C2                   .dbend
 02C2                   .dbfunc e main _main fV
 02C2           ;   tmp_key_code -> R20
                        .even
 02C2           _main::
 02C2                   .dbline -1
 02C2                   .dbline 256
 02C2           ;  else
 02C2           ;  {
 02C2           ;  tmp_cn_0=tmp_cn_0+1;                       //临时计数器递增
 02C2           ;  }
 02C2           ; }
 02C2           ; 
 02C2           ; 
 02C2           ; //****************** MAIN 程序的入口*************************//
 02C2           ; 
 02C2           ; void main()
 02C2           ; {
 02C2                   .dbline 258
 02C2           ; unsigned char tmp_key_code;
 02C2           ; init_devices();
 02C2 0FDF              xcall _init_devices
 02C4 08C0              xjmp L72
 02C6           L71:
 02C6                   .dbline 260
 02C6           ; while(1)
 02C6           ; {
 02C6                   .dbline 261
 02C6           ;   start_adc_0();                             //循环进行ADC转换
 02C6 DCDE              xcall _start_adc_0
 02C8                   .dbline 263
 02C8           ;   
 02C8           ;   tmp_key_code=find_key_code() & 0X3C;              //判断是否按下键盘
 02C8 98DF              xcall _find_key_code
 02CA 402F              mov R20,R16
 02CC 4C73              andi R20,60
 02CE                   .dbline 265
 02CE           ;   
 02CE           ;   if (tmp_key_code!=0x3c) key_code=tmp_key_code;    
 02CE 4C33              cpi R20,60
 02D0 11F0              breq L74
 02D2                   .dbline 265
 02D2 40930000          sts _key_code,R20
 02D6           L74:
 02D6                   .dbline 268
 02D6           L72:
 02D6                   .dbline 259
 02D6 F7CF              xjmp L71
 02D8           X3:
 02D8                   .dbline -2
 02D8           L70:
 02D8                   .dbline 0 ; func end
 02D8 0895              ret
 02DA                   .dbsym r tmp_key_code 20 c
 02DA                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile E:\work\百步梯攀登计划\AVR程序\new\main.c
 0000           _key_code::
 0000                   .blkb 1
 0001                   .dbsym e key_code _key_code c
 0001           _tmp_cn_1::
 0001                   .blkb 1
 0002                   .dbsym e tmp_cn_1 _tmp_cn_1 c
 0002           _tmp_cn_0::
 0002                   .blkb 1
 0003                   .dbsym e tmp_cn_0 _tmp_cn_0 c

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -