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

📄 intkey.lis

📁 protues_atmeg8学习之:中断篇源代码
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module IntKey.C
                        .area text(rom, con, rel)
 0000                   .dbfile F:\Learn\AVR\Pro_Mega8\中断\IntKey/Delay.h
 0000                   .dbfunc e delay_us _delay_us fV
 0000           ;              i -> R20,R21
 0000           ;              n -> R16,R17
                        .even
 0000           _delay_us::
 0000 00D0              rcall push_gset1
 0002                   .dbline -1
 0002                   .dbline 3
 0002           ; /******************************************/
 0002           ; //文件名:IntKey.c
 0002           ; //功能: 中断触发键盘扫描的应用
 0002                   .dbline 5
 0002 A801              movw R20,R16
 0004 02C0              rjmp L5
 0006           L2:
 0006                   .dbline 5
 0006           L3:
 0006                   .dbline 5
 0006 4150              subi R20,1
 0008 5040              sbci R21,0
 000A           L5:
 000A                   .dbline 5
 000A           ; //作者:  young
 000A           ; //时间: 2006.11.6
 000A 4030              cpi R20,0
 000C 4507              cpc R20,R21
 000E D9F7              brne L2
 0010           X0:
 0010                   .dbline -2
 0010                   .dbline 6
 0010           ; //目标MCU:ATmega8   
 0010           L1:
 0010 00D0              rcall pop_gset1
 0012                   .dbline 0 ; func end
 0012 0895              ret
 0014                   .dbsym r i 20 i
 0014                   .dbsym r n 16 i
 0014                   .dbend
 0014                   .dbfunc e delay_1ms _delay_1ms fV
 0014           ;              i -> R16,R17
                        .even
 0014           _delay_1ms::
 0014                   .dbline -1
 0014                   .dbline 10
 0014           ; //晶振:  8MHZ
 0014           ; /******************************************/
 0014           ; #include <iom8v.h>
 0014           ; #include <macros.h>
 0014                   .dbline 12
 0014           ; #include "Delay.h"
 0014           ; 
 0014 01E0              ldi R16,1
 0016 10E0              ldi R17,0
 0018 02C0              rjmp L10
 001A           L7:
 001A                   .dbline 13
 001A           L8:
 001A                   .dbline 12
 001A 0F5F              subi R16,255  ; offset = 1
 001C 1F4F              sbci R17,255
 001E           L10:
 001E                   .dbline 12
 001E 0637              cpi R16,118
 0020 E4E0              ldi R30,4
 0022 1E07              cpc R17,R30
 0024 D0F3              brlo L7
 0026                   .dbline -2
 0026                   .dbline 14
 0026           ; unsigned char KeyDown;
 0026           ; 
 0026           L6:
 0026                   .dbline 0 ; func end
 0026 0895              ret
 0028                   .dbsym r i 16 i
 0028                   .dbend
 0028                   .dbfunc e delay_ms _delay_ms fV
 0028           ;              i -> R20,R21
 0028           ;              n -> R22,R23
                        .even
 0028           _delay_ms::
 0028 00D0              rcall push_gset2
 002A B801              movw R22,R16
 002C                   .dbline -1
 002C                   .dbline 18
 002C           ; //按键扫描函数,返回按键的值
 002C           ; unsigned char ScanKey(void)
 002C           ; {
 002C           ;     unsigned char temp,temp1,key;
 002C                   .dbline 19
 002C           ;     temp=PINC;
 002C 4427              clr R20
 002E 5527              clr R21
 0030 03C0              rjmp L13
 0032           L12:
 0032                   .dbline 21
 0032                   .dbline 22
 0032 F0DF              rcall _delay_1ms
 0034                   .dbline 23
 0034 4F5F              subi R20,255  ; offset = 1
 0036 5F4F              sbci R21,255
 0038                   .dbline 24
 0038           L13:
 0038                   .dbline 20
 0038           ;     temp&=0x38;
 0038 4617              cp R20,R22
 003A 5707              cpc R21,R23
 003C D0F3              brlo L12
 003E                   .dbline -2
 003E                   .dbline 25
 003E           ;     switch(temp) //判断行中哪条线有低电平
 003E           ;     {
 003E           ;       case 0x30:  
 003E           ;         DDRC=0X38;
 003E           ;         PORTC=0X07;
 003E           L11:
 003E 00D0              rcall pop_gset2
 0040                   .dbline 0 ; func end
 0040 0895              ret
 0042                   .dbsym r i 20 i
 0042                   .dbsym r n 22 i
 0042                   .dbend
 0042                   .dbfile F:\Learn\AVR\Pro_Mega8\中断\IntKey\IntKey.C
 0042                   .dbfunc e ScanKey _ScanKey fc
 0042           ;          temp1 -> R22
 0042           ;            key -> R20
 0042           ;           temp -> R20
                        .even
 0042           _ScanKey::
 0042 00D0              rcall push_gset3
 0044                   .dbline -1
 0044                   .dbline 17
 0044                   .dbline 19
 0044 43B3              in R20,0x13
 0046                   .dbline 20
 0046 4873              andi R20,56
 0048                   .dbline 21
 0048 5527              clr R21
 004A 4832              cpi R20,40
 004C E0E0              ldi R30,0
 004E 5E07              cpc R21,R30
 0050 A1F1              breq L26
 0052 88E2              ldi R24,40
 0054 90E0              ldi R25,0
 0056 8417              cp R24,R20
 0058 9507              cpc R25,R21
 005A 34F0              brlt L41
 005C           L40:
 005C 4831              cpi R20,24
 005E E0E0              ldi R30,0
 0060 5E07              cpc R21,R30
 0062 09F4              brne X5
 0064 4FC0              rjmp L33
 0066           X5:
 0066 71C0              rjmp L16
 0068           L41:
 0068 4033              cpi R20,48
 006A E0E0              ldi R30,0
 006C 5E07              cpc R21,R30
 006E 09F0              breq L19
 0070 6CC0              rjmp L16
 0072           X1:
 0072                   .dbline 22
 0072           L19:
 0072                   .dbline 24
 0072 88E3              ldi R24,56
 0074 84BB              out 0x14,R24
 0076                   .dbline 25
 0076 87E0              ldi R24,7
 0078 85BB              out 0x15,R24
 007A                   .dbline 26
 007A           ;           delay_us(1);
 007A 01E0              ldi R16,1
 007C 10E0              ldi R17,0
 007E C0DF              rcall _delay_us
 0080                   .dbline 27
 0080           ;         temp1=PINC;
 0080 63B3              in R22,0x13
 0082                   .dbline 28
 0082           ;               temp1&=0x07;
 0082 6770              andi R22,7
 0084                   .dbline 29
 0084           ;         switch(temp1) //判断列中哪条线有低电平
 0084 462F              mov R20,R22
 0086 5527              clr R21
 0088 4330              cpi R20,3
 008A E0E0              ldi R30,0
 008C 5E07              cpc R21,R30
 008E 69F0              breq L25
 0090 4530              cpi R20,5
 0092 E0E0              ldi R30,0
 0094 5E07              cpc R21,R30
 0096 39F0              breq L24
 0098 4630              cpi R20,6
 009A E0E0              ldi R30,0
 009C 5E07              cpc R21,R30
 009E 09F0              breq L23
 00A0 06C0              rjmp L20
 00A2           X2:
 00A2                   .dbline 30
 00A2           ;               {
 00A2           L23:
 00A2                   .dbline 31
 00A2           ;                   case 0x06: key=0x01;  //得到键值
 00A2 41E0              ldi R20,1
 00A4                   .dbline 32
 00A4           ;                       break;
 00A4 05C0              rjmp L21
 00A6           L24:
 00A6                   .dbline 33
 00A6           ;                   case 0x05: key=0x04; 
 00A6 44E0              ldi R20,4
 00A8                   .dbline 34
 00A8           ;                       break;
 00A8 03C0              rjmp L21
 00AA           L25:
 00AA                   .dbline 35
 00AA           ;                       case 0x03: key=0x07; 
 00AA 47E0              ldi R20,7
 00AC                   .dbline 36
 00AC           ;                       break;                                                  
 00AC 01C0              rjmp L21
 00AE           L20:
 00AE                   .dbline 37
 00AE           ;                       default:   key=0;
 00AE 4427              clr R20
 00B0                   .dbline 38
 00B0           ;                       break;
 00B0           L21:
 00B0                   .dbline 40
 00B0           ;               }
 00B0           ;               DDRC=0X07;
 00B0 87E0              ldi R24,7
 00B2 84BB              out 0x14,R24
 00B4                   .dbline 41
 00B4           ;               PORTC=0X38;
 00B4 88E3              ldi R24,56
 00B6 85BB              out 0x15,R24
 00B8                   .dbline 42
 00B8           ;         break;
 00B8 49C0              rjmp L17
 00BA           L26:
 00BA                   .dbline 45
 00BA           ;                          
 00BA           ;     case 0x28:
 00BA           ;           DDRC=0X38;
 00BA 88E3              ldi R24,56
 00BC 84BB              out 0x14,R24
 00BE                   .dbline 46
 00BE           ;         PORTC=0X07;
 00BE 87E0              ldi R24,7
 00C0 85BB              out 0x15,R24
 00C2                   .dbline 47
 00C2           ;           delay_us(1);
 00C2 01E0              ldi R16,1
 00C4 10E0              ldi R17,0
 00C6 9CDF              rcall _delay_us
 00C8                   .dbline 48
 00C8           ;         temp1=PINC;
 00C8 63B3              in R22,0x13
 00CA                   .dbline 49
 00CA           ;               temp1&=0x07;
 00CA 6770              andi R22,7
 00CC                   .dbline 50
 00CC           ;               switch(temp1)
 00CC A62E              mov R10,R22
 00CE BB24              clr R11
 00D0 C501              movw R24,R10
 00D2 8330              cpi R24,3
 00D4 E0E0              ldi R30,0
 00D6 9E07              cpc R25,R30
 00D8 69F0              breq L32
 00DA 8530              cpi R24,5
 00DC E0E0              ldi R30,0
 00DE 9E07              cpc R25,R30
 00E0 39F0              breq L31
 00E2 8630              cpi R24,6
 00E4 E0E0              ldi R30,0
 00E6 9E07              cpc R25,R30
 00E8 09F0              breq L30
 00EA 06C0              rjmp L27
 00EC           X3:
 00EC                   .dbline 51
 00EC           ;               {
 00EC           L30:
 00EC                   .dbline 52
 00EC           ;           case 0x06: key=0x02; 
 00EC 42E0              ldi R20,2
 00EE                   .dbline 53
 00EE           ;                   break;
 00EE 05C0              rjmp L28
 00F0           L31:
 00F0                   .dbline 54
 00F0           ;               case 0x05: key=0x05; 
 00F0 45E0              ldi R20,5
 00F2                   .dbline 55
 00F2           ;                   break;
 00F2 03C0              rjmp L28
 00F4           L32:
 00F4                   .dbline 56
 00F4           ;               case 0x03: key=0x08; 
 00F4 48E0              ldi R20,8
 00F6                   .dbline 57
 00F6           ;                   break;
 00F6 01C0              rjmp L28
 00F8           L27:
 00F8                   .dbline 58
 00F8           ;               default:   key=0;
 00F8 4427              clr R20
 00FA                   .dbline 59
 00FA           ;                   break;
 00FA           L28:
 00FA                   .dbline 61
 00FA           ;               }
 00FA           ;               DDRC=0X07;
 00FA 87E0              ldi R24,7
 00FC 84BB              out 0x14,R24
 00FE                   .dbline 62
 00FE           ;               PORTC=0X38;
 00FE 88E3              ldi R24,56
 0100 85BB              out 0x15,R24
 0102                   .dbline 63
 0102           ;         break;
 0102 24C0              rjmp L17
 0104           L33:
 0104                   .dbline 66
 0104           ;               
 0104           ;     case 0x18:  
 0104           ;           DDRC=0X38;
 0104 88E3              ldi R24,56
 0106 84BB              out 0x14,R24

⌨️ 快捷键说明

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