📄 onekey.lst
字号:
__start:
__text_start:
0018 E5CF LDI R28,0x5F
0019 E0D4 LDI R29,4
001A BFCD OUT 0x3D,R28
001B BFDE OUT 0x3E,R29
001C 51C0 SUBI R28,0x10
001D 40D0 SBCI R29,0
001E EA0A LDI R16,0xAA
001F 8308 STD Y+0,R16
0020 2400 CLR R0
0021 E6E0 LDI R30,0x60
0022 E0F0 LDI R31,0
0023 E010 LDI R17,0
0024 36E1 CPI R30,0x61
0025 07F1 CPC R31,R17
0026 F011 BEQ 0x0029
0027 9201 ST R0,Z+
0028 CFFB RJMP 0x0024
0029 8300 STD Z+0,R16
002A E3E0 LDI R30,0x30
002B E0F0 LDI R31,0
002C E6A0 LDI R26,0x60
002D E0B0 LDI R27,0
002E E010 LDI R17,0
002F 33E0 CPI R30,0x30
0030 07F1 CPC R31,R17
0031 F021 BEQ 0x0036
0032 95C8 LPM
0033 9631 ADIW R30,1
0034 920D ST R0,X+
0035 CFF9 RJMP 0x002F
0036 D044 RCALL _main
_exit:
0037 CFFF RJMP _exit
FILE: F:\Learn\AVR\Pro_Mega8\KEY\OneKey\Delay.h
(0001) //延时1MS
(0002) void delay_1ms(void)
(0003) {
(0004) unsigned int i;
(0005) for(i=1;i<(unsigned int)(1144-2);i++)
_delay_1ms:
i --> R16
0038 E001 LDI R16,1
0039 E010 LDI R17,0
003A C002 RJMP 0x003D
003B 5F0F SUBI R16,0xFF
003C 4F1F SBCI R17,0xFF
003D 3706 CPI R16,0x76
003E E0E4 LDI R30,4
003F 071E CPC R17,R30
0040 F3D0 BCS 0x003B
(0006) ;
(0007) }
0041 9508 RET
_delay_ms:
i --> R20
n --> R22
0042 D077 RCALL push_gset2
0043 01B8 MOVW R22,R16
(0008)
(0009) //延时nMS
(0010) void delay_ms(unsigned int n)
(0011) {
(0012) unsigned int i=0;
0044 2744 CLR R20
0045 2755 CLR R21
0046 C003 RJMP 0x004A
(0013) while(i<n)
(0014) {
(0015) delay_1ms();
0047 DFF0 RCALL _delay_1ms
(0016) i++;
0048 5F4F SUBI R20,0xFF
0049 4F5F SBCI R21,0xFF
004A 1746 CP R20,R22
004B 0757 CPC R21,R23
004C F3D0 BCS 0x0047
(0017) }
(0018) }
004D D053 RCALL pop_gset2
004E 9508 RET
_ScanKey:
key --> R20
004F D06A RCALL push_gset2
FILE: F:\Learn\AVR\Pro_Mega8\KEY\OneKey\OneKey.C
(0001) /******************************************/
(0002) //文件名:Int0.c
(0003) //功能: 外部中断的应用
(0004) //作者: young
(0005) //时间: 2006.10.1
(0006) //目标MCU:ATmega8
(0007) //晶振: 8MHZ
(0008) /******************************************/
(0009) #include <iom8v.h>
(0010) //#include <macros.h>
(0011) #include "Delay.h"
(0012)
(0013) unsigned char CountNum; //全局变量,用来计数
(0014)
(0015) //按键扫描函数
(0016) void ScanKey(void)
(0017) {
(0018) unsigned char key;
(0019) key=PINC;
0050 B343 IN R20,0x13
(0020) if(1==key&0x01)
0051 3041 CPI R20,1
0052 F419 BNE 0x0056
0053 E061 LDI R22,1
0054 E070 LDI R23,0
0055 C002 RJMP 0x0058
0056 2766 CLR R22
0057 2777 CLR R23
0058 FF60 SBRS R22,0
0059 C001 RJMP 0x005B
(0021) return;
005A C01E RJMP 0x0079
(0022) delay_ms(10);
005B E00A LDI R16,0xA
005C E010 LDI R17,0
005D DFE4 RCALL _delay_ms
(0023)
(0024) key=PINC;
005E B343 IN R20,0x13
(0025) if(1==key&0x01)
005F 3041 CPI R20,1
0060 F419 BNE 0x0064
0061 E061 LDI R22,1
0062 E070 LDI R23,0
0063 C002 RJMP 0x0066
0064 2766 CLR R22
0065 2777 CLR R23
0066 FF60 SBRS R22,0
0067 C001 RJMP 0x0069
(0026) return;
0068 C010 RJMP 0x0079
(0027) CountNum++;
0069 91800060 LDS R24,_CountNum
006B 5F8F SUBI R24,0xFF
006C 93800060 STS _CountNum,R24
006E C001 RJMP 0x0070
(0028) while(0==key&0x01)
(0029) key=PINC;
006F B343 IN R20,0x13
0070 2344 TST R20
0071 F419 BNE 0x0075
0072 E061 LDI R22,1
0073 E070 LDI R23,0
0074 C002 RJMP 0x0077
0075 2766 CLR R22
0076 2777 CLR R23
0077 FD60 SBRC R22,0
0078 CFF6 RJMP 0x006F
(0030) }
0079 D027 RCALL pop_gset2
007A 9508 RET
_main:
temp --> Y+1
num --> Y+0
007B 972A SBIW R28,0xA
(0031)
(0032) //主函数,显示数据时先关中断,然后再打开
(0033) void main()
(0034) {
(0035) unsigned char temp;
(0036) unsigned char num[10]={0x3F, 0x06, 0x5B, 0x4F, 0x66,
007C E286 LDI R24,0x26
007D E090 LDI R25,0
007E 01FE MOVW R30,R28
007F E00A LDI R16,0xA
0080 E010 LDI R17,0
0081 93FA ST R31,-Y
0082 93EA ST R30,-Y
0083 939A ST R25,-Y
0084 938A ST R24,-Y
0085 D037 RCALL asgncblk
(0037) 0x6D, 0x7D, 0x07, 0x7F, 0x6F};
(0038) //初始化端口
(0039) DDRB=0xFF; //设置B口为输出模式
0086 EF8F LDI R24,0xFF
0087 BB87 OUT 0x17,R24
(0040) PORTB=0xFF; //置高电平
0088 BB88 OUT 0x18,R24
(0041) DDRC=0x00;
0089 2422 CLR R2
008A BA24 OUT 0x14,R2
(0042) //PORTC=0xFF;
(0043)
(0044) CountNum=0; //初始化全局变量
008B 92200060 STS _CountNum,R2
008D C010 RJMP 0x009E
(0045) while (1)
(0046) {
(0047) ScanKey();//扫描按键
008E DFC0 RCALL _ScanKey
(0048) if(CountNum>=10)
008F 91800060 LDS R24,_CountNum
0091 308A CPI R24,0xA
0092 F018 BCS 0x0096
(0049) CountNum-=10;
0093 508A SUBI R24,0xA
0094 93800060 STS _CountNum,R24
(0050) PORTB=num[CountNum];
0096 01CE MOVW R24,R28
0097 91E00060 LDS R30,_CountNum
0099 27FF CLR R31
009A 0FE8 ADD R30,R24
009B 1FF9 ADC R31,R25
009C 8020 LDD R2,Z+0
009D BA28 OUT 0x18,R2
009E CFEF RJMP 0x008E
(0051) }
(0052) }
FILE: <library>
009F 962A ADIW R28,0xA
00A0 9508 RET
pop_gset2:
00A1 E0E2 LDI R30,2
00A2 C004 RJMP pop
push_gset1:
00A3 935A ST R21,-Y
00A4 934A ST R20,-Y
00A5 9508 RET
pop_gset1:
00A6 E0E1 LDI R30,1
pop:
00A7 9149 LD R20,Y+
00A8 9159 LD R21,Y+
00A9 FDE0 SBRC R30,0
00AA 9508 RET
00AB 9169 LD R22,Y+
00AC 9179 LD R23,Y+
00AD FDE1 SBRC R30,1
00AE 9508 RET
00AF 90A9 LD R10,Y+
00B0 90B9 LD R11,Y+
00B1 FDE2 SBRC R30,2
00B2 9508 RET
00B3 90C9 LD R12,Y+
00B4 90D9 LD R13,Y+
00B5 FDE3 SBRC R30,3
00B6 9508 RET
00B7 90E9 LD R14,Y+
00B8 90F9 LD R15,Y+
00B9 9508 RET
push_gset2:
00BA 937A ST R23,-Y
00BB 936A ST R22,-Y
00BC CFE6 RJMP push_gset1
asgncblk:
00BD 93AA ST R26,-Y
00BE 93BA ST R27,-Y
00BF 93EA ST R30,-Y
00C0 93FA ST R31,-Y
00C1 920A ST R0,-Y
00C2 81AF LDD R26,Y+7
00C3 85B8 LDD R27,Y+8
00C4 81ED LDD R30,Y+5
00C5 81FE LDD R31,Y+6
00C6 3000 CPI R16,0
00C7 0701 CPC R16,R17
00C8 F031 BEQ 0x00CF
00C9 95C8 LPM
00CA 920D ST R0,X+
00CB 9631 ADIW R30,1
00CC 5001 SUBI R16,1
00CD 4010 SBCI R17,0
00CE CFF7 RJMP 0x00C6
00CF 9009 LD R0,Y+
00D0 91F9 LD R31,Y+
00D1 91E9 LD R30,Y+
00D2 91B9 LD R27,Y+
00D3 91A9 LD R26,Y+
00D4 9624 ADIW R28,4
00D5 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -