📄 usart.lst
字号:
__text_start:
__start:
0016 E5CF LDI R28,0x5F
0017 E0D4 LDI R29,4
0018 BFCD OUT 0x3D,R28
0019 BFDE OUT 0x3E,R29
001A 51C0 SUBI R28,0x10
001B 40D0 SBCI R29,0
001C EA0A LDI R16,0xAA
001D 8308 STD Y+0,R16
001E 2400 CLR R0
001F E6E6 LDI R30,0x66
0020 E0F0 LDI R31,0
0021 E010 LDI R17,0
0022 36E6 CPI R30,0x66
0023 07F1 CPC R31,R17
0024 F011 BEQ 0x0027
0025 9201 ST R0,Z+
0026 CFFB RJMP 0x0022
0027 8300 STD Z+0,R16
0028 E2E6 LDI R30,0x26
0029 E0F0 LDI R31,0
002A E6A0 LDI R26,0x60
002B E0B0 LDI R27,0
002C E010 LDI R17,0
002D 32EC CPI R30,0x2C
002E 07F1 CPC R31,R17
002F F021 BEQ 0x0034
0030 95C8 LPM
0031 9631 ADIW R30,1
0032 920D ST R0,X+
0033 CFF9 RJMP 0x002D
0034 D04E RCALL _main
_exit:
0035 CFFF RJMP _exit
FILE: C:\DOCUME~1\Administrator\桌面\maga8练习\USART\USART使用.c
(0001) //ICC-AVR application builder : 1980-1-4 4:49:58
(0002) // Target : M8
(0003) // Crystal: 1.0000Mhz
(0004)
(0005) #include <iom8v.h>
(0006) #include <macros.h>
(0007) unsigned char f[6]={0x01,0x02,0x03,0x04,0x05,0x00};
(0008)
(0009) void port_init(void)
(0010) {
(0011) PORTB = 0xFF;
_port_init:
0036 EF8F LDI R24,0xFF
0037 BB88 OUT 0x18,R24
(0012) DDRB = 0x00;
0038 2422 CLR R2
0039 BA27 OUT 0x17,R2
(0013) PORTC = 0x7F; //m103 output only
003A E78F LDI R24,0x7F
003B BB85 OUT 0x15,R24
(0014) DDRC = 0x00;
003C BA24 OUT 0x14,R2
(0015) PORTD = 0xFF;
003D EF8F LDI R24,0xFF
003E BB82 OUT 0x12,R24
(0016) DDRD = 0x02;
003F E082 LDI R24,2
0040 BB81 OUT 0x11,R24
(0017) }
0041 9508 RET
(0018)
(0019) //UART0 initialisation
(0020) // desired baud rate: 9600
(0021) // actual: baud rate:9615 (0.2%)
(0022) // char size: 8 bit
(0023) // parity: Disabled
(0024) void uart0_init(void)
(0025) {
(0026) UCSRB = 0x00; //disable while setting baud rate
_uart0_init:
0042 2422 CLR R2
0043 B82A OUT 0x0A,R2
(0027) UCSRA = 0x02;//倍速
0044 E082 LDI R24,2
0045 B98B OUT 0x0B,R24
(0028) UCSRC = 0x86;//写UCSRAC,XCK下降沿采样,异步
0046 E886 LDI R24,0x86
0047 BD80 OUT 0x20,R24
(0029) UBRRL = 0x0C; //set baud rate lo
0048 E08C LDI R24,0xC
0049 B989 OUT 0x09,R24
(0030) UBRRH = 0x00; //set baud rate hi
004A BC20 OUT 0x20,R2
(0031) UCSRB = 0x98;//接收结束中断使能
004B E988 LDI R24,0x98
004C B98A OUT 0x0A,R24
(0032) }
004D 9508 RET
(0033) /*字符输入函数*/
(0034) /*unsigned char getchar(void)
(0035) {
(0036) while(!(UCSRA& (1<<RXC)));
(0037) return UDR;
(0038) }
(0039) *///UART0 发送一个字节
(0040) void put_char(unsigned char d)
(0041) {/* 等待发送缓冲器为空 */
(0042) while ( !( UCSRA & (1<<UDRE)));
_put_char:
d --> R16
004E 9B5D SBIS 0x0B,5
004F CFFE RJMP _put_char
(0043) /* 将数据放入缓冲器,发送数据 */
(0044) UDR=d;
0050 B90C OUT 0x0C,R16
(0045) //while(!(UCSRA&0x40)); //等待TXC置位
(0046) //UCSRA|=0x40; //写1清零
(0047) }
0051 9508 RET
_put_s:
s --> R20
0052 D046 RCALL push_gset1
0053 01A8 MOVW R20,R16
(0048) //字符输入函数
(0049) void put_s(unsigned char *s)
(0050) {
0054 C005 RJMP 0x005A
(0051) while (*s)
(0052) {
(0053) put_char(*s);
0055 01FA MOVW R30,R20
0056 8100 LDD R16,Z+0
0057 DFF6 RCALL _put_char
(0054) s++;
0058 5F4F SUBI R20,0xFF
0059 4F5F SBCI R21,0xFF
005A 01FA MOVW R30,R20
005B 8020 LDD R2,Z+0
005C 2022 TST R2
005D F7B9 BNE 0x0055
(0055) }
(0056) }
005E D03D RCALL pop_gset1
005F 9508 RET
_uart0_rx_isr:
0060 D04F RCALL push_lset
(0057)
(0058) #pragma interrupt_handler uart0_rx_isr:12
(0059) void uart0_rx_isr(void)//接收中断RXC置1时中断
(0060) {
(0061) put_char(UDR);//接收完发送短信
0061 B10C IN R16,0x0C
0062 DFEB RCALL _put_char
(0062)
(0063) //uart has received a character in UDR
(0064) }
0063 D063 RCALL pop_lset
0064 9518 RETI
(0065)
(0066) //call this routine to initialise all peripherals
(0067) void init_devices(void)
(0068) {
(0069) //stop errant interrupts until set up
(0070) CLI(); //disable all interrupts
_init_devices:
0065 94F8 BCLR 7
(0071) port_init();
0066 DFCF RCALL _port_init
(0072) uart0_init();
0067 DFDA RCALL _uart0_init
(0073)
(0074) MCUCR = 0x00;
0068 2422 CLR R2
0069 BE25 OUT 0x35,R2
(0075) GICR = 0x00;
006A BE2B OUT 0x3B,R2
(0076) TIMSK = 0x00; //timer interrupt sources
006B BE29 OUT 0x39,R2
(0077) SEI(); //re-enable interrupts
006C 9478 BSET 7
(0078) //all peripherals are now initialised
(0079) }
006D 9508 RET
(0080) void delay_us(int time)
(0081) {
(0082) do
(0083) {
(0084) time--;
_delay_us:
time --> R16
006E 5001 SUBI R16,1
006F 4010 SBCI R17,0
(0085) }
(0086) while (time>1);
0070 E081 LDI R24,1
0071 E090 LDI R25,0
0072 1780 CP R24,R16
0073 0791 CPC R25,R17
0074 F3CC BLT 0x006E
(0087) }
0075 9508 RET
_delay_ms:
time --> R20
0076 D022 RCALL push_gset1
0077 01A8 MOVW R20,R16
(0088) void delay_ms(unsigned int time)
(0089) {
0078 C005 RJMP 0x007E
(0090) while(time!=0)
(0091) {
(0092) delay_us(30);
0079 E10E LDI R16,0x1E
007A E010 LDI R17,0
007B DFF2 RCALL _delay_us
(0093) time--;
007C 5041 SUBI R20,1
007D 4050 SBCI R21,0
007E 3040 CPI R20,0
007F 0745 CPC R20,R21
0080 F7C1 BNE 0x0079
(0094) }
(0095) }
0081 D01A RCALL pop_gset1
0082 9508 RET
(0096)
(0097) void main()
(0098) {int i;
(0099) init_devices();
_main:
i --> R20
0083 DFE1 RCALL _init_devices
0084 C012 RJMP 0x0097
(0100) /*put_s("hello donkey!");
(0101) put_char(0x0a);
(0102) put_char(0x0d);
(0103) put_s("i love you");*/
(0104) while(1)
(0105) {
(0106) for(i=0;i<6;i++)
0085 2744 CLR R20
0086 2755 CLR R21
(0107) {
(0108) put_char(f[i]);
0087 E680 LDI R24,0x60
0088 E090 LDI R25,0
0089 01FA MOVW R30,R20
008A 0FE8 ADD R30,R24
008B 1FF9 ADC R31,R25
008C 8100 LDD R16,Z+0
008D DFC0 RCALL _put_char
008E 5F4F SUBI R20,0xFF
008F 4F5F SBCI R21,0xFF
0090 3046 CPI R20,6
0091 E0E0 LDI R30,0
0092 075E CPC R21,R30
0093 F39C BLT 0x0087
(0109) }//显示数字时,调proteus里面黑屏右键hex display mode
(0110) //while(1);
(0111) delay_ms(100);
0094 E604 LDI R16,0x64
0095 E010 LDI R17,0
0096 DFDF RCALL _delay_ms
0097 CFED RJMP 0x0085
(0112) }
(0113) }
FILE: <library>
0098 9508 RET
push_gset1:
0099 935A ST R21,-Y
009A 934A ST R20,-Y
009B 9508 RET
pop_gset1:
009C E0E1 LDI R30,1
pop:
009D 9149 LD R20,Y+
009E 9159 LD R21,Y+
009F FDE0 SBRC R30,0
00A0 9508 RET
00A1 9169 LD R22,Y+
00A2 9179 LD R23,Y+
00A3 FDE1 SBRC R30,1
00A4 9508 RET
00A5 90A9 LD R10,Y+
00A6 90B9 LD R11,Y+
00A7 FDE2 SBRC R30,2
00A8 9508 RET
00A9 90C9 LD R12,Y+
00AA 90D9 LD R13,Y+
00AB FDE3 SBRC R30,3
00AC 9508 RET
00AD 90E9 LD R14,Y+
00AE 90F9 LD R15,Y+
00AF 9508 RET
push_lset:
00B0 93FA ST R31,-Y
00B1 93EA ST R30,-Y
00B2 93BA ST R27,-Y
00B3 93AA ST R26,-Y
00B4 939A ST R25,-Y
00B5 938A ST R24,-Y
00B6 933A ST R19,-Y
00B7 932A ST R18,-Y
00B8 931A ST R17,-Y
00B9 930A ST R16,-Y
00BA 929A ST R9,-Y
00BB 928A ST R8,-Y
00BC 927A ST R7,-Y
00BD 926A ST R6,-Y
00BE 925A ST R5,-Y
00BF 924A ST R4,-Y
00C0 923A ST R3,-Y
00C1 922A ST R2,-Y
00C2 921A ST R1,-Y
00C3 920A ST R0,-Y
00C4 B60F IN R0,0x3F
00C5 920A ST R0,-Y
00C6 9508 RET
pop_lset:
00C7 9009 LD R0,Y+
00C8 BE0F OUT 0x3F,R0
00C9 9009 LD R0,Y+
00CA 9019 LD R1,Y+
00CB 9029 LD R2,Y+
00CC 9039 LD R3,Y+
00CD 9049 LD R4,Y+
00CE 9059 LD R5,Y+
00CF 9069 LD R6,Y+
00D0 9079 LD R7,Y+
00D1 9089 LD R8,Y+
00D2 9099 LD R9,Y+
00D3 9109 LD R16,Y+
00D4 9119 LD R17,Y+
00D5 9129 LD R18,Y+
00D6 9139 LD R19,Y+
00D7 9189 LD R24,Y+
00D8 9199 LD R25,Y+
00D9 91A9 LD R26,Y+
00DA 91B9 LD R27,Y+
00DB 91E9 LD R30,Y+
00DC 91F9 LD R31,Y+
00DD 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -