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

📄 wbzdjpsm.lst

📁 AVR单片机C语言编程及应用实例 适合初学者的学习研究 其中包含Atmega16中文资料及Protel部分电路图
💻 LST
字号:
__start:
__text_start:
      3B E5CF      LDI	R28,0x5F
      3C E0D4      LDI	R29,4
      3D BFCD      OUT	0x3D,R28
      3E BFDE      OUT	0x3E,R29
      3F 51C0      SUBI	R28,0x10
      40 40D0      SBCI	R29,0
      41 EA0A      LDI	R16,0xAA
      42 8308      STD	Y+0,R16
      43 2400      CLR	R0
      44 E6E2      LDI	R30,0x62
      45 E0F0      LDI	R31,0
      46 E010      LDI	R17,0
      47 36E2      CPI	R30,0x62
      48 07F1      CPC	R31,R17
      49 F011      BEQ	0x004C
      4A 9201      ST	R0,Z+
      4B CFFB      RJMP	0x0047
      4C 8300      STD	Z+0,R16
      4D E7E4      LDI	R30,0x74
      4E E0F0      LDI	R31,0
      4F E6A0      LDI	R26,0x60
      50 E0B0      LDI	R27,0
      51 E010      LDI	R17,0
      52 E000      LDI	R16,0
      53 BF0B      OUT	0x3B,R16
      54 37E6      CPI	R30,0x76
      55 07F1      CPC	R31,R17
      56 F021      BEQ	0x005B
      57 95C8      LPM
      58 9631      ADIW	R30,1
      59 920D      ST	R0,X+
      5A CFF9      RJMP	0x0054
      5B 940E 017C CALL	_main
_exit:
      5D CFFF      RJMP	_exit
_delay:
  i                    --> R20
  j                    --> R22
  ms                   --> R16
      5E 940E 0189 CALL	push_xgsetF000
FILE: G:\学习\avr\天祥电子AVR视频教程\chengxu\外部中断键盘扫描\wbzdjpsm.c
(0001) #include <iom16v.h>
(0002) #include <macros.h>
(0003) #define  uchar unsigned char
(0004) #define  uint  unsigned int
(0005) uchar l=0,num=0;
(0006) #pragma interrupt_handler jpsm:3
(0007) #pragma data:code 
(0008) const  table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,
(0009) 		           0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
(0010) 
(0011) void delay(uint ms)
(0012) {
(0013)         uint i,j;
(0014) 	for(i=0;i<ms;i++)
      60 2744      CLR	R20
      61 2755      CLR	R21
      62 C00B      RJMP	0x006E
(0015) 	   {
(0016) 	   for(j=0;j<1141;j++);
      63 2766      CLR	R22
      64 2777      CLR	R23
      65 C002      RJMP	0x0068
      66 5F6F      SUBI	R22,0xFF
      67 4F7F      SBCI	R23,0xFF
      68 3765      CPI	R22,0x75
      69 E0E4      LDI	R30,4
      6A 077E      CPC	R23,R30
      6B F3D0      BCS	0x0066
      6C 5F4F      SUBI	R20,0xFF
      6D 4F5F      SBCI	R21,0xFF
      6E 1740      CP	R20,R16
      6F 0751      CPC	R21,R17
      70 F390      BCS	0x0063
      71 940C 018E JMP	pop_xgsetF000
_show:
  k                    --> R10
  j                    --> R12
      73 92AA      ST	R10,-Y
      74 92CA      ST	R12,-Y
      75 2EA2      MOV	R10,R18
      76 2EC0      MOV	R12,R16
(0017)        }
(0018) }
(0019) void show(uchar j,uchar k)
(0020) {
(0021)         PORTA|=BIT(3);
      77 9ADB      SBI	0x1B,3
(0022) 	PORTB=table[j];
      78 E584      LDI	R24,0x54
      79 E090      LDI	R25,0
      7A 2DEC      MOV	R30,R12
      7B 27FF      CLR	R31
      7C 0FEE      LSL	R30
      7D 1FFF      ROL	R31
      7E 0FE8      ADD	R30,R24
      7F 1FF9      ADC	R31,R25
      80 9025      LPM	R2,Z+
      81 9034      LPM	R3,0(Z)
      82 BA28      OUT	0x18,R2
(0023) 	PORTA&=~BIT(3);
      83 98DB      CBI	0x1B,3
(0024) 	
(0025) 	PORTB=0XFF;
      84 EF8F      LDI	R24,0xFF
      85 BB88      OUT	0x18,R24
(0026) 	PORTB&=~BIT(k);
      86 E001      LDI	R16,1
      87 2D1A      MOV	R17,R10
      88 940E 01A1 CALL	lsl8
      8A 2E20      MOV	R2,R16
      8B 9420      COM	R2
      8C B238      IN	R3,0x18
      8D 2032      AND	R3,R2
      8E BA38      OUT	0x18,R3
(0027) 	PORTA|=BIT(4);
      8F 9ADC      SBI	0x1B,4
(0028) 	PORTA&=~BIT(4);
      90 98DC      CBI	0x1B,4
(0029) 	delay(80);//delay(1);
      91 E500      LDI	R16,0x50
      92 E010      LDI	R17,0
      93 DFCA      RCALL	_delay
      94 90C9      LD	R12,Y+
      95 90A9      LD	R10,Y+
      96 9508      RET
(0030) }
(0031) uchar key_press()
(0032) {
(0033)      uchar i;
(0034)      DDRC=0XFF;
_key_press:
  i                    --> R16
      97 EF8F      LDI	R24,0xFF
      98 BB84      OUT	0x14,R24
(0035) 	 PORTC=0XF0;
      99 EF80      LDI	R24,0xF0
      9A BB85      OUT	0x15,R24
(0036) 	 
(0037) 	 DDRC=0X0F;
      9B E08F      LDI	R24,0xF
      9C BB84      OUT	0x14,R24
(0038) 	 
(0039) 	 i=PINC;
      9D B303      IN	R16,0x13
(0040) 	 if(i==0XF0)
      9E 3F00      CPI	R16,0xF0
      9F F421      BNE	0x00A4
(0041) 	 {
(0042) 	   DDRC=0XFF;
      A0 EF8F      LDI	R24,0xFF
      A1 BB84      OUT	0x14,R24
(0043) 	   return 0;
      A2 2700      CLR	R16
      A3 C003      RJMP	0x00A7
(0044) 	 }
(0045) 	 else
(0046) 	 {
(0047) 	   DDRC=0XFF;
      A4 EF8F      LDI	R24,0xFF
      A5 BB84      OUT	0x14,R24
(0048) 	   return 1;
      A6 E001      LDI	R16,1
      A7 9508      RET
_key_scan:
  j                    --> R10
  key                  --> R20
  i                    --> R22
      A8 940E 0193 CALL	push_xgsetF00C
(0049) 	 }
(0050) }
(0051) 
(0052) uchar key_scan()
(0053) {
(0054)      uchar key,i=0X7F,j;
      AA E76F      LDI	R22,0x7F
(0055)      delay(10);
      AB E00A      LDI	R16,0xA
      AC E010      LDI	R17,0
      AD DFB0      RCALL	_delay
(0056) 	 if(key_press())
      AE DFE8      RCALL	_key_press
      AF 2300      TST	R16
      B0 F409      BNE	0x00B2
      B1 C091      RJMP	0x0143
(0057) 	 {
(0058) 	    do
(0059) 		{
(0060) 		 i=(i<<1|i>>7);
      B2 2E26      MOV	R2,R22
      B3 9426      LSR	R2
      B4 9426      LSR	R2
      B5 9426      LSR	R2
      B6 9426      LSR	R2
      B7 9426      LSR	R2
      B8 9426      LSR	R2
      B9 9426      LSR	R2
      BA 2E36      MOV	R3,R22
      BB 0C33      LSL	R3
      BC 2832      OR	R3,R2
      BD 2D63      MOV	R22,R3
(0061) 		 PORTC=i;
      BE BA35      OUT	0x15,R3
(0062) 		 DDRC=0X0F;
      BF E08F      LDI	R24,0xF
      C0 BB84      OUT	0x14,R24
(0063) 		 
(0064) 		 key=PINC;
      C1 B343      IN	R20,0x13
(0065) 		 j=key&0XF0;
      C2 2F84      MOV	R24,R20
      C3 7F80      ANDI	R24,0xF0
      C4 2EA8      MOV	R10,R24
(0066) 		 
(0067) 	    }while(j==0XF0);
      C5 2D8A      MOV	R24,R10
      C6 3F80      CPI	R24,0xF0
      C7 F351      BEQ	0x00B2
(0068) 		
(0069) 		while(key_press());
      C8 DFCE      RCALL	_key_press
      C9 2300      TST	R16
      CA F7E9      BNE	0x00C8
(0070) 		switch(key)
      CB 2F64      MOV	R22,R20
      CC 2777      CLR	R23
      CD 3B67      CPI	R22,0xB7
      CE E0E0      LDI	R30,0
      CF 077E      CPC	R23,R30
      D0 F409      BNE	0x00D2
      D1 C06B      RJMP	0x013D
      D2 3B6B      CPI	R22,0xBB
      D3 E0E0      LDI	R30,0
      D4 077E      CPC	R23,R30
      D5 F409      BNE	0x00D7
      D6 C05E      RJMP	0x0135
      D7 3B6D      CPI	R22,0xBD
      D8 E0E0      LDI	R30,0
      D9 077E      CPC	R23,R30
      DA F409      BNE	0x00DC
      DB C051      RJMP	0x012D
      DC 3B6E      CPI	R22,0xBE
      DD E0E0      LDI	R30,0
      DE 077E      CPC	R23,R30
      DF F409      BNE	0x00E1
      E0 C044      RJMP	0x0125
      E1 EB8E      LDI	R24,0xBE
      E2 E090      LDI	R25,0
      E3 1786      CP	R24,R22
      E4 0797      CPC	R25,R23
      E5 F0A4      BLT	0x00FA
      E6 3767      CPI	R22,0x77
      E7 E0E0      LDI	R30,0
      E8 077E      CPC	R23,R30
      E9 F409      BNE	0x00EB
      EA C054      RJMP	0x013F
      EB 376B      CPI	R22,0x7B
      EC E0E0      LDI	R30,0
      ED 077E      CPC	R23,R30
      EE F409      BNE	0x00F0
      EF C047      RJMP	0x0137
      F0 376D      CPI	R22,0x7D
      F1 E0E0      LDI	R30,0
      F2 077E      CPC	R23,R30
      F3 F409      BNE	0x00F5
      F4 C03A      RJMP	0x012F
      F5 376E      CPI	R22,0x7E
      F6 E0E0      LDI	R30,0
      F7 077E      CPC	R23,R30
      F8 F171      BEQ	0x0127
      F9 C047      RJMP	0x0141
      FA 3D67      CPI	R22,0xD7
      FB E0E0      LDI	R30,0
      FC 077E      CPC	R23,R30
      FD F409      BNE	0x00FF
      FE C03C      RJMP	0x013B
      FF 3D6B      CPI	R22,0xDB
     100 E0E0      LDI	R30,0
     101 077E      CPC	R23,R30
     102 F181      BEQ	0x0133
     103 3D6D      CPI	R22,0xDD
     104 E0E0      LDI	R30,0
     105 077E      CPC	R23,R30
     106 F121      BEQ	0x012B
     107 3D6E      CPI	R22,0xDE
     108 E0E0      LDI	R30,0
     109 077E      CPC	R23,R30
     10A F0C1      BEQ	0x0123
     10B 3D67      CPI	R22,0xD7
     10C E0E0      LDI	R30,0
     10D 077E      CPC	R23,R30
     10E F40C      BGE	0x0110
     10F C031      RJMP	0x0141
     110 3E67      CPI	R22,0xE7
     111 E0E0      LDI	R30,0
     112 077E      CPC	R23,R30
     113 F129      BEQ	0x0139
     114 3E6B      CPI	R22,0xEB
     115 E0E0      LDI	R30,0
     116 077E      CPC	R23,R30
     117 F0C9      BEQ	0x0131
     118 3E6D      CPI	R22,0xED
     119 E0E0      LDI	R30,0
     11A 077E      CPC	R23,R30
     11B F069      BEQ	0x0129
     11C 3E6E      CPI	R22,0xEE
     11D E0E0      LDI	R30,0
     11E 077E      CPC	R23,R30
     11F F009      BEQ	0x0121
     120 C020      RJMP	0x0141
(0071) 		{
(0072)        case 0xEE:
(0073) 	   		key=0x0;
     121 2744      CLR	R20
(0074) 			break;
     122 C021      RJMP	0x0144
(0075) 	   case 0xDE:
(0076) 	   		key=0x1;
     123 E041      LDI	R20,1
(0077) 			break; 
     124 C01F      RJMP	0x0144
(0078) 	   case 0xBE:
(0079) 	   		key=0x2;
     125 E042      LDI	R20,2
(0080) 			break;
     126 C01D      RJMP	0x0144
(0081) 	   case 0x7E:
(0082) 	   		key=0x3;
     127 E043      LDI	R20,3
(0083) 			break;
     128 C01B      RJMP	0x0144
(0084) 	   case 0xED:
(0085) 	   		key=0x4;
     129 E044      LDI	R20,4
(0086) 			break;
     12A C019      RJMP	0x0144
(0087) 	   case 0xDD:
(0088) 	   		key=0x5;
     12B E045      LDI	R20,5
(0089) 			break;
     12C C017      RJMP	0x0144
(0090) 	   case 0xBD:
(0091) 	   		key=0x6;
     12D E046      LDI	R20,6
(0092) 			break;
     12E C015      RJMP	0x0144
(0093) 	   case 0x7D:
(0094) 	   		key=0x7;
     12F E047      LDI	R20,7
(0095) 			break;
     130 C013      RJMP	0x0144
(0096) 	   case 0xEB:
(0097) 	   		key=0x8;
     131 E048      LDI	R20,0x8
(0098) 			break;
     132 C011      RJMP	0x0144
(0099) 	   case 0xDB:
(0100) 	   		key=0x9;
     133 E049      LDI	R20,0x9
(0101) 			break;
     134 C00F      RJMP	0x0144
(0102) 	   case 0xBB:
(0103) 	   		key=0xA;
     135 E04A      LDI	R20,0xA
(0104) 			break;
     136 C00D      RJMP	0x0144
(0105) 	   case 0x7B:
(0106) 	   		key=0xB;
     137 E04B      LDI	R20,0xB
(0107) 			break;
     138 C00B      RJMP	0x0144
(0108) 	   case 0xE7:
(0109) 	   		key=0xC;
     139 E04C      LDI	R20,0xC
(0110) 			break;
     13A C009      RJMP	0x0144
(0111) 	   case 0xD7:
(0112) 	   		key=0xD;
     13B E04D      LDI	R20,0xD
(0113) 			break;
     13C C007      RJMP	0x0144
(0114) 	   case 0xB7:
(0115) 	   		key=0xE;
     13D E04E      LDI	R20,0xE
(0116) 			break;
     13E C005      RJMP	0x0144
(0117) 	   case 0x77:
(0118) 	   		key=0xF;
     13F E04F      LDI	R20,0xF
(0119) 			break;
     140 C003      RJMP	0x0144
(0120) 	   default:
(0121) 	        key=16;		
     141 E140      LDI	R20,0x10
(0122) 		}
(0123) 	 }
     142 C001      RJMP	0x0144
(0124) 	 else
(0125) 	 {
(0126) 	    key=16;
     143 E140      LDI	R20,0x10
(0127) 	 }
(0128) 	 return key;
     144 2F04      MOV	R16,R20
     145 940C 019A JMP	pop_xgsetF00C
_jpsm:
     147 920A      ST	R0,-Y
     148 921A      ST	R1,-Y
     149 922A      ST	R2,-Y
     14A 923A      ST	R3,-Y
     14B 924A      ST	R4,-Y
     14C 925A      ST	R5,-Y
     14D 926A      ST	R6,-Y
     14E 927A      ST	R7,-Y
     14F 928A      ST	R8,-Y
     150 929A      ST	R9,-Y
     151 930A      ST	R16,-Y
     152 931A      ST	R17,-Y
     153 932A      ST	R18,-Y
     154 933A      ST	R19,-Y
     155 938A      ST	R24,-Y
     156 939A      ST	R25,-Y
     157 93AA      ST	R26,-Y
     158 93BA      ST	R27,-Y
     159 93EA      ST	R30,-Y
     15A 93FA      ST	R31,-Y
     15B B60F      IN	R0,0x3F
     15C 920A      ST	R0,-Y
(0129) }
(0130) void jpsm()
(0131) {	   if(key_press())
     15D DF39      RCALL	_key_press
     15E 2300      TST	R16
     15F F029      BEQ	0x0165
(0132) 	   {
(0133) 	      l=key_scan();
     160 DF47      RCALL	_key_scan
     161 9300 0060 STS	l,R16
(0134) 		  show(l,0);
     163 2722      CLR	R18
     164 DF0E      RCALL	_show
(0135) 	   } 
     165 9009      LD	R0,Y+
     166 BE0F      OUT	0x3F,R0
     167 91F9      LD	R31,Y+
     168 91E9      LD	R30,Y+
     169 91B9      LD	R27,Y+
     16A 91A9      LD	R26,Y+
     16B 9199      LD	R25,Y+
     16C 9189      LD	R24,Y+
     16D 9139      LD	R19,Y+
     16E 9129      LD	R18,Y+
     16F 9119      LD	R17,Y+
     170 9109      LD	R16,Y+
     171 9099      LD	R9,Y+
     172 9089      LD	R8,Y+
     173 9079      LD	R7,Y+
     174 9069      LD	R6,Y+
     175 9059      LD	R5,Y+
     176 9049      LD	R4,Y+
     177 9039      LD	R3,Y+
     178 9029      LD	R2,Y+
     179 9019      LD	R1,Y+
     17A 9009      LD	R0,Y+
     17B 9518      RETI
(0136) 
(0137) }
(0138) 		 
(0139) void main()
(0140) {
(0141)     DDRB=0XFF;
_main:
     17C EF8F      LDI	R24,0xFF
     17D BB87      OUT	0x17,R24
(0142) 	DDRA|=0X18;//573锁存端
     17E B38A      IN	R24,0x1A
     17F 6188      ORI	R24,0x18
     180 BB8A      OUT	0x1A,R24
(0143) 	DDRD|=BIT(3);//外部中断1的触发管脚
     181 9A8B      SBI	0x11,3
(0144) 	PORTD&=~BIT(3);
     182 9893      CBI	0x12,3
(0145) 	GICR|=BIT(7);
     183 B78B      IN	R24,0x3B
     184 6880      ORI	R24,0x80
     185 BF8B      OUT	0x3B,R24
(0146) 	SREG|=BIT(7);//总中断
     186 9478      BSET	7
(0147) 	while(1){	;}
FILE: <library>
     187 CFFF      RJMP	0x0187
     188 9508      RET
push_xgsetF000:
     189 937A      ST	R23,-Y
     18A 936A      ST	R22,-Y
     18B 935A      ST	R21,-Y
     18C 934A      ST	R20,-Y
     18D 9508      RET
pop_xgsetF000:
     18E 9149      LD	R20,Y+
     18F 9159      LD	R21,Y+
     190 9169      LD	R22,Y+
     191 9179      LD	R23,Y+
     192 9508      RET
push_xgsetF00C:
     193 937A      ST	R23,-Y
     194 936A      ST	R22,-Y
     195 935A      ST	R21,-Y
     196 934A      ST	R20,-Y
     197 92BA      ST	R11,-Y
     198 92AA      ST	R10,-Y
     199 9508      RET
pop_xgsetF00C:
     19A 90A9      LD	R10,Y+
     19B 90B9      LD	R11,Y+
     19C 9149      LD	R20,Y+
     19D 9159      LD	R21,Y+
     19E 9169      LD	R22,Y+
     19F 9179      LD	R23,Y+
     1A0 9508      RET
lsl8:
     1A1 2311      TST	R17
     1A2 F019      BEQ	0x01A6
     1A3 0F00      LSL	R16
     1A4 951A      DEC	R17
     1A5 CFFB      RJMP	lsl8
     1A6 9508      RET

⌨️ 快捷键说明

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