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

📄 ad_key.lis

📁 AVR单片机系统开发经典实例部分源程序
💻 LIS
字号:
                        .module AD_key.c
                        .area vector(rom, abs)
                        .org 56
 0038 0C940000          jmp _AD_handler
                        .org 36
 0024 0C94A500          jmp _TC0_handler
                        .area text(rom, con, rel)
 0000                   .dbfile C:\AVR\M\1\AD_key.c
 0000                   .dbfunc e AD_handler _AD_handler fV
                        .even
 0000           _AD_handler::
 0000 2A92              st -y,R2
 0002 3A92              st -y,R3
 0004 8A93              st -y,R24
 0006 9A93              st -y,R25
 0008 2FB6              in R2,0x3f
 000A 2A92              st -y,R2
 000C                   .dbline -1
 000C                   .dbline 17
 000C           ; 
 000C           ; #include "AD_key.h"
 000C           ; 
 000C           ; //---------全局变量定义----------//
 000C           ; uint8 AD_data,AD_data1,AD_data2;
 000C           ; uint8 tmp;
 000C           ; uint8 AD_Flag,AD_time;
 000C           ; uint8 key_num;
 000C           ; 
 000C           ; 
 000C           ; //-------------------------------//
 000C           ; //
 000C           ; //        AD中断处理函数
 000C           ; //
 000C           ; //-------------------------------//
 000C           ; void AD_handler(void) 
 000C           ; { 
 000C                   .dbline 18
 000C           ;   AD_data=ADCH; 
 000C 25B0              in R2,0x5
 000E 20920600          sts _AD_data,R2
 0012                   .dbline 20
 0012           ;   
 0012           ;   if(AD_data>=0xF0)
 0012 822D              mov R24,R2
 0014 803F              cpi R24,240
 0016 30F0              brlo L2
 0018                   .dbline 21
 0018           ;   {
 0018                   .dbline 22
 0018           ;     AD_Flag=0;
 0018 2224              clr R2
 001A 20920300          sts _AD_Flag,R2
 001E                   .dbline 23
 001E           ;       AD_time=0;
 001E 20920200          sts _AD_time,R2
 0022                   .dbline 24
 0022           ;   }
 0022 7EC0              xjmp L3
 0024           L2:
 0024                   .dbline 25
 0024           ;   else if(AD_Flag==0)
 0024 20900300          lds R2,_AD_Flag
 0028 2220              tst R2
 002A 09F0              breq X0
 002C 79C0              xjmp L4
 002E           X0:
 002E                   .dbline 26
 002E           ;   {
 002E                   .dbline 27
 002E           ;     AD_time++;
 002E 80910200          lds R24,_AD_time
 0032 8F5F              subi R24,255    ; addi 1
 0034 80930200          sts _AD_time,R24
 0038                   .dbline 28
 0038           ;       if(AD_time==3)
 0038 8330              cpi R24,3
 003A 09F0              breq X1
 003C 60C0              xjmp L6
 003E           X1:
 003E                   .dbline 29
 003E           ;       {
 003E                   .dbline 30
 003E           ;          if(AD_data1>AD_data2) tmp = AD_data2;
 003E 20900400          lds R2,_AD_data2
 0042 30900500          lds R3,_AD_data1
 0046 2314              cp R2,R3
 0048 18F4              brsh L8
 004A                   .dbline 30
 004A 20920100          sts _tmp,R2
 004E 04C0              xjmp L9
 0050           L8:
 0050                   .dbline 31
 0050           ;          else tmp = AD_data1;
 0050 20900500          lds R2,_AD_data1
 0054 20920100          sts _tmp,R2
 0058           L9:
 0058                   .dbline 32
 0058           ;          if(tmp>AD_data) tmp = AD_data;
 0058 20900600          lds R2,_AD_data
 005C 30900100          lds R3,_tmp
 0060 2314              cp R2,R3
 0062 10F4              brsh L10
 0064                   .dbline 32
 0064 20920100          sts _tmp,R2
 0068           L10:
 0068                   .dbline 34
 0068           ;          
 0068           ;          if(tmp<0x0F) key_num = 1;
 0068 80910100          lds R24,_tmp
 006C 8F30              cpi R24,15
 006E 20F4              brsh L12
 0070                   .dbline 34
 0070 81E0              ldi R24,1
 0072 80930000          sts _key_num,R24
 0076 3FC0              xjmp L13
 0078           L12:
 0078                   .dbline 35
 0078           ;          else if(tmp>0x7C&&tmp<0x8F)key_num=2;
 0078 8CE7              ldi R24,124
 007A 20900100          lds R2,_tmp
 007E 8215              cp R24,R2
 0080 38F4              brsh L14
 0082 822D              mov R24,R2
 0084 8F38              cpi R24,143
 0086 20F4              brsh L14
 0088                   .dbline 35
 0088 82E0              ldi R24,2
 008A 80930000          sts _key_num,R24
 008E 33C0              xjmp L15
 0090           L14:
 0090                   .dbline 36
 0090           ;          else if(tmp>0xBC&&tmp<0xCA)key_num=3;
 0090 8CEB              ldi R24,188
 0092 20900100          lds R2,_tmp
 0096 8215              cp R24,R2
 0098 38F4              brsh L16
 009A 822D              mov R24,R2
 009C 8A3C              cpi R24,202
 009E 20F4              brsh L16
 00A0                   .dbline 36
 00A0 83E0              ldi R24,3
 00A2 80930000          sts _key_num,R24
 00A6 27C0              xjmp L17
 00A8           L16:
 00A8                   .dbline 37
 00A8           ;          else if(tmp>0xA8&&tmp<0xBC)key_num=4;
 00A8 88EA              ldi R24,168
 00AA 20900100          lds R2,_tmp
 00AE 8215              cp R24,R2
 00B0 38F4              brsh L18
 00B2 822D              mov R24,R2
 00B4 8C3B              cpi R24,188
 00B6 20F4              brsh L18
 00B8                   .dbline 37
 00B8 84E0              ldi R24,4
 00BA 80930000          sts _key_num,R24
 00BE 1BC0              xjmp L19
 00C0           L18:
 00C0                   .dbline 38
 00C0           ;          else if(tmp>0xD2&&tmp<0xDF)key_num=5;
 00C0 82ED              ldi R24,210
 00C2 20900100          lds R2,_tmp
 00C6 8215              cp R24,R2
 00C8 38F4              brsh L20
 00CA 822D              mov R24,R2
 00CC 8F3D              cpi R24,223
 00CE 20F4              brsh L20
 00D0                   .dbline 38
 00D0 85E0              ldi R24,5
 00D2 80930000          sts _key_num,R24
 00D6 0FC0              xjmp L21
 00D8           L20:
 00D8                   .dbline 39
 00D8           ;          else if(tmp>0xC9&&tmp<0xD3)key_num=6;
 00D8 89EC              ldi R24,201
 00DA 20900100          lds R2,_tmp
 00DE 8215              cp R24,R2
 00E0 38F4              brsh L22
 00E2 822D              mov R24,R2
 00E4 833D              cpi R24,211
 00E6 20F4              brsh L22
 00E8                   .dbline 39
 00E8 86E0              ldi R24,6
 00EA 80930000          sts _key_num,R24
 00EE 03C0              xjmp L23
 00F0           L22:
 00F0                   .dbline 40
 00F0           ;          else key_num=0;
 00F0 2224              clr R2
 00F2 20920000          sts _key_num,R2
 00F6           L23:
 00F6           L21:
 00F6           L19:
 00F6           L17:
 00F6           L15:
 00F6           L13:
 00F6                   .dbline 42
 00F6           ;          
 00F6           ;          AD_Flag=1;
 00F6 81E0              ldi R24,1
 00F8 80930300          sts _AD_Flag,R24
 00FC                   .dbline 43
 00FC           ;     }
 00FC 11C0              xjmp L7
 00FE           L6:
 00FE                   .dbline 44
 00FE           ;       else if(AD_time==1)AD_data1 = AD_data;
 00FE 80910200          lds R24,_AD_time
 0102 8130              cpi R24,1
 0104 29F4              brne L24
 0106                   .dbline 44
 0106 20900600          lds R2,_AD_data
 010A 20920500          sts _AD_data1,R2
 010E 08C0              xjmp L25
 0110           L24:
 0110                   .dbline 45
 0110           ;       else if(AD_time==2)AD_data2 = AD_data;
 0110 80910200          lds R24,_AD_time
 0114 8230              cpi R24,2
 0116 21F4              brne L26
 0118                   .dbline 45
 0118 20900600          lds R2,_AD_data
 011C 20920400          sts _AD_data2,R2
 0120           L26:
 0120           L25:
 0120           L7:
 0120                   .dbline 46
 0120           ;   }
 0120           L4:
 0120           L3:
 0120                   .dbline -2
 0120           L1:
 0120 2990              ld R2,y+
 0122 2FBE              out 0x3f,R2
 0124 9991              ld R25,y+
 0126 8991              ld R24,y+
 0128 3990              ld R3,y+
 012A 2990              ld R2,y+
 012C                   .dbline 0 ; func end
 012C 1895              reti
 012E                   .dbend
 012E                   .dbfunc e AD_Init _AD_Init fV
                        .even
 012E           _AD_Init::
 012E                   .dbline -1
 012E                   .dbline 57
 012E           ; } 
 012E           ; 
 012E           ; 
 012E           ; 
 012E           ; //---------------------------------//
 012E           ; //                                
 012E           ; //          AD初始化函数          
 012E           ; //                      
 012E           ; //---------------------------------//
 012E           ; void AD_Init(void)
 012E           ; {
 012E                   .dbline 58
 012E           ;   PORTA &= 0x7F;     // PA7无上拉 
 012E 8BB3              in R24,0x1b
 0130 8F77              andi R24,127
 0132 8BBB              out 0x1b,R24
 0134                   .dbline 59
 0134           ;   DDRA &= 0x7F;      // 设置PA7口为输入 
 0134 8AB3              in R24,0x1a
 0136 8F77              andi R24,127
 0138 8ABB              out 0x1a,R24
 013A                   .dbline 60
 013A           ;   ADMUX=0x67;         // 基准AVCC,左对齐选择第7通道
 013A 87E6              ldi R24,103
 013C 87B9              out 0x7,R24
 013E                   .dbline 61
 013E           ;   ADCSRA=0xCE;        // 采用单次转换模式,64分频 
 013E 8EEC              ldi R24,206
 0140 86B9              out 0x6,R24
 0142                   .dbline 62
 0142           ;   ADCSRA|=BIT(ADSC);  // 启动一次哑转换 
 0142 369A              sbi 0x6,6
 0144                   .dbline 63
 0144           ;   SREG=0x80;          // 开中断
 0144 80E8              ldi R24,128
 0146 8FBF              out 0x3f,R24
 0148                   .dbline -2
 0148           L28:
 0148                   .dbline 0 ; func end
 0148 0895              ret
 014A                   .dbend
 014A                   .dbfunc e TC0_handler _TC0_handler fV
                        .even
 014A           _TC0_handler::
 014A 0A92              st -y,R0
 014C 0FB6              in R0,0x3f
 014E 0A92              st -y,R0
 0150                   .dbline -1
 0150                   .dbline 74
 0150           ; }
 0150           ; 
 0150           ; 
 0150           ; 
 0150           ; //---------------------------------//
 0150           ; //                                
 0150           ; //          T/C0中断函数          
 0150           ; //                      
 0150           ; //---------------------------------//
 0150           ; void TC0_handler(void)
 0150           ; {
 0150                   .dbline 75
 0150           ;   ADCSRA|=BIT(ADSC);    // 进行一次AD转换
 0150 369A              sbi 0x6,6
 0152                   .dbline -2
 0152           L29:
 0152 0990              ld R0,y+
 0154 0FBE              out 0x3f,R0
 0156 0990              ld R0,y+
 0158                   .dbline 0 ; func end
 0158 1895              reti
 015A                   .dbend
 015A                   .dbfunc e TC0_Init _TC0_Init fV
                        .even
 015A           _TC0_Init::
 015A                   .dbline -1
 015A                   .dbline 86
 015A           ; }
 015A           ; 
 015A           ; 
 015A           ; 
 015A           ; //---------------------------------//
 015A           ; //                                
 015A           ; //          T/C0初始化函数          
 015A           ; //                      
 015A           ; //---------------------------------//
 015A           ; void TC0_Init(void) 
 015A           ; { 
 015A                   .dbline 89
 015A           ;   // 16MHz模式下,16ms中断一次,作为AD采样间隔基准
 015A           ;   
 015A           ;   TCNT0=0;   // 定时器0初值
 015A 2224              clr R2
 015C 22BE              out 0x32,R2
 015E                   .dbline 91
 015E           ;         
 015E           ;   TCCR0 = BIT(CS02)| BIT(CS00);  // 预分频 ck/1024 ,启动计数器 
 015E 85E0              ldi R24,5
 0160 83BF              out 0x33,R24
 0162                   .dbline 93
 0162           ;   
 0162           ;   TIMSK = BIT(TOIE0);   // T/C0 中断允许 
 0162 81E0              ldi R24,1
 0164 87BF              out 0x37,R24
 0166                   .dbline -2
 0166           L30:
 0166                   .dbline 0 ; func end
 0166 0895              ret
 0168                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile C:\AVR\M\1\AD_key.c
 0000           _key_num::
 0000                   .blkb 1
 0001                   .dbsym e key_num _key_num c
 0001           _tmp::
 0001                   .blkb 1
 0002                   .dbsym e tmp _tmp c
 0002           _AD_time::
 0002                   .blkb 1
 0003                   .dbsym e AD_time _AD_time c
 0003           _AD_Flag::
 0003                   .blkb 1
 0004                   .dbsym e AD_Flag _AD_Flag c
 0004           _AD_data2::
 0004                   .blkb 1
 0005                   .dbsym e AD_data2 _AD_data2 c
 0005           _AD_data1::
 0005                   .blkb 1
 0006                   .dbsym e AD_data1 _AD_data1 c
 0006           _AD_data::
 0006                   .blkb 1
 0007                   .dbsym e AD_data _AD_data c

⌨️ 快捷键说明

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