📄 usart2.lst
字号:
__start:
__text_start:
002A E5CF LDI R28,0x5F
002B E0D4 LDI R29,4
002C BFCD OUT 0x3D,R28
002D BFDE OUT 0x3E,R29
002E 51C0 SUBI R28,0x10
002F 40D0 SBCI R29,0
0030 EA0A LDI R16,0xAA
0031 8308 STD Y+0,R16
0032 2400 CLR R0
0033 E6E0 LDI R30,0x60
0034 E0F0 LDI R31,0
0035 E010 LDI R17,0
0036 36E0 CPI R30,0x60
0037 07F1 CPC R31,R17
0038 F011 BEQ 0x003B
0039 9201 ST R0,Z+
003A CFFB RJMP 0x0036
003B 8300 STD Z+0,R16
003C E5E4 LDI R30,0x54
003D E0F0 LDI R31,0
003E E6A0 LDI R26,0x60
003F E0B0 LDI R27,0
0040 E010 LDI R17,0
0041 35E4 CPI R30,0x54
0042 07F1 CPC R31,R17
0043 F021 BEQ 0x0048
0044 95C8 LPM
0045 9631 ADIW R30,1
0046 920D ST R0,X+
0047 CFF9 RJMP 0x0041
0048 940E0059 CALL _main
_exit:
004A CFFF RJMP _exit
_uart0_rx_isr:
dat --> R20
004B 940E00BE CALL push_lset
004D 940E00A7 CALL push_gset1
FILE: F:\LX\USART\usart2.c
(0001) #include<iom16v.h>
(0002) #include <macros.h>
(0003) #define key (PIND&0x04) //定义按键PD2
(0004) /*****************函数原型声明************************/
(0005) void USART_Init(unsigned int baud);
(0006) void USART_Transmit(unsigned char dat);
(0007) void delayms(unsigned int t);
(0008) unsigned char USART_Receive(void);
(0009) /******************接收中断函数****************************/
(0010) #pragma interrupt_handler uart0_rx_isr:12
(0011) void uart0_rx_isr(void)
(0012) { unsigned char dat;
(0013) if(UCSRA&(1<<RXC)){ //把要接收的数据全部接收
004F 9B5F SBIS 0x0B,7
0050 C003 RJMP 0x0054
(0014) dat=UDR;
0051 B14C IN R20,0x0C
(0015) USART_Transmit(dat);
0052 2F04 MOV R16,R20
0053 D02A RCALL _USART_Transmit
(0016) }
0054 940E00AA CALL pop_gset1
0056 940E00D5 CALL pop_lset
0058 9518 RETI
(0017) }
(0018) /*****************************************************/
(0019) void main(void)
(0020) { unsigned char rec;
(0021) PORTB=0xff;
_main:
rec --> Y+1
0059 EF8F LDI R24,0xFF
005A BB88 OUT 0x18,R24
(0022) DDRB=0xff;
005B BB87 OUT 0x17,R24
(0023) PORTD=0x07;
005C E087 LDI R24,7
005D BB82 OUT 0x12,R24
(0024) DDRD=0x02;
005E E082 LDI R24,2
005F BB81 OUT 0x11,R24
(0025) UCSRA=0x00;
0060 2422 CLR R2
0061 B82B OUT 0x0B,R2
(0026) USART_Init(71); //波特为9600,外部晶振11.0592
0062 E407 LDI R16,0x47
0063 E010 LDI R17,0
0064 D00F RCALL _USART_Init
(0027) SEI();
0065 9478 BSET 7
0066 C00B RJMP 0x0072
(0028) while(1)
(0029) {
(0030) if(key==0)
0067 9982 SBIC 0x10,2
0068 C009 RJMP 0x0072
(0031) { //按键按下发送一字节数据
(0032) delayms(10);
0069 E00A LDI R16,0xA
006A E010 LDI R17,0
006B D01A RCALL _delayms
(0033) if(key==0){
006C 9982 SBIC 0x10,2
006D C004 RJMP 0x0072
(0034) while(!key);
006E 9B82 SBIS 0x10,2
006F CFFE RJMP 0x006E
(0035) USART_Transmit(0x22);
0070 E202 LDI R16,0x22
0071 D00C RCALL _USART_Transmit
0072 CFF4 RJMP 0x0067
0073 9508 RET
(0036) }
(0037) }
(0038) }
(0039) }
(0040)
(0041) /******************USART初始化***********************/
(0042) void USART_Init(unsigned int baud)
(0043) {
(0044) UBRRH=(unsigned char)(baud>>8);
_USART_Init:
baud --> R16
0074 0118 MOVW R2,R16
0075 2C23 MOV R2,R3
0076 2433 CLR R3
0077 BC20 OUT 0x20,R2
(0045) UBRRL=(unsigned char)baud; //设定波特率
0078 B909 OUT 0x09,R16
(0046) UCSRB=0x98; //使能接收和发送,开接收中断
0079 E988 LDI R24,0x98
007A B98A OUT 0x0A,R24
(0047) UCSRC=0x8e; //设置帧格式8数据位,2停止位
007B E88E LDI R24,0x8E
007C BD80 OUT 0x20,R24
007D 9508 RET
(0048) }
(0049) /************发送函数****************************/
(0050) void USART_Transmit(unsigned char dat)
(0051) {
(0052) while(!(UCSRA&(1<<UDRE)));
_USART_Transmit:
dat --> R16
007E 9B5D SBIS 0x0B,5
007F CFFE RJMP _USART_Transmit
(0053) UDR=dat;
0080 B90C OUT 0x0C,R16
0081 9508 RET
(0054) }
(0055) /************接收函数*****************************/
(0056) unsigned char USART_Receive(void)
(0057) {
(0058) while(!(UCSRA&(1<<RXC)));
_USART_Receive:
0082 9B5F SBIS 0x0B,7
0083 CFFE RJMP _USART_Receive
(0059) return UDR;
0084 B10C IN R16,0x0C
0085 9508 RET
_delayms:
i --> R20
j --> R22
t --> R16
0086 940E00A5 CALL push_gset2
(0060) }
(0061) /**********延时*********************************/
(0062) void delayms(unsigned int t)
(0063) {
(0064) unsigned int i,j;
(0065) for(i=0;i<t;i++)
0088 2744 CLR R20
0089 2755 CLR R21
008A C00B RJMP 0x0096
(0066) for(j=0;j<100;j++);
FILE: <library>
008B 2766 CLR R22
008C 2777 CLR R23
008D C002 RJMP 0x0090
008E 5F6F SUBI R22,0xFF
008F 4F7F SBCI R23,0xFF
0090 3664 CPI R22,0x64
0091 E0E0 LDI R30,0
0092 077E CPC R23,R30
0093 F3D0 BCS 0x008E
0094 5F4F SUBI R20,0xFF
0095 4F5F SBCI R21,0xFF
0096 1740 CP R20,R16
0097 0751 CPC R21,R17
0098 F390 BCS 0x008B
0099 940E009C CALL pop_gset2
009B 9508 RET
pop_gset2:
009C E0E2 LDI R30,2
009D 940C00AB JMP pop
push_gset5:
009F 92FA ST R15,-Y
00A0 92EA ST R14,-Y
push_gset4:
00A1 92DA ST R13,-Y
00A2 92CA ST R12,-Y
push_gset3:
00A3 92BA ST R11,-Y
00A4 92AA ST R10,-Y
push_gset2:
00A5 937A ST R23,-Y
00A6 936A ST R22,-Y
push_gset1:
00A7 935A ST R21,-Y
00A8 934A ST R20,-Y
00A9 9508 RET
pop_gset1:
00AA E0E1 LDI R30,1
pop:
00AB 9149 LD R20,Y+
00AC 9159 LD R21,Y+
00AD FDE0 SBRC R30,0
00AE 9508 RET
00AF 9169 LD R22,Y+
00B0 9179 LD R23,Y+
00B1 FDE1 SBRC R30,1
00B2 9508 RET
00B3 90A9 LD R10,Y+
00B4 90B9 LD R11,Y+
00B5 FDE2 SBRC R30,2
00B6 9508 RET
00B7 90C9 LD R12,Y+
00B8 90D9 LD R13,Y+
00B9 FDE3 SBRC R30,3
00BA 9508 RET
00BB 90E9 LD R14,Y+
00BC 90F9 LD R15,Y+
00BD 9508 RET
push_lset:
00BE 93FA ST R31,-Y
00BF 93EA ST R30,-Y
00C0 93BA ST R27,-Y
00C1 93AA ST R26,-Y
00C2 939A ST R25,-Y
00C3 938A ST R24,-Y
00C4 933A ST R19,-Y
00C5 932A ST R18,-Y
00C6 931A ST R17,-Y
00C7 930A ST R16,-Y
00C8 929A ST R9,-Y
00C9 928A ST R8,-Y
00CA 927A ST R7,-Y
00CB 926A ST R6,-Y
00CC 925A ST R5,-Y
00CD 924A ST R4,-Y
00CE 923A ST R3,-Y
00CF 922A ST R2,-Y
00D0 921A ST R1,-Y
00D1 920A ST R0,-Y
00D2 B60F IN R0,0x3F
00D3 920A ST R0,-Y
00D4 9508 RET
pop_lset:
00D5 9009 LD R0,Y+
00D6 BE0F OUT 0x3F,R0
00D7 9009 LD R0,Y+
00D8 9019 LD R1,Y+
00D9 9029 LD R2,Y+
00DA 9039 LD R3,Y+
00DB 9049 LD R4,Y+
00DC 9059 LD R5,Y+
00DD 9069 LD R6,Y+
00DE 9079 LD R7,Y+
00DF 9089 LD R8,Y+
00E0 9099 LD R9,Y+
00E1 9109 LD R16,Y+
00E2 9119 LD R17,Y+
00E3 9129 LD R18,Y+
00E4 9139 LD R19,Y+
00E5 9189 LD R24,Y+
00E6 9199 LD R25,Y+
00E7 91A9 LD R26,Y+
00E8 91B9 LD R27,Y+
00E9 91E9 LD R30,Y+
00EA 91F9 LD R31,Y+
00EB 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -