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

📄 main.lis

📁 avr单片机与flash存储器通信程序,调试通过,希望对大家有所帮助.
💻 LIS
字号:
                        .module main.c
                        .area lit(rom, con, rel)
 0000           _Tab::
 0000 21F9              .byte 33,249
 0002 1351              .byte 19,'Q
 0004 C945              .byte 201,'E
 0006 05F1              .byte 5,241
 0008 0141              .byte 1,'A
 000A 810D              .byte 129,13
 000C 2719              .byte 39,25
 000E 0787              .byte 7,135
 0010                   .dbfile C:\ATMega8515\Key/ForATmega8515.h
 0010                   .dbsym e Tab _Tab A[16:16]kc
                        .area text(rom, con, rel)
 0000                   .dbfile C:\ATMega8515\Key/ForATmega8515.h
 0000                   .dbfile C:\ATMega8515\Key\main.c
 0000                   .dbfunc e main _main fV
 0000           ;          shuma -> R20
 0000           ;            key -> R22
                        .even
 0000           _main::
 0000                   .dbline -1
 0000                   .dbline 13
 0000           ; #include <iom8515v.h>
 0000           ; #include"ForATmega8515.h"
 0000           ; #define       C0                      0x04
 0000           ; #define       C1                      0x08    
 0000           ; #define       C2                      0x10
 0000           ; #define       R0                      0x40
 0000           ; #define       R1                      0x80 
 0000           ; void delay(uint ticks);//严时
 0000           ; uchar GetKey(void);
 0000           ; 
 0000           ; uchar temp;
 0000           ; void main()
 0000           ; {
 0000                   .dbline 14
 0000           ;  uchar shuma=0;
 0000 4427              clr R20
 0002                   .dbline 15
 0002           ;  uchar key=0;
 0002 6627              clr R22
 0004                   .dbline 16
 0004           ;  init_devices();
 0004 00D0              rcall _init_devices
 0006 30C0              rjmp L3
 0008           L2:
 0008                   .dbline 18
 0008           ;  while(1)
 0008           ;  {
 0008                   .dbline 19
 0008           ;   temp=GetKey();
 0008 3FD0              rcall _GetKey
 000A 00930000          sts _temp,R16
 000E                   .dbline 20
 000E           ;   key=temp;
 000E 602F              mov R22,R16
 0010                   .dbline 21
 0010           ;   if((key&0x10)!=0)  //第一列有键按下
 0010 04FF              sbrs R16,4
 0012 10C0              rjmp L5
 0014                   .dbline 22
 0014           ;   {
 0014                   .dbline 23
 0014           ;         if((temp&0x01)==0)shuma=1;
 0014 00FD              sbrc R16,0
 0016 02C0              rjmp L7
 0018                   .dbline 23
 0018 41E0              ldi R20,1
 001A 1EC0              rjmp L6
 001C           L7:
 001C                   .dbline 24
 001C           ;         else if((temp&0x02)==0)shuma=3;
 001C 20900000          lds R2,_temp
 0020 21FC              sbrc R2,1
 0022 02C0              rjmp L9
 0024                   .dbline 24
 0024 43E0              ldi R20,3
 0026 18C0              rjmp L6
 0028           L9:
 0028                   .dbline 25
 0028           ;         else if((temp&0x04)==0)shuma=5;
 0028 20900000          lds R2,_temp
 002C 22FC              sbrc R2,2
 002E 14C0              rjmp L6
 0030                   .dbline 25
 0030 45E0              ldi R20,5
 0032                   .dbline 26
 0032           ;   }
 0032 12C0              rjmp L6
 0034           L5:
 0034                   .dbline 27
 0034           ;   else if((key&0x20)!=0)//第二列有键按下
 0034 65FF              sbrs R22,5
 0036 10C0              rjmp L13
 0038                   .dbline 28
 0038           ;   {
 0038                   .dbline 29
 0038           ;         if((temp&0x01)==0)shuma=2;
 0038 20900000          lds R2,_temp
 003C 20FC              sbrc R2,0
 003E 02C0              rjmp L15
 0040                   .dbline 29
 0040 42E0              ldi R20,2
 0042 0AC0              rjmp L16
 0044           L15:
 0044                   .dbline 30
 0044           ;         else if((temp&0x02)==0)shuma=4;
 0044 20900000          lds R2,_temp
 0048 21FC              sbrc R2,1
 004A 02C0              rjmp L17
 004C                   .dbline 30
 004C 44E0              ldi R20,4
 004E 04C0              rjmp L18
 0050           L17:
 0050                   .dbline 31
 0050           ;         else if((temp&0x04)==0)shuma=6;
 0050 20900000          lds R2,_temp
 0054 22FE              sbrs R2,2
 0056                   .dbline 31
 0056 46E0              ldi R20,6
 0058           L19:
 0058           L18:
 0058           L16:
 0058                   .dbline 32
 0058           ;   }
 0058           L13:
 0058           L6:
 0058                   .dbline 34
 0058 80E0              ldi R24,<_Tab
 005A 90E0              ldi R25,>_Tab
 005C E42F              mov R30,R20
 005E FF27              clr R31
 0060 E80F              add R30,R24
 0062 F91F              adc R31,R25
 0064 E491              lpm R30,Z
 0066 EBBB              out 0x1b,R30
 0068                   .dbline 36
 0068           L3:
 0068                   .dbline 17
 0068 CFCF              rjmp L2
 006A           X0:
 006A                   .dbline -2
 006A           L1:
 006A                   .dbline 0 ; func end
 006A 0895              ret
 006C                   .dbsym r shuma 20 c
 006C                   .dbsym r key 22 c
 006C                   .dbend
 006C                   .dbfunc e delay _delay fV
 006C           ;              i -> R20
 006C           ;          ticks -> R16,R17
                        .even
 006C           _delay::
 006C 00D0              rcall push_gset1
 006E                   .dbline -1
 006E                   .dbline 42
 006E           ; 
 006E           ;   PORTA=Tab[shuma];
 006E           ; 
 006E           ;  }
 006E           ; 
 006E           ; }
 006E           ; 
 006E           ; 
 006E           ; void delay(uint ticks)
 006E           ; {
 006E                   .dbline 44
 006E 07C0              rjmp L25
 0070           L22:
 0070                   .dbline 44
 0070 48EC              ldi R20,200
 0072 01C0              rjmp L29
 0074           L26:
 0074                   .dbline 44
 0074           L27:
 0074                   .dbline 44
 0074 4A95              dec R20
 0076           L29:
 0076                   .dbline 44
 0076 4423              tst R20
 0078 E9F7              brne L26
 007A           L23:
 007A                   .dbline 44
 007A 0150              subi R16,1
 007C 1040              sbci R17,0
 007E           L25:
 007E                   .dbline 44
 007E           ;  uchar i;
 007E           ;  for(;ticks!=0;ticks--)for(i=200;i!=0;i--);
 007E 0030              cpi R16,0
 0080 0107              cpc R16,R17
 0082 B1F7              brne L22
 0084           X1:
 0084                   .dbline -2
 0084           L21:
 0084 00D0              rcall pop_gset1
 0086                   .dbline 0 ; func end
 0086 0895              ret
 0088                   .dbsym r i 20 c
 0088                   .dbsym r ticks 16 i
 0088                   .dbend
 0088                   .dbfunc e GetKey _GetKey fc
 0088           ;           temp -> R20
 0088           ;            key -> R22
                        .even
 0088           _GetKey::
 0088 00D0              rcall push_gset2
 008A                   .dbline -1
 008A                   .dbline 49
 008A           ; }
 008A           ; 
 008A           ; ////////////////////////////////////////////////
 008A           ; uchar GetKey(void)
 008A           ; {
 008A                   .dbline 54
 008A           ;  uchar key;
 008A           ;  uchar temp;
 008A           ;  //temp的高4位是按下的列
 008A           ;  //temp低4位是按下的行
 008A           ;  DDRD&=~(C0+C1+C2);//C0,C1,C2设置为输入
 008A 81B3              in R24,0x11
 008C 837E              andi R24,227
 008E 81BB              out 0x11,R24
 0090                   .dbline 55
 0090           ;  DDRD|=R0+R1;//R0,R1设置为输出
 0090 81B3              in R24,0x11
 0092 806C              ori R24,192
 0094 81BB              out 0x11,R24
 0096                   .dbline 56
 0096           ;  PORTD&=~(R0+R1);//R0,R1输出0
 0096 82B3              in R24,0x12
 0098 8F73              andi R24,63
 009A 82BB              out 0x12,R24
 009C                   .dbline 57
 009C           ;  key=PIND;            //读取引脚                
 009C 60B3              in R22,0x10
 009E                   .dbline 58
 009E           ;  key>>=2;       
 009E 6695              lsr R22
 00A0 6695              lsr R22
 00A2                   .dbline 59
 00A2           ;  key&=0x07;
 00A2 6770              andi R22,7
 00A4                   .dbline 60
 00A4           ;  if(key!=0x07)   //如果有键盘按下
 00A4 6730              cpi R22,7
 00A6 D1F0              breq L31
 00A8                   .dbline 61
 00A8           ;  {
 00A8                   .dbline 62
 00A8           ;         delay(1);  //延时,软件滤波
 00A8 01E0              ldi R16,1
 00AA 10E0              ldi R17,0
 00AC DFDF              rcall _delay
 00AE                   .dbline 63
 00AE           ;         key=PIND; //读取引脚          
 00AE 60B3              in R22,0x10
 00B0                   .dbline 64
 00B0           ;         key>>=2;
 00B0 6695              lsr R22
 00B2 6695              lsr R22
 00B4                   .dbline 65
 00B4           ;         key&=0x07;
 00B4 6770              andi R22,7
 00B6                   .dbline 66
 00B6           ;         if(key!=0x07) 
 00B6 6730              cpi R22,7
 00B8 89F0              breq L33
 00BA                   .dbline 67
 00BA           ;                 {
 00BA                   .dbline 69
 00BA           ;                  //确实有键按下
 00BA           ;                       temp=key;
 00BA 462F              mov R20,R22
 00BC                   .dbline 70
 00BC           ;                       DDRD|=C0+C1+C2;////C0,C1,C2设置为输出
 00BC 81B3              in R24,0x11
 00BE 8C61              ori R24,28
 00C0 81BB              out 0x11,R24
 00C2                   .dbline 71
 00C2           ;                       DDRD&=~(R0+R1);//R0,R1设置为输入
 00C2 81B3              in R24,0x11
 00C4 8F73              andi R24,63
 00C6 81BB              out 0x11,R24
 00C8                   .dbline 72
 00C8           ;                       PORTD|=C0+C1+C2;
 00C8 82B3              in R24,0x12
 00CA 8C61              ori R24,28
 00CC 82BB              out 0x12,R24
 00CE                   .dbline 73
 00CE           ;                       key=PIND;     //读取引脚                
 00CE 60B3              in R22,0x10
 00D0                   .dbline 74
 00D0           ;                       key>>=2;
 00D0 6695              lsr R22
 00D2 6695              lsr R22
 00D4                   .dbline 75
 00D4           ;                       key&=0x30;
 00D4 6073              andi R22,48
 00D6                   .dbline 76
 00D6           ;                       temp+=key; 
 00D6 460F              add R20,R22
 00D8                   .dbline 77
 00D8           ;                       return temp;
 00D8 042F              mov R16,R20
 00DA 01C0              rjmp L30
 00DC           L33:
 00DC                   .dbline 79
 00DC           ;                  }
 00DC           ;  }
 00DC           L31:
 00DC                   .dbline 80
 00DC           ;   return 0xff;//没有键按下
 00DC 0FEF              ldi R16,255
 00DE                   .dbline -2
 00DE           L30:
 00DE 00D0              rcall pop_gset2
 00E0                   .dbline 0 ; func end
 00E0 0895              ret
 00E2                   .dbsym r temp 20 c
 00E2                   .dbsym r key 22 c
 00E2                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile C:\ATMega8515\Key\main.c
 0000           _temp::
 0000                   .blkb 1
 0001                   .dbsym e temp _temp c

⌨️ 快捷键说明

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