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

📄 lesson5.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 E6E0      LDI	R30,0x60
      45 E0F0      LDI	R31,0
      46 E010      LDI	R17,0
      47 36E0      CPI	R30,0x60
      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 E7E6      LDI	R30,0x76
      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 00D6 CALL	_main
_exit:
      5D CFFF      RJMP	_exit
_delay:
  i                    --> R20
  j                    --> R22
  ms                   --> R16
      5E 940E 00E5 CALL	push_xgsetF000
FILE: G:\学习\avr\天祥电子AVR视频教程\chengxu\lesson5\lesson5.c
(0001) #include <iom16v.h>
(0002) #include <macros.h>
(0003) #define  uchar unsigned char
(0004) #define  uint  unsigned int
(0005) #pragma data:code
(0006) const  table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,
(0007) 		           0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0};
(0008) void delay(uint ms)
(0009) {
(0010)         uint i,j;
(0011) 	for(i=0;i<ms;i++)
      60 2744      CLR	R20
      61 2755      CLR	R21
      62 C00B      RJMP	0x006E
(0012) 	   {
(0013) 	   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 00EA 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
(0014)        }
(0015) }
(0016) void show(uchar j,uchar k)
(0017) {
(0018)     PORTA|=BIT(3);
      77 9ADB      SBI	0x1B,3
(0019) 	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
(0020) 	PORTA&=~BIT(3);
      83 98DB      CBI	0x1B,3
(0021) 	PORTB=0XFF;
      84 EF8F      LDI	R24,0xFF
      85 BB88      OUT	0x18,R24
(0022) 	PORTB&=~BIT(k);
      86 E001      LDI	R16,1
      87 2D1A      MOV	R17,R10
      88 940E 00EF 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
(0023) 	PORTA|=BIT(4);
      8F 9ADC      SBI	0x1B,4
(0024) 	PORTA&=~BIT(4);
      90 98DC      CBI	0x1B,4
(0025) 	delay(1);
      91 E001      LDI	R16,1
      92 E010      LDI	R17,0
      93 DFCA      RCALL	_delay
      94 90C9      LD	R12,Y+
      95 90A9      LD	R10,Y+
      96 9508      RET
(0026) }
(0027) 
(0028) uchar key_press()
(0029) {
(0030)     uchar j;
(0031)     DDRD|=0X0F;
_key_press:
  j                    --> R16
      97 B381      IN	R24,0x11
      98 608F      ORI	R24,0xF
      99 BB81      OUT	0x11,R24
(0032) 	PORTD|=0X0F;
      9A B382      IN	R24,0x12
      9B 608F      ORI	R24,0xF
      9C BB82      OUT	0x12,R24
(0033) 	
(0034) 	DDRD&=0XF0;
      9D B381      IN	R24,0x11
      9E 7F80      ANDI	R24,0xF0
      9F BB81      OUT	0x11,R24
(0035) 	
(0036) 	j=PIND;
      A0 B300      IN	R16,0x10
(0037) 	j=j&0X0F;//00001111
      A1 700F      ANDI	R16,0xF
(0038) 	if(j==0X0F)
      A2 300F      CPI	R16,0xF
      A3 F411      BNE	0x00A6
(0039) 	{
(0040) 	  return 0;
      A4 2700      CLR	R16
      A5 C001      RJMP	0x00A7
(0041) 	}
(0042) 	else
(0043) 	{
(0044) 	 return 1;
      A6 E001      LDI	R16,1
      A7 9508      RET
_key_scan:
  key                  --> R20
      A8 940E 00E5 CALL	push_xgsetF000
(0045) 	}
(0046) 	
(0047) }
(0048) 
(0049) uchar key_scan()
(0050) {
(0051)     uchar key;
(0052)     delay(10);
      AA E00A      LDI	R16,0xA
      AB E010      LDI	R17,0
      AC DFB1      RCALL	_delay
(0053) 	if(key_press())
      AD DFE9      RCALL	_key_press
      AE 2300      TST	R16
      AF F111      BEQ	0x00D2
(0054) 	{
(0055) 	key=PIND;
      B0 B340      IN	R20,0x10
(0056) 	key&=0X0F;
      B1 704F      ANDI	R20,0xF
(0057) 	switch(key)
      B2 2F64      MOV	R22,R20
      B3 2777      CLR	R23
      B4 3067      CPI	R22,7
      B5 E0E0      LDI	R30,0
      B6 077E      CPC	R23,R30
      B7 F099      BEQ	0x00CB
      B8 306B      CPI	R22,0xB
      B9 E0E0      LDI	R30,0
      BA 077E      CPC	R23,R30
      BB F069      BEQ	0x00C9
      BC 306D      CPI	R22,0xD
      BD E0E0      LDI	R30,0
      BE 077E      CPC	R23,R30
      BF F039      BEQ	0x00C7
      C0 306E      CPI	R22,0xE
      C1 E0E0      LDI	R30,0
      C2 077E      CPC	R23,R30
      C3 F009      BEQ	0x00C5
      C4 C008      RJMP	0x00CD
(0058) 	{
(0059) 	   case 0X0E: 
(0060) 	       key=1;
      C5 E041      LDI	R20,1
(0061) 		   break;
      C6 C007      RJMP	0x00CE
(0062) 	   case 0X0D:
(0063) 	       key=2;
      C7 E042      LDI	R20,2
(0064) 		   break;
      C8 C005      RJMP	0x00CE
(0065) 	   	 case 0X0B: 
(0066) 	       key=3;
      C9 E043      LDI	R20,3
(0067) 		   break;
      CA C003      RJMP	0x00CE
(0068) 	   case 0X07:
(0069) 	       key=4;
      CB E044      LDI	R20,4
(0070) 		   break; 
      CC C001      RJMP	0x00CE
(0071) 	   default:	
(0072) 	       key=16;     	   
      CD E140      LDI	R20,0x10
(0073) 	}
(0074) 	  while(key_press());
      CE DFC8      RCALL	_key_press
      CF 2300      TST	R16
      D0 F7E9      BNE	0x00CE
(0075) 	}
      D1 C001      RJMP	0x00D3
(0076) 	else
(0077) 	{
(0078) 	  key=16;
      D2 E140      LDI	R20,0x10
(0079) 	}
(0080) 	return key;
      D3 2F04      MOV	R16,R20
      D4 940C 00EA JMP	pop_xgsetF000
(0081) }
(0082) void main()
(0083) {
(0084)     uchar i,l;
(0085)     DDRA=0X18;//0001 1000
_main:
  l                    --> R10
  i                    --> R10
      D6 E188      LDI	R24,0x18
      D7 BB8A      OUT	0x1A,R24
(0086) 	DDRB=0XFF;
      D8 EF8F      LDI	R24,0xFF
      D9 BB87      OUT	0x17,R24
      DA C008      RJMP	0x00E3
(0087) 	while(1)
(0088) 	{
(0089) 	  i=key_press();
      DB DFBB      RCALL	_key_press
      DC 2EA0      MOV	R10,R16
(0090) 	  if(i)
      DD 2300      TST	R16
      DE F021      BEQ	0x00E3
(0091) 	  {
(0092) 	     l=key_scan();
      DF DFC8      RCALL	_key_scan
      E0 2EA0      MOV	R10,R16
(0093) 		 show(l,0);
FILE: <library>
      E1 2722      CLR	R18
      E2 DF90      RCALL	_show
      E3 CFF7      RJMP	0x00DB
      E4 9508      RET
push_xgsetF000:
      E5 937A      ST	R23,-Y
      E6 936A      ST	R22,-Y
      E7 935A      ST	R21,-Y
      E8 934A      ST	R20,-Y
      E9 9508      RET
pop_xgsetF000:
      EA 9149      LD	R20,Y+
      EB 9159      LD	R21,Y+
      EC 9169      LD	R22,Y+
      ED 9179      LD	R23,Y+
      EE 9508      RET
lsl8:
      EF 2311      TST	R17
      F0 F019      BEQ	0x00F4
      F1 0F00      LSL	R16
      F2 951A      DEC	R17
      F3 CFFB      RJMP	lsl8
      F4 9508      RET

⌨️ 快捷键说明

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