📄 keypwm.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 + -