📄 uart.lst
字号:
__text_start:
__start:
11 E5CF LDI R28,0x5F
12 E0D2 LDI R29,2
13 BFCD OUT 0x3D,R28
14 BFDE OUT 0x3E,R29
15 51CE SUBI R28,0x1E
16 40D0 SBCI R29,0
17 EA0A LDI R16,0xAA
18 8308 STD Y+0,R16
19 2400 CLR R0
1A E6E0 LDI R30,0x60
1B E0F0 LDI R31,0
1C E010 LDI R17,0
1D 36E0 CPI R30,0x60
1E 07F1 CPC R31,R17
1F F011 BEQ 0x0022
20 9201 ST R0,Z+
21 CFFB RJMP 0x001D
22 8300 STD Z+0,R16
23 E2E2 LDI R30,0x22
24 E0F0 LDI R31,0
25 E6A0 LDI R26,0x60
26 E0B0 LDI R27,0
27 E010 LDI R17,0
28 E000 LDI R16,0
29 BF0B OUT 0x3B,R16
2A 32E2 CPI R30,0x22
2B 07F1 CPC R31,R17
2C F021 BEQ 0x0031
2D 95C8 LPM
2E 9631 ADIW R30,1
2F 920D ST R0,X+
30 CFF9 RJMP 0x002A
31 D047 RCALL _main
_exit:
32 CFFF RJMP _exit
_delay_nus:
i --> R20
n --> R16
33 934A ST R20,-Y
34 935A ST R21,-Y
FILE: C:\DOCUME~1\Administrator.27F5F4061F03467\桌面\uart\uart.c
(0001) //ICC-AVR application builder : 2008-8-5 14:38:41
(0002) // Target : M8515
(0003) // Crystal: 8.0000Mhz
(0004)
(0005) #include <iom8515v.h>
(0006) #include <macros.h>
(0007)
(0008) #define uchar unsigned char
(0009) #define uint unsigned int
(0010) void delay_nus(unsigned int n)//n微秒延时函数
(0011) {
(0012) unsigned int i;
(0013) for (i=0;i<n;i++)
35 2744 CLR R20
36 2755 CLR R21
37 C003 RJMP 0x003B
(0014) {
(0015) asm("nop");
38 0000 NOP
39 5F4F SUBI R20,0xFF
3A 4F5F SBCI R21,0xFF
3B 1740 CP R20,R16
3C 0751 CPC R21,R17
3D F3D0 BCS 0x0038
3E 9159 LD R21,Y+
3F 9149 LD R20,Y+
40 9508 RET
_delay_nms:
i --> R20
n --> R10
41 D040 RCALL push_xgset300C
42 0158 MOVW R10,R16
(0016) }
(0017) }
(0018) void delay_nms(unsigned int n)//n毫秒延时函数
(0019) {
(0020) unsigned int i;
(0021) for (i=0;i<n;i++) //执行n次1毫秒延时
43 2744 CLR R20
44 2755 CLR R21
45 C005 RJMP 0x004B
(0022) delay_nus(1000);
46 EE08 LDI R16,0xE8
47 E013 LDI R17,3
48 DFEA RCALL _delay_nus
49 5F4F SUBI R20,0xFF
4A 4F5F SBCI R21,0xFF
4B 154A CP R20,R10
4C 055B CPC R21,R11
4D F3C0 BCS 0x0046
4E C038 RJMP pop_xgset300C
(0023) }
(0024) void port_init(void)
(0025) {
(0026) PORTA = 0x00;
_port_init:
4F 2422 CLR R2
50 BA2B OUT 0x1B,R2
(0027) DDRA = 0x00;
51 BA2A OUT 0x1A,R2
(0028) PORTB = 0x00;
52 BA28 OUT 0x18,R2
(0029) DDRB = 0x00;
53 BA27 OUT 0x17,R2
(0030) PORTC = 0x00;
54 BA25 OUT 0x15,R2
(0031) DDRC = 0x00;
55 BA24 OUT 0x14,R2
(0032) PORTD = 0x00;
56 BA22 OUT 0x12,R2
(0033) DDRD = 0x00;
57 BA21 OUT 0x11,R2
(0034) PORTE = 0x00;
58 B827 OUT 0x07,R2
(0035) DDRE = 0x00;
59 B826 OUT 0x06,R2
5A 9508 RET
(0036) }
(0037)
(0038) //UART0 initialize
(0039) // desired baud rate: 9600
(0040) // actual: baud rate:9615 (0.2%)
(0041) void uart0_init(void)
(0042) {
(0043) UCSRB = 0x00; //disable while setting baud rate
_uart0_init:
5B 2422 CLR R2
5C B82A OUT 0x0A,R2
(0044) UCSRA = 0x00;
5D B82B OUT 0x0B,R2
(0045) UCSRC = BIT(URSEL) | 0x26;
5E EA86 LDI R24,0xA6
5F BD80 OUT 0x20,R24
(0046) UBRRL = 0x33; //set baud rate lo
60 E383 LDI R24,0x33
61 B989 OUT 0x09,R24
(0047) UBRRH = 0x00; //set baud rate hi
62 BC20 OUT 0x20,R2
(0048) UCSRB = 0x18;
63 E188 LDI R24,0x18
64 B98A OUT 0x0A,R24
65 9508 RET
(0049) }
(0050)
(0051)
(0052) void sendchar(uchar num)
(0053) {
(0054) UDR=num;
_sendchar:
num --> R16
66 B90C OUT 0x0C,R16
(0055) while(!(UCSRA&(1<<TXC)));
67 9B5E SBIS 0x0B,6
68 CFFE RJMP 0x0067
(0056) UCSRA |= (1<<TXC);
69 9A5E SBI 0x0B,6
6A 9508 RET
_PutChar:
c --> R20
6B 934A ST R20,-Y
6C 2F40 MOV R20,R16
(0057) }
(0058) int PutChar(char c)
(0059) {
(0060) if(c == '\n')
6D 304A CPI R20,0xA
6E F411 BNE 0x0071
(0061) {
(0062) PutChar('\r');
6F E00D LDI R16,0xD
70 DFFA RCALL _PutChar
(0063) }
(0064) UDR = c;
71 B94C OUT 0x0C,R20
(0065) while(!(UCSRA &(1<<UDRE)));
72 9B5D SBIS 0x0B,5
73 CFFE RJMP 0x0072
(0066) UCSRA |= (1<<UDRE);
74 9A5D SBI 0x0B,5
(0067) return 0;
75 2700 CLR R16
76 2711 CLR R17
77 9149 LD R20,Y+
78 9508 RET
(0068) }
(0069)
(0070) void main(void)
(0071) {
(0072) uchar i,j;
(0073) uart0_init();
_main:
j --> Y,+1
i --> Y,+1
79 DFE1 RCALL _uart0_init
7A C005 RJMP 0x0080
(0074) while(1)
(0075) {
(0076) delay_nms(500);
7B EF04 LDI R16,0xF4
7C E011 LDI R17,1
7D DFC3 RCALL _delay_nms
(0077) sendchar(0xaa);
FILE: <library>
7E EA0A LDI R16,0xAA
7F DFE6 RCALL _sendchar
80 CFFA RJMP 0x007B
81 9508 RET
push_xgset300C:
82 935A ST R21,-Y
83 934A ST R20,-Y
84 92BA ST R11,-Y
85 92AA ST R10,-Y
86 9508 RET
pop_xgset300C:
87 90A9 LD R10,Y+
88 90B9 LD R11,Y+
89 9149 LD R20,Y+
8A 9159 LD R21,Y+
8B 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -