📄 mian.lst
字号:
__start:
__text_start:
0033 E5CF LDI R28,0x5F
0034 E0D4 LDI R29,4
0035 BFCD OUT P3D,R28
0036 BFDE OUT P3E,R29
0037 51C0 SUBI R28,0x10
0038 40D0 SBCI R29,0
0039 EA0A LDI R16,0xAA
003A 8308 STD R16,0+Y
003B 2400 CLR R0
003C E6E5 LDI R30,0x65
003D E0F0 LDI R31,0
003E E010 LDI R17,0
003F 36E5 CPI R30,0x65
0040 07F1 CPC R31,R17
0041 F011 BEQ 0x0044
0042 9201 ST R0,Z+
0043 CFFB RJMP 0x003F
0044 8300 STD R16,0+Z
0045 E6E0 LDI R30,0x60
0046 E0F0 LDI R31,0
0047 E6A0 LDI R26,0x60
0048 E0B0 LDI R27,0
0049 E010 LDI R17,0
004A 36E5 CPI R30,0x65
004B 07F1 CPC R31,R17
004C F021 BEQ 0x0051
004D 95C8 LPM
004E 9631 ADIW R30,1
004F 920D ST R0,X+
0050 CFF9 RJMP 0x004A
0051 940E00A1 CALL _main
_exit:
0053 CFFF RJMP _exit
FILE: D:\AVRchengcu\PS2--AVR\ps2\main.c
(0001) /******************************************************************************
(0002) //程序功能解码PC键盘,然后把键盘码值通过串口发送到串口显示
(0003) //晶振频率:16 MHZ
(0004) //单片机类型:maget 16
(0005) //编写日期:2009年3月13日 谢巍
(0006) *******************************************************************************/
(0007)
(0008) #include <iom16v.h>
(0009) #include <macros.h>
(0010)
(0011) #define IRsignal (PINA&BIT(0)) //检测一个端口电平输入情况就要这样定义了
(0012) #define DIR_I DDRA&=~BIT(0)
(0013) #define DIR_O DDRA|=BIT(0)
(0014)
(0015) //定义全局变量
(0016) unsigned char KB_HitFlag = 0; //按键标志
(0017) unsigned char KB_UpFlag = 0; //抬起标志
(0018) unsigned char KB_Buf=0; //键盘缓冲区
(0019)
(0020) //外部中断初始化函数
(0021) void init_devices(void)
(0022) {
(0023) MCUCR = 0x02; //INT1 的下降沿产生异步中断请求
_init_devices:
0054 E082 LDI R24,2
0055 BF85 OUT P35,R24
(0024) GICR = 0x40; //INT1中断使能
0056 E480 LDI R24,0x40
0057 BF8B OUT P3B,R24
(0025) TIMSK = 0x00; //timer interrupt sources
0058 2422 CLR R2
0059 BE29 OUT P39,R2
(0026) SEI(); //打开外部所有中断 两种表达方式是相同的
005A 9478 BSET 7
(0027) }
005B 9508 RET
_int1_isr:
005C 940E00CC CALL push_lset
(0028)
(0029) //外部中断1中断服务函数
(0030) #pragma interrupt_handler int1_isr:2
(0031) void int1_isr(void)
(0032) {
(0033) static unsigned char cnt = 0;
(0034) static unsigned char k=0;
(0035) if ( cnt == 0 ) //起始位
005E 90200063 LDS R2,__idata_start+3
0060 2022 TST R2
0061 F409 BNE 0x0063
(0036) {;
(0037) }
0062 C012 RJMP 0x0075
(0038) else if ( cnt <= 8 ) //数据位
0063 E088 LDI R24,0x8
0064 90200063 LDS R2,__idata_start+3
0066 1582 CP R24,R2
0067 F068 BCS 0x0075
(0039) {
(0040) k >>= 1;
0068 90200064 LDS R2,0x64
006A 9426 LSR R2
006B 92200064 STS R2,0x64
(0041) if (IRsignal==BIT(0))
006D B389 IN R24,P19
006E 7081 ANDI R24,1
006F 3081 CPI R24,1
0070 F421 BNE 0x0075
(0042) k|= 0x80;
0071 2D82 MOV R24,R2
0072 6880 ORI R24,0x80
0073 93800064 STS R24,0x64
(0043) }
(0044) else //校验位和停止位
(0045) {;
(0046) }
(0047) cnt++;
0075 91800063 LDS R24,__idata_start+3
0077 5F8F SUBI R24,0xFF
0078 93800063 STS R24,__idata_start+3
(0048) if ( cnt >= 11 ) //一帧数据接收完毕
007A 308B CPI R24,0xB
007B F110 BCS 0x009E
(0049) {
(0050) cnt = 0;
007C 2422 CLR R2
007D 92200063 STS R2,__idata_start+3
(0051) if ( k == 0xF0 ) //抬起标志
007F 91800064 LDS R24,0x64
0081 3F80 CPI R24,0xF0
0082 F421 BNE 0x0087
(0052) {
(0053) KB_UpFlag = 1;
0083 E081 LDI R24,1
0084 93800061 STS R24,__idata_start+1
(0054) }
0086 C017 RJMP 0x009E
(0055) else
(0056) {
(0057) if ( KB_UpFlag )
0087 90200061 LDS R2,__idata_start+1
0089 2022 TST R2
008A F021 BEQ 0x008F
(0058) {
(0059) KB_UpFlag = 0;
008B 2422 CLR R2
008C 92200061 STS R2,__idata_start+1
(0060) }
008E C00F RJMP 0x009E
(0061) else
(0062) {
(0063) KB_Buf = k;
008F 90200064 LDS R2,0x64
0091 92200062 STS R2,__idata_start+2
(0064) k=0;
0093 2422 CLR R2
0094 92200064 STS R2,0x64
(0065) KB_HitFlag = 1;
0096 E081 LDI R24,1
0097 93800060 STS R24,__idata_start
(0066)
(0067) put_c(KB_Buf);
0099 91000062 LDS R16,__idata_start+2
009B 2711 CLR R17
009C 940E00B3 CALL _put_c
(0068) }
(0069) }
(0070) }
(0071) }
009E 940E00E3 CALL pop_lset
00A0 9518 RETI
(0072)
(0073) void main()
(0074) {
(0075) init_devices();
_main:
00A1 DFB2 RCALL _init_devices
(0076) init_USART();
00A2 940E00A9 CALL _init_USART
(0077) KB_Buf=0;
00A4 2422 CLR R2
00A5 92200062 STS R2,__idata_start+2
(0078) while(1)
00A7 CFFF RJMP 0x00A7
(0079) {
(0080) ;
(0081) }
(0082)
(0083) }FILE: <library>
00A8 9508 RET
_init_USART:
00A9 E886 LDI R24,0x86
00AA BD80 OUT P20,R24
00AB E687 LDI R24,0x67
00AC B989 OUT P09,R24
00AD 2422 CLR R2
00AE BC20 OUT P20,R2
00AF B82B OUT P0B,R2
00B0 E988 LDI R24,0x98
00B1 B98A OUT P0A,R24
00B2 9508 RET
_put_c:
c --> R16
00B3 9B5D SBIS P0B,5
00B4 CFFE RJMP _put_c
00B5 B90C OUT P0C,R16
00B6 9508 RET
_put_s:
ptr --> R20
00B7 D042 RCALL push_gset1
00B8 2F40 MOV R20,R16
00B9 2F51 MOV R21,R17
00BA C006 RJMP 0x00C1
00BB 2FE4 MOV R30,R20
00BC 2FF5 MOV R31,R21
00BD 9101 LD R16,Z+
00BE 2F4E MOV R20,R30
00BF 2F5F MOV R21,R31
00C0 DFF2 RCALL _put_c
00C1 2FE4 MOV R30,R20
00C2 2FF5 MOV R31,R21
00C3 8020 LDD R2,0+Z
00C4 2022 TST R2
00C5 F7A9 BNE 0x00BB
00C6 E00D LDI R16,0xD
00C7 DFEB RCALL _put_c
00C8 E00A LDI R16,0xA
00C9 DFE9 RCALL _put_c
00CA D032 RCALL pop_gset1
00CB 9508 RET
push_lset:
00CC 93FA ST R31,-Y
00CD 93EA ST R30,-Y
00CE 93BA ST R27,-Y
00CF 93AA ST R26,-Y
00D0 939A ST R25,-Y
00D1 938A ST R24,-Y
00D2 933A ST R19,-Y
00D3 932A ST R18,-Y
00D4 931A ST R17,-Y
00D5 930A ST R16,-Y
00D6 929A ST R9,-Y
00D7 928A ST R8,-Y
00D8 927A ST R7,-Y
00D9 926A ST R6,-Y
00DA 925A ST R5,-Y
00DB 924A ST R4,-Y
00DC 923A ST R3,-Y
00DD 922A ST R2,-Y
00DE 921A ST R1,-Y
00DF 920A ST R0,-Y
00E0 B60F IN R0,P3F
00E1 920A ST R0,-Y
00E2 9508 RET
pop_lset:
00E3 9009 LD R0,Y+
00E4 BE0F OUT P3F,R0
00E5 9009 LD R0,Y+
00E6 9019 LD R1,Y+
00E7 9029 LD R2,Y+
00E8 9039 LD R3,Y+
00E9 9049 LD R4,Y+
00EA 9059 LD R5,Y+
00EB 9069 LD R6,Y+
00EC 9079 LD R7,Y+
00ED 9089 LD R8,Y+
00EE 9099 LD R9,Y+
00EF 9109 LD R16,Y+
00F0 9119 LD R17,Y+
00F1 9129 LD R18,Y+
00F2 9139 LD R19,Y+
00F3 9189 LD R24,Y+
00F4 9199 LD R25,Y+
00F5 91A9 LD R26,Y+
00F6 91B9 LD R27,Y+
00F7 91E9 LD R30,Y+
00F8 91F9 LD R31,Y+
00F9 9508 RET
push_gset1:
00FA 935A ST R21,-Y
00FB 934A ST R20,-Y
00FC 9508 RET
pop_gset1:
00FD E0E1 LDI R30,1
pop:
00FE 9149 LD R20,Y+
00FF 9159 LD R21,Y+
0100 FDE0 SBRC R30,0
0101 9508 RET
0102 9169 LD R22,Y+
0103 9179 LD R23,Y+
0104 FDE1 SBRC R30,1
0105 9508 RET
0106 90A9 LD R10,Y+
0107 90B9 LD R11,Y+
0108 FDE2 SBRC R30,2
0109 9508 RET
010A 90C9 LD R12,Y+
010B 90D9 LD R13,Y+
010C FDE3 SBRC R30,3
010D 9508 RET
010E 90E9 LD R14,Y+
010F 90F9 LD R15,Y+
0110 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -