📄 uart_back.lst
字号:
__start:
__text_start:
0030 EFCF LDI R28,0xFF
0031 E0DF LDI R29,0xF
0032 BFCD OUT 0x3D,R28
0033 BFDE OUT 0x3E,R29
0034 51C0 SUBI R28,0x10
0035 40D0 SBCI R29,0
0036 EA0A LDI R16,0xAA
0037 8308 STD Y+0,R16
0038 2400 CLR R0
0039 E6E0 LDI R30,0x60
003A E0F0 LDI R31,0
003B E010 LDI R17,0
003C 36E0 CPI R30,0x60
003D 07F1 CPC R31,R17
003E F011 BEQ 0x0041
003F 9201 ST R0,Z+
0040 CFFB RJMP 0x003C
0041 8300 STD Z+0,R16
0042 E6E0 LDI R30,0x60
0043 E0F0 LDI R31,0
0044 E6A0 LDI R26,0x60
0045 E0B0 LDI R27,0
0046 E010 LDI R17,0
0047 36E0 CPI R30,0x60
0048 07F1 CPC R31,R17
0049 F021 BEQ 0x004E
004A 95C8 LPM
004B 9631 ADIW R30,1
004C 920D ST R0,X+
004D CFF9 RJMP 0x0047
004E 940E0065 CALL _main
_exit:
0050 CFFF RJMP _exit
FILE: E:\AVR单~1\NewProject\串口通信\ATmega128\数据回发\UART_Back.c
(0001) /****************************************************
(0002) **晶振:内部7.3728MHz
(0003) **实现功能:将从PC机接受的字符返回PC机
(0004) **设置:波特率9600, 8 bit, 1 stop bit, 无校验
(0005) ****************************************************/
(0006) #include <iom128.h>
(0007) #include <macros.h>
(0008)
(0009) #define uchar unsigned char
(0010) #define uint unsigned int
(0011)
(0012) void UART_init(void)
(0013) {
(0014) UCSR0A = 0x00; /*倍速 */
_UART_init:
0051 2422 CLR R2
0052 B82B OUT 0x0B,R2
(0015) UCSR0B = 0x18; /*允许接收和发送*/
0053 E188 LDI R24,0x18
0054 B98A OUT 0x0A,R24
(0016) UCSR0C = 0x0E; /*8位数据,1位停止位,无校验位 */
0055 E08E LDI R24,0xE
0056 93800095 STS 0x95,R24
(0017) UBRR0H = 0x00;
0058 92200090 STS 0x90,R2
(0018) UBRR0L = 0x47; /*9600 */
005A E487 LDI R24,0x47
005B B989 OUT 0x09,R24
005C 9508 RET
(0019) }
(0020)
(0021) uchar UART_recive(void)
(0022) {
(0023) while (!(UCSR0A&(1<<RXC0))); /* 等待接收数据*/
_UART_recive:
005D 9B5F SBIS 0x0B,7
005E CFFE RJMP _UART_recive
(0024) return UDR0; /* 获取并返回数据*/
005F B10C IN R16,0x0C
0060 9508 RET
(0025) }
(0026)
(0027) void UART_transmit(uchar data)
(0028) {
(0029) while(!(UCSR0A&(1<<UDRE0)));
_UART_transmit:
data --> R16
0061 9B5D SBIS 0x0B,5
0062 CFFE RJMP _UART_transmit
(0030) UDR0=data;
0063 B90C OUT 0x0C,R16
0064 9508 RET
(0031) }
(0032)
(0033) void main(void)
(0034) {
(0035) uchar j;
(0036) CLI();
_main:
j --> R20
0065 94F8 BCLR 7
(0037) WDR();
0066 95A8 WDR
(0038) UART_init();
0067 DFE9 RCALL _UART_init
(0039) SEI();
0068 9478 BSET 7
0069 C003 RJMP 0x006D
(0040) while(1)
(0041) {
(0042) j=UART_recive();
006A DFF2 RCALL _UART_recive
006B 2F40 MOV R20,R16
(0043) UART_transmit(j);
FILE: <library>
006C DFF4 RCALL _UART_transmit
006D CFFC RJMP 0x006A
006E 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -