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

📄 dkaj.lst

📁 avr基础程序大全
💻 LST
字号:
Interrupt Vectors
    00000 940C 0037 JMP	__text_start|__start

Program Code (text area)
__text_start|__start:
    00037 E5CF      LDI	R28,0x5F
    00038 E0D4      LDI	R29,4
    00039 BFCD      OUT	0x3D,R28
    0003A BFDE      OUT	0x3E,R29
    0003B 51CE      SUBI	R28,0x1E
    0003C 40D0      SBCI	R29,0
    0003D EA0A      LDI	R16,0xAA
    0003E 8308      ST	Y,R16
    0003F 2400      CLR	R0
    00040 E7EA      LDI	R30,0x7A
    00041 E0F0      LDI	R31,0
    00042 E010      LDI	R17,0
    00043 37EA      CPI	R30,0x7A
    00044 07F1      CPC	R31,R17
    00045 F011      BEQ	0x0048
    00046 9201      ST	Z+,R0
    00047 CFFB      RJMP	0x0043
    00048 8300      ST	Z,R16
    00049 E5E4      LDI	R30,0x54
    0004A E0F0      LDI	R31,0
    0004B E6A0      LDI	R26,0x60
    0004C E0B0      LDI	R27,0
    0004D E010      LDI	R17,0
    0004E E000      LDI	R16,0
    0004F BF0B      OUT	0x3B,R16
    00050 36EE      CPI	R30,0x6E
    00051 07F1      CPC	R31,R17
    00052 F021      BEQ	0x0057
    00053 95C8      LPM
    00054 9631      ADIW	R30,1
    00055 920D      ST	X+,R0
    00056 CFF9      RJMP	0x0050
    00057 940E 00DD CALL	_main
_exit:
    00059 CFFF      RJMP	_exit
_delay:
  i                    --> R20
  j                    --> R22
  ms                   --> R16
    0005A 940E 0106 CALL	push_xgsetF000
FILE: E:\AVR自编程序\11实验板\9独立按键\独立按键.c
(0001) #include <iom16v.h>
(0002) #include <macros.h>
(0003) #define  uchar unsigned char
(0004) #define  uint  unsigned int
(0005)  
(0006) uchar const  table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,
(0007) 		           0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0};
(0008) uchar const LED_W[8] = {0,1,2,3,4,5,6,7};	
(0009) uchar key_valu=0;					   
(0010) void delay(uint ms)
(0011) {
(0012)         uint i,j;
(0013) 	for(i=0;i<ms;i++)
    0005C 2744      CLR	R20
    0005D 2755      CLR	R21
    0005E C00B      RJMP	0x006A
(0014) 	   {
(0015) 	   for(j=0;j<1141;j++);
    0005F 2766      CLR	R22
    00060 2777      CLR	R23
    00061 C002      RJMP	0x0064
    00062 5F6F      SUBI	R22,0xFF
    00063 4F7F      SBCI	R23,0xFF
    00064 3765      CPI	R22,0x75
    00065 E0E4      LDI	R30,4
    00066 077E      CPC	R23,R30
    00067 F3D0      BCS	0x0062
    00068 5F4F      SUBI	R20,0xFF
    00069 4F5F      SBCI	R21,0xFF
    0006A 1740      CP	R20,R16
    0006B 0751      CPC	R21,R17
    0006C F390      BCS	0x005F
    0006D 940C 010B JMP	pop_xgsetF000
_show:
  k                    --> R10
  j                    --> R12
    0006F 92AA      ST	-Y,R10
    00070 92CA      ST	-Y,R12
    00071 2EA2      MOV	R10,R18
    00072 2EC0      MOV	R12,R16
(0016)        }
(0017) }
(0018) void show(uchar j,uchar k)
(0019) {
(0020)         PORTA = table[j];		 // i 值的 个位数
    00073 E680      LDI	R24,0x60
    00074 E090      LDI	R25,0
    00075 2DEC      MOV	R30,R12
    00076 27FF      CLR	R31
    00077 0FE8      ADD	R30,R24
    00078 1FF9      ADC	R31,R25
    00079 8020      LD	R2,Z
    0007A BA2B      OUT	0x1B,R2
(0021) 		PORTC = LED_W[k];		 //点亮第一位数码管
    0007B E781      LDI	R24,0x71
    0007C E090      LDI	R25,0
    0007D 2DEA      MOV	R30,R10
    0007E 27FF      CLR	R31
    0007F 0FE8      ADD	R30,R24
    00080 1FF9      ADC	R31,R25
    00081 8020      LD	R2,Z
    00082 BA25      OUT	0x15,R2
(0022) 		
(0023) 		delay(2);
    00083 E002      LDI	R16,2
    00084 E010      LDI	R17,0
    00085 DFD4      RCALL	_delay
    00086 90C9      LD	R12,Y+
    00087 90A9      LD	R10,Y+
    00088 9508      RET
(0024) 	
(0025) }
(0026) 
(0027) uchar key_press()
(0028) {
(0029)     uchar j;
(0030)     DDRD|=0X1c;
_key_press:
  j                    --> R16
    00089 B381      IN	R24,0x11
    0008A 618C      ORI	R24,0x1C
    0008B BB81      OUT	0x11,R24
(0031) 	PORTD|=0X1c;
    0008C B382      IN	R24,0x12
    0008D 618C      ORI	R24,0x1C
    0008E BB82      OUT	0x12,R24
(0032) 	
(0033) 	DDRD&=0Xe3;
    0008F B381      IN	R24,0x11
    00090 7E83      ANDI	R24,0xE3
    00091 BB81      OUT	0x11,R24
(0034) 	
(0035) 	j=PIND;
    00092 B300      IN	R16,0x10
(0036) 	j=j&0X1c;//00001111
    00093 710C      ANDI	R16,0x1C
(0037) 	if(j==0X1c)
    00094 310C      CPI	R16,0x1C
    00095 F411      BNE	0x0098
(0038) 	{
(0039) 	  return 0;
    00096 2700      CLR	R16
    00097 C001      RJMP	0x0099
(0040) 	}
(0041) 	else
(0042) 	{
(0043) 	 return 1;
    00098 E001      LDI	R16,1
    00099 9508      RET
_key_scan:
  key                  --> R20
    0009A 940E 0106 CALL	push_xgsetF000
(0044) 	}
(0045) 	
(0046) }
(0047) 
(0048) uchar key_scan()
(0049) {
(0050)     uchar key;
(0051)     delay(10);
    0009C E00A      LDI	R16,0xA
    0009D E010      LDI	R17,0
    0009E DFBB      RCALL	_delay
(0052) 	if(key_press())
    0009F DFE9      RCALL	_key_press
    000A0 2300      TST	R16
    000A1 F1B1      BEQ	0x00D8
(0053) 	{
(0054) 	key=PIND;
    000A2 B340      IN	R20,0x10
(0055) 	key&=0X1c;
    000A3 714C      ANDI	R20,0x1C
(0056) 	switch(key)
    000A4 2F64      MOV	R22,R20
    000A5 2777      CLR	R23
    000A6 3164      CPI	R22,0x14
    000A7 E0E0      LDI	R30,0
    000A8 077E      CPC	R23,R30
    000A9 F119      BEQ	0x00CD
    000AA E184      LDI	R24,0x14
    000AB E090      LDI	R25,0
    000AC 1786      CP	R24,R22
    000AD 0797      CPC	R25,R23
    000AE F02C      BLT	0x00B4
    000AF 306C      CPI	R22,0xC
    000B0 E0E0      LDI	R30,0
    000B1 077E      CPC	R23,R30
    000B2 F079      BEQ	0x00C2
    000B3 C01D      RJMP	0x00D1
    000B4 3168      CPI	R22,0x18
    000B5 E0E0      LDI	R30,0
    000B6 077E      CPC	R23,R30
    000B7 F009      BEQ	0x00B9
    000B8 C018      RJMP	0x00D1
(0057) 	{
(0058) 	   
(0059) 	   case 0X18:
(0060) 	       key_valu++;
    000B9 9180 0079 LDS	R24,key_valu
    000BB 5F8F      SUBI	R24,0xFF
    000BC 9380 0079 STS	key_valu,R24
(0061) 		   if(key_valu==16)
    000BE 3180      CPI	R24,0x10
    000BF F4A1      BNE	0x00D4
(0062) 		   	key=0;
    000C0 2744      CLR	R20
(0063) 		   break;
    000C1 C012      RJMP	0x00D4
(0064) 	   	 case 0X0c: 
(0065) 	       key_valu--;
    000C2 9180 0079 LDS	R24,key_valu
    000C4 5081      SUBI	R24,1
    000C5 9380 0079 STS	key_valu,R24
(0066) 		   if(key_valu<0)
    000C7 3080      CPI	R24,0
    000C8 F458      BCC	0x00D4
(0067) 		   key_valu=0;
    000C9 2422      CLR	R2
    000CA 9220 0079 STS	key_valu,R2
(0068) 		   break;
    000CC C007      RJMP	0x00D4
(0069) 	   case 0X14:
(0070) 	       key_valu=0;
    000CD 2422      CLR	R2
    000CE 9220 0079 STS	key_valu,R2
(0071) 		   
(0072) 			break;
    000D0 C003      RJMP	0x00D4
(0073) 	   default:	
(0074) 	       key_valu=0;     	   
    000D1 2422      CLR	R2
    000D2 9220 0079 STS	key_valu,R2
(0075) 	}
(0076) 	  while(key_press());
    000D4 DFB4      RCALL	_key_press
    000D5 2300      TST	R16
    000D6 F7E9      BNE	0x00D4
(0077) 	}
    000D7 C001      RJMP	0x00D9
(0078) 	else
(0079) 	{
(0080) 	  key=16;
    000D8 E140      LDI	R20,0x10
(0081) 	}
(0082) 	return key_valu;
    000D9 9100 0079 LDS	R16,key_valu
    000DB 940C 010B JMP	pop_xgsetF000
(0083) }
(0084) void main()
(0085) {
(0086)     uchar i,l;
(0087)     DDRA=0xff;
_main:
  l                    --> R10
  i                    --> R10
    000DD EF8F      LDI	R24,0xFF
    000DE BB8A      OUT	0x1A,R24
(0088) 	DDRB=0XFF;
    000DF BB87      OUT	0x17,R24
    000E0 C00B      RJMP	0x00EC
(0089) 	while(1)
(0090) 	{
(0091) 	  i=key_press();
    000E1 DFA7      RCALL	_key_press
    000E2 2EA0      MOV	R10,R16
(0092) 	  if(i)
    000E3 2300      TST	R16
    000E4 F039      BEQ	0x00EC
(0093) 	  {
(0094) 	     l=key_scan();
    000E5 DFB4      RCALL	_key_scan
    000E6 2EA0      MOV	R10,R16
(0095) 		 //show(l/10,1);
(0096) 		show(l%10,0);
FILE: <library>
    000E7 2722      CLR	R18
    000E8 E01A      LDI	R17,0xA
    000E9 940E 00EE CALL	mod8u
    000EB DF83      RCALL	_show
    000EC CFF4      RJMP	0x00E1
    000ED 9508      RET
mod8u:
    000EE 9468      BSET	6
    000EF C001      RJMP	xdiv8u
div8u:
    000F0 94E8      BCLR	6
xdiv8u:
    000F1 932A      ST	-Y,R18
    000F2 92FA      ST	-Y,R15
    000F3 92EA      ST	-Y,R14
    000F4 24FF      CLR	R15
    000F5 24EE      CLR	R14
    000F6 E120      LDI	R18,0x10
    000F7 0F00      LSL	R16
    000F8 1CFF      ROL	R15
    000F9 1CEE      ROL	R14
    000FA 16E1      CP	R14,R17
    000FB F010      BCS	0x00FE
    000FC 1AE1      SUB	R14,R17
    000FD 9503      INC	R16
    000FE 952A      DEC	R18
    000FF F7B9      BNE	0x00F7
    00100 F40E      BRTC	0x0102
    00101 2D0E      MOV	R16,R14
    00102 90E9      LD	R14,Y+
    00103 90F9      LD	R15,Y+
    00104 9129      LD	R18,Y+
    00105 9508      RET
push_xgsetF000:
    00106 937A      ST	-Y,R23
    00107 936A      ST	-Y,R22
    00108 935A      ST	-Y,R21
    00109 934A      ST	-Y,R20
    0010A 9508      RET
pop_xgsetF000:
    0010B 9149      LD	R20,Y+
    0010C 9159      LD	R21,Y+
    0010D 9169      LD	R22,Y+
    0010E 9179      LD	R23,Y+
    0010F 9508      RET

⌨️ 快捷键说明

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