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

📄 intkey.lst

📁 protues_atmeg8学习之:中断篇源代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
__start:
__text_start:
    0018 E5CF      LDI	R28,0x5F
    0019 E0D4      LDI	R29,4
    001A BFCD      OUT	0x3D,R28
    001B BFDE      OUT	0x3E,R29
    001C 51C0      SUBI	R28,0x10
    001D 40D0      SBCI	R29,0
    001E EA0A      LDI	R16,0xAA
    001F 8308      STD	Y+0,R16
    0020 2400      CLR	R0
    0021 E6E0      LDI	R30,0x60
    0022 E0F0      LDI	R31,0
    0023 E010      LDI	R17,0
    0024 36E1      CPI	R30,0x61
    0025 07F1      CPC	R31,R17
    0026 F011      BEQ	0x0029
    0027 9201      ST	R0,Z+
    0028 CFFB      RJMP	0x0024
    0029 8300      STD	Z+0,R16
    002A E3E0      LDI	R30,0x30
    002B E0F0      LDI	R31,0
    002C E6A0      LDI	R26,0x60
    002D E0B0      LDI	R27,0
    002E E010      LDI	R17,0
    002F 33E0      CPI	R30,0x30
    0030 07F1      CPC	R31,R17
    0031 F021      BEQ	0x0036
    0032 95C8      LPM
    0033 9631      ADIW	R30,1
    0034 920D      ST	R0,X+
    0035 CFF9      RJMP	0x002F
    0036 D0B4      RCALL	_main
_exit:
    0037 CFFF      RJMP	_exit
_delay_us:
  i                    --> R20
  n                    --> R16
    0038 D109      RCALL	push_gset1
FILE: F:\Learn\AVR\Pro_Mega8\中断\IntKey\Delay.h
(0001) 
(0002) void delay_us(unsigned int n)
(0003) {
(0004)     unsigned int i;
(0005)     for(i=n;i>0;i--);
    0039 01A8      MOVW	R20,R16
    003A C002      RJMP	0x003D
    003B 5041      SUBI	R20,1
    003C 4050      SBCI	R21,0
    003D 3040      CPI	R20,0
    003E 0745      CPC	R20,R21
    003F F7D9      BNE	0x003B
(0006) }
    0040 D104      RCALL	pop_gset1
    0041 9508      RET
(0007)   
(0008) //延时1MS
(0009) void delay_1ms(void)
(0010) { 
(0011)     unsigned int i;
(0012)     for(i=1;i<(unsigned int)(1144-2);i++)
_delay_1ms:
  i                    --> R16
    0042 E001      LDI	R16,1
    0043 E010      LDI	R17,0
    0044 C002      RJMP	0x0047
    0045 5F0F      SUBI	R16,0xFF
    0046 4F1F      SBCI	R17,0xFF
    0047 3706      CPI	R16,0x76
    0048 E0E4      LDI	R30,4
    0049 071E      CPC	R17,R30
    004A F3D0      BCS	0x0045
(0013)         ;
(0014) }
    004B 9508      RET
_delay_ms:
  i                    --> R20
  n                    --> R22
    004C D10C      RCALL	push_gset2
    004D 01B8      MOVW	R22,R16
(0015) 
(0016) //延时nMS
(0017) void delay_ms(unsigned int n)
(0018) {
(0019)     unsigned int i=0;
    004E 2744      CLR	R20
    004F 2755      CLR	R21
    0050 C003      RJMP	0x0054
(0020)     while(i<n)
(0021)     {
(0022) 	    delay_1ms();
    0051 DFF0      RCALL	_delay_1ms
(0023)         i++;
    0052 5F4F      SUBI	R20,0xFF
    0053 4F5F      SBCI	R21,0xFF
    0054 1746      CP	R20,R22
    0055 0757      CPC	R21,R23
    0056 F3D0      BCS	0x0051
(0024)     }
(0025) } 
    0057 D0E6      RCALL	pop_gset2
    0058 9508      RET
_ScanKey:
  temp1                --> R22
  key                  --> R20
  temp                 --> R20
    0059 D102      RCALL	push_gset3
FILE: F:\Learn\AVR\Pro_Mega8\中断\IntKey\IntKey.C
(0001) /******************************************/
(0002) //文件名:IntKey.c
(0003) //功能: 中断触发键盘扫描的应用
(0004) //作者:  young
(0005) //时间: 2006.11.6
(0006) //目标MCU:ATmega8   
(0007) //晶振:  8MHZ
(0008) /******************************************/
(0009) #include <iom8v.h>
(0010) #include <macros.h>
(0011) #include "Delay.h"
(0012) 
(0013) unsigned char KeyDown;
(0014) 
(0015) //按键扫描函数,返回按键的值
(0016) unsigned char ScanKey(void)
(0017) {
(0018)     unsigned char temp,temp1,key;
(0019)     temp=PINC;
    005A B343      IN	R20,0x13
(0020)     temp&=0x38;
    005B 7348      ANDI	R20,0x38
(0021)     switch(temp) //判断行中哪条线有低电平
    005C 2755      CLR	R21
    005D 3248      CPI	R20,0x28
    005E E0E0      LDI	R30,0
    005F 075E      CPC	R21,R30
    0060 F1A1      BEQ	0x0095
    0061 E288      LDI	R24,0x28
    0062 E090      LDI	R25,0
    0063 1784      CP	R24,R20
    0064 0795      CPC	R25,R21
    0065 F034      BLT	0x006C
    0066 3148      CPI	R20,0x18
    0067 E0E0      LDI	R30,0
    0068 075E      CPC	R21,R30
    0069 F409      BNE	0x006B
    006A C04F      RJMP	0x00BA
    006B C071      RJMP	0x00DD
    006C 3340      CPI	R20,0x30
    006D E0E0      LDI	R30,0
    006E 075E      CPC	R21,R30
    006F F009      BEQ	0x0071
    0070 C06C      RJMP	0x00DD
(0022)     {
(0023) 	case 0x30:  
(0024)         DDRC=0X38;
    0071 E388      LDI	R24,0x38
    0072 BB84      OUT	0x14,R24
(0025)         PORTC=0X07;
    0073 E087      LDI	R24,7
    0074 BB85      OUT	0x15,R24
(0026) 	    delay_us(1);
    0075 E001      LDI	R16,1
    0076 E010      LDI	R17,0
    0077 DFC0      RCALL	_delay_us
(0027)         temp1=PINC;
    0078 B363      IN	R22,0x13
(0028) 		temp1&=0x07;
    0079 7067      ANDI	R22,7
(0029)         switch(temp1) //判断列中哪条线有低电平
    007A 2F46      MOV	R20,R22
    007B 2755      CLR	R21
    007C 3043      CPI	R20,3
    007D E0E0      LDI	R30,0
    007E 075E      CPC	R21,R30
    007F F069      BEQ	0x008D
    0080 3045      CPI	R20,5
    0081 E0E0      LDI	R30,0
    0082 075E      CPC	R21,R30
    0083 F039      BEQ	0x008B
    0084 3046      CPI	R20,6
    0085 E0E0      LDI	R30,0
    0086 075E      CPC	R21,R30
    0087 F009      BEQ	0x0089
    0088 C006      RJMP	0x008F
(0030) 		{
(0031) 		    case 0x06: key=0x01;  //得到键值
    0089 E041      LDI	R20,1
(0032) 		        break;
    008A C005      RJMP	0x0090
(0033) 		    case 0x05: key=0x04; 
    008B E044      LDI	R20,4
(0034) 		        break;
    008C C003      RJMP	0x0090
(0035) 			case 0x03: key=0x07; 
    008D E047      LDI	R20,7
(0036) 		        break;							
    008E C001      RJMP	0x0090
(0037) 			default:   key=0;
    008F 2744      CLR	R20
(0038) 		        break;
(0039) 		}
(0040) 		DDRC=0X07;
    0090 E087      LDI	R24,7
    0091 BB84      OUT	0x14,R24
(0041) 		PORTC=0X38;
    0092 E388      LDI	R24,0x38
    0093 BB85      OUT	0x15,R24
(0042)         break;
    0094 C049      RJMP	0x00DE
(0043) 			   
(0044)     case 0x28:
(0045) 	    DDRC=0X38;
    0095 E388      LDI	R24,0x38
    0096 BB84      OUT	0x14,R24
(0046)         PORTC=0X07;
    0097 E087      LDI	R24,7
    0098 BB85      OUT	0x15,R24
(0047) 	    delay_us(1);
    0099 E001      LDI	R16,1
    009A E010      LDI	R17,0
    009B DF9C      RCALL	_delay_us
(0048)         temp1=PINC;
    009C B363      IN	R22,0x13
(0049) 		temp1&=0x07;
    009D 7067      ANDI	R22,7
(0050) 		switch(temp1)
    009E 2EA6      MOV	R10,R22
    009F 24BB      CLR	R11
    00A0 01C5      MOVW	R24,R10
    00A1 3083      CPI	R24,3
    00A2 E0E0      LDI	R30,0
    00A3 079E      CPC	R25,R30
    00A4 F069      BEQ	0x00B2
    00A5 3085      CPI	R24,5
    00A6 E0E0      LDI	R30,0
    00A7 079E      CPC	R25,R30
    00A8 F039      BEQ	0x00B0
    00A9 3086      CPI	R24,6
    00AA E0E0      LDI	R30,0
    00AB 079E      CPC	R25,R30
    00AC F009      BEQ	0x00AE
    00AD C006      RJMP	0x00B4
(0051) 		{
(0052) 	    case 0x06: key=0x02; 
    00AE E042      LDI	R20,2
(0053) 		    break;
    00AF C005      RJMP	0x00B5
(0054) 		case 0x05: key=0x05; 
    00B0 E045      LDI	R20,5
(0055) 		    break;
    00B1 C003      RJMP	0x00B5
(0056) 		case 0x03: key=0x08; 
    00B2 E048      LDI	R20,0x8
(0057) 		    break;
    00B3 C001      RJMP	0x00B5
(0058) 		default:   key=0;
    00B4 2744      CLR	R20
(0059) 		    break;
(0060) 		}
(0061) 		DDRC=0X07;
    00B5 E087      LDI	R24,7
    00B6 BB84      OUT	0x14,R24
(0062) 		PORTC=0X38;
    00B7 E388      LDI	R24,0x38
    00B8 BB85      OUT	0x15,R24
(0063)         break;
    00B9 C024      RJMP	0x00DE
(0064) 		
(0065)     case 0x18:  
(0066) 	    DDRC=0X38;
    00BA E388      LDI	R24,0x38
    00BB BB84      OUT	0x14,R24
(0067)         PORTC=0X07;
    00BC E087      LDI	R24,7
    00BD BB85      OUT	0x15,R24

⌨️ 快捷键说明

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