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

📄 keypwm.lst

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

Program Code (text area)
__start|__text_start:
    00038 E5CF      LDI	R28,0x5F
    00039 E0D4      LDI	R29,4
    0003A BFCD      OUT	0x3D,R28
    0003B BFDE      OUT	0x3E,R29
    0003C 51CE      SUBI	R28,0x1E
    0003D 40D0      SBCI	R29,0
    0003E EA0A      LDI	R16,0xAA
    0003F 8308      ST	Y,R16
    00040 2400      CLR	R0
    00041 E7EB      LDI	R30,0x7B
    00042 E0F0      LDI	R31,0
    00043 E010      LDI	R17,0
    00044 37EB      CPI	R30,0x7B
    00045 07F1      CPC	R31,R17
    00046 F011      BEQ	0x0049
    00047 9201      ST	Z+,R0
    00048 CFFB      RJMP	0x0044
    00049 8300      ST	Z,R16
    0004A E5E4      LDI	R30,0x54
    0004B E0F0      LDI	R31,0
    0004C E6A0      LDI	R26,0x60
    0004D E0B0      LDI	R27,0
    0004E E010      LDI	R17,0
    0004F E000      LDI	R16,0
    00050 BF0B      OUT	0x3B,R16
    00051 36EF      CPI	R30,0x6F
    00052 07F1      CPC	R31,R17
    00053 F021      BEQ	0x0058
    00054 95C8      LPM
    00055 9631      ADIW	R30,1
    00056 920D      ST	X+,R0
    00057 CFF9      RJMP	0x0051
    00058 940E 00D4 CALL	_main
_exit:
    0005A CFFF      RJMP	_exit
_delay:
  i                    --> R20
  j                    --> R22
  ms                   --> R16
    0005B 940E 0117 CALL	push_xgsetF000
FILE: E:\AVR自编程序\11实验板\14按键设置占空比\keypwm.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,0x80};
(0008) uchar const LED_W[8] = {0,1,2,3,4,5,6,7};	
(0009) uchar key_valu=0,l=0;					   
(0010) void delay(uint ms)
(0011) {
(0012)         uint i,j;
(0013) 	for(i=0;i<ms;i++)
    0005D 2744      CLR	R20
    0005E 2755      CLR	R21
    0005F C00B      RJMP	0x006B
(0014) 	   {
(0015) 	   for(j=0;j<1141;j++);
    00060 2766      CLR	R22
    00061 2777      CLR	R23
    00062 C002      RJMP	0x0065
    00063 5F6F      SUBI	R22,0xFF
    00064 4F7F      SBCI	R23,0xFF
    00065 3765      CPI	R22,0x75
    00066 E0E4      LDI	R30,4
    00067 077E      CPC	R23,R30
    00068 F3D0      BCS	0x0063
    00069 5F4F      SUBI	R20,0xFF
    0006A 4F5F      SBCI	R21,0xFF
    0006B 1740      CP	R20,R16
    0006C 0751      CPC	R21,R17
    0006D F390      BCS	0x0060
    0006E 940C 011C JMP	pop_xgsetF000
_show:
  k                    --> R10
  j                    --> R12
    00070 92AA      ST	-Y,R10
    00071 92CA      ST	-Y,R12
    00072 2EA2      MOV	R10,R18
    00073 2EC0      MOV	R12,R16
(0016)        }
(0017) }
(0018) void show(uchar j,uchar k)
(0019) {
(0020)         PORTA = table[j];		 // i 值的 个位数
    00074 E680      LDI	R24,0x60
    00075 E090      LDI	R25,0
    00076 2DEC      MOV	R30,R12
    00077 27FF      CLR	R31
    00078 0FE8      ADD	R30,R24
    00079 1FF9      ADC	R31,R25
    0007A 8020      LD	R2,Z
    0007B BA2B      OUT	0x1B,R2
(0021) 		PORTC = LED_W[k];		 //点亮第一位数码管
    0007C E781      LDI	R24,0x71
    0007D E090      LDI	R25,0
    0007E 2DEA      MOV	R30,R10
    0007F 27FF      CLR	R31
    00080 0FE8      ADD	R30,R24
    00081 1FF9      ADC	R31,R25
    00082 8020      LD	R2,Z
    00083 BA25      OUT	0x15,R2
(0022) 		
(0023) 		delay(2);
    00084 E002      LDI	R16,2
    00085 E010      LDI	R17,0
    00086 DFD4      RCALL	_delay
    00087 90C9      LD	R12,Y+
    00088 90A9      LD	R10,Y+
    00089 9508      RET
(0024) 	
(0025) }
(0026) 
(0027) uchar key_press()
(0028) {
(0029)     uchar j;
(0030)     DDRD|=0X1c;
_key_press:
  j                    --> R16
    0008A B381      IN	R24,0x11
    0008B 618C      ORI	R24,0x1C
    0008C BB81      OUT	0x11,R24
(0031) 	PORTD|=0X1c;
    0008D B382      IN	R24,0x12
    0008E 618C      ORI	R24,0x1C
    0008F BB82      OUT	0x12,R24
(0032) 	
(0033) 	DDRD&=0Xe3;
    00090 B381      IN	R24,0x11
    00091 7E83      ANDI	R24,0xE3
    00092 BB81      OUT	0x11,R24
(0034) 	
(0035) 	j=PIND;
    00093 B300      IN	R16,0x10
(0036) 	j=j&0X1c;//00001111
    00094 710C      ANDI	R16,0x1C
(0037) 	if(j==0X1c)
    00095 310C      CPI	R16,0x1C
    00096 F411      BNE	0x0099
(0038) 	{
(0039) 	  return 0;
    00097 2700      CLR	R16
    00098 C001      RJMP	0x009A
(0040) 	}
(0041) 	else
(0042) 	{
(0043) 	 return 1;
    00099 E001      LDI	R16,1
    0009A 9508      RET
_key_scan:
  key                  --> R20
    0009B 934A      ST	-Y,R20
    0009C 935A      ST	-Y,R21
(0044) 	}
(0045) 	
(0046) }
(0047) 
(0048) uchar key_scan()
(0049) {
(0050)     uchar key;
(0051)     delay(10);
    0009D E00A      LDI	R16,0xA
    0009E E010      LDI	R17,0
    0009F DFBB      RCALL	_delay
(0052) 	if(key_press())
    000A0 DFE9      RCALL	_key_press
    000A1 2300      TST	R16
    000A2 F149      BEQ	0x00CC
(0053) 	{
(0054) 	key=PIND;
    000A3 B340      IN	R20,0x10
(0055) 	key&=0X1c;
    000A4 714C      ANDI	R20,0x1C
(0056) 	switch(key)
    000A5 2755      CLR	R21
    000A6 3144      CPI	R20,0x14
    000A7 E0E0      LDI	R30,0
    000A8 075E      CPC	R21,R30
    000A9 F0B9      BEQ	0x00C1
    000AA E184      LDI	R24,0x14
    000AB E090      LDI	R25,0
    000AC 1784      CP	R24,R20
    000AD 0795      CPC	R25,R21
    000AE F02C      BLT	0x00B4
    000AF 304C      CPI	R20,0xC
    000B0 E0E0      LDI	R30,0
    000B1 075E      CPC	R21,R30
    000B2 F051      BEQ	0x00BD
    000B3 C011      RJMP	0x00C5
    000B4 3148      CPI	R20,0x18
    000B5 E0E0      LDI	R30,0
    000B6 075E      CPC	R21,R30
    000B7 F009      BEQ	0x00B9
    000B8 C00C      RJMP	0x00C5
(0057) 	{
(0058) 	   
(0059) 	   case 0X18:
(0060) 	   		 
(0061) 	       key_valu=5;
    000B9 E085      LDI	R24,5
    000BA 9380 0079 STS	key_valu,R24
(0062) 		  
(0063) 		   break;
    000BC C00B      RJMP	0x00C8
(0064) 	   	 case 0X0c: 
(0065) 		 	  
(0066) 	       key_valu=10;
    000BD E08A      LDI	R24,0xA
    000BE 9380 0079 STS	key_valu,R24
(0067) 		   break;
    000C0 C007      RJMP	0x00C8
(0068) 	   case 0X14:
(0069) 	   		 
(0070) 	       key_valu=15;
    000C1 E08F      LDI	R24,0xF
    000C2 9380 0079 STS	key_valu,R24
(0071) 		   
(0072) 			break;
    000C4 C003      RJMP	0x00C8
(0073) 	  default:	
(0074) 	      key_valu=0;     	   
    000C5 2422      CLR	R2
    000C6 9220 0079 STS	key_valu,R2
(0075) 	}
(0076) 	  while(key_press());
    000C8 DFC1      RCALL	_key_press
    000C9 2300      TST	R16
    000CA F7E9      BNE	0x00C8
(0077) 	}
    000CB C003      RJMP	0x00CF
(0078) 	else
(0079) 	{
(0080) 	  key_valu=16;
    000CC E180      LDI	R24,0x10
    000CD 9380 0079 STS	key_valu,R24
(0081) 	}
(0082) 	return key_valu;
    000CF 9100 0079 LDS	R16,key_valu
    000D1 9159      LD	R21,Y+
    000D2 9149      LD	R20,Y+
    000D3 9508      RET
(0083) }
(0084) void main()
(0085) {
(0086)     uchar i=0;
_main:
  i                    --> R10
    000D4 24AA      CLR	R10
(0087)     DDRA=0xff;
    000D5 EF8F      LDI	R24,0xFF
    000D6 BB8A      OUT	0x1A,R24
(0088) 	DDRB=0XFF;
    000D7 BB87      OUT	0x17,R24
(0089) 	
(0090) 	 DDRD|=0X30;
    000D8 B381      IN	R24,0x11
    000D9 6380      ORI	R24,0x30
    000DA BB81      OUT	0x11,R24
(0091) 	
(0092) 	TCCR1A=0X63;
    000DB E683      LDI	R24,0x63
    000DC BD8F      OUT	0x2F,R24
(0093) 	TCCR1B=0X13;
    000DD E183      LDI	R24,0x13
    000DE BD8E      OUT	0x2E,R24
(0094) 	
(0095) 	OCR1A=1249;
    000DF EE81      LDI	R24,0xE1
    000E0 E094      LDI	R25,4
    000E1 BD9B      OUT	0x2B,R25
    000E2 BD8A      OUT	0x2A,R24
(0096) 	OCR1B=31;
    000E3 E18F      LDI	R24,0x1F
    000E4 E090      LDI	R25,0
    000E5 BD99      OUT	0x29,R25
    000E6 BD88      OUT	0x28,R24
    000E7 C02D      RJMP	0x0115
(0097) 	
(0098) 	
(0099) 	while(1)
(0100) 	{
(0101) 	   if(key_press())
    000E8 DFA1      RCALL	_key_press
    000E9 2300      TST	R16
    000EA F151      BEQ	0x0115
(0102) 	   {
(0103) 	       i=key_scan();
    000EB DFAF      RCALL	_key_scan
    000EC 2EA0      MOV	R10,R16
(0104) 		   switch(i)
    000ED 2D4A      MOV	R20,R10
    000EE 2755      CLR	R21
    000EF 304A      CPI	R20,0xA
    000F0 E0E0      LDI	R30,0
    000F1 075E      CPC	R21,R30
    000F2 F0A1      BEQ	0x0107
    000F3 E08A      LDI	R24,0xA
    000F4 E090      LDI	R25,0
    000F5 1784      CP	R24,R20
    000F6 0795      CPC	R25,R21
    000F7 F02C      BLT	0x00FD
    000F8 3045      CPI	R20,5
    000F9 E0E0      LDI	R30,0
    000FA 075E      CPC	R21,R30
    000FB F031      BEQ	0x0102
    000FC C014      RJMP	0x0111
    000FD 304F      CPI	R20,0xF
    000FE E0E0      LDI	R30,0
    000FF 075E      CPC	R21,R30
    00100 F059      BEQ	0x010C
    00101 C00F      RJMP	0x0111
(0105) 		   {
(0106) 		     case 5:
(0107) 			    OCR1B=31;
    00102 E18F      LDI	R24,0x1F
    00103 E090      LDI	R25,0
    00104 BD99      OUT	0x29,R25
    00105 BD88      OUT	0x28,R24
(0108) 				break;
    00106 C00E      RJMP	0x0115
(0109) 			 case 10:
(0110) 			    OCR1B=62;
    00107 E38E      LDI	R24,0x3E
    00108 E090      LDI	R25,0
    00109 BD99      OUT	0x29,R25
    0010A BD88      OUT	0x28,R24
(0111) 				break;
    0010B C009      RJMP	0x0115
(0112) 			 case 15:
(0113) 			    OCR1B=93; 
    0010C E58D      LDI	R24,0x5D
    0010D E090      LDI	R25,0
    0010E BD99      OUT	0x29,R25
    0010F BD88      OUT	0x28,R24
(0114) 				break;
    00110 C004      RJMP	0x0115
(0115) 			
(0116) 			default:
(0117) 			    OCR1B=124;		
FILE: <library>
    00111 E78C      LDI	R24,0x7C
    00112 E090      LDI	R25,0
    00113 BD99      OUT	0x29,R25
    00114 BD88      OUT	0x28,R24
    00115 CFD2      RJMP	0x00E8
    00116 9508      RET
push_xgsetF000:
    00117 937A      ST	-Y,R23
    00118 936A      ST	-Y,R22
    00119 935A      ST	-Y,R21
    0011A 934A      ST	-Y,R20
    0011B 9508      RET
pop_xgsetF000:
    0011C 9149      LD	R20,Y+
    0011D 9159      LD	R21,Y+
    0011E 9169      LD	R22,Y+
    0011F 9179      LD	R23,Y+
    00120 9508      RET

⌨️ 快捷键说明

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