📄 uart.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 36EC CPI R30,0x6C
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 940E004B CALL _main
_exit:
004A CFFF RJMP _exit
FILE: E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\UARTEC~1\main.c
(0001) /****************************************Copyright (c)**************************************************
(0002) ** ADEmbed Development Co.,LTD.
(0003) ** http://www.adembed.com
(0004) **--------------File Info-------------------------------------------------------------------------------
(0005) ** File name: main.c
(0006) ** Last modified Date: 2008-12-13
(0007) ** Last Version: 1.0
(0008) ** Descriptions: UART Echo Test.
(0009) **
(0010) **------------------------------------------------------------------------------------------------------
(0011) ** Created by: junbolu
(0012) ** Created date: 2008-12-13
(0013) ** Version: 1.0
(0014) ** Descriptions:
(0015) **
(0016) **------------------------------------------------------------------------------------------------------
(0017) ** Modified by:
(0018) ** Modified date:
(0019) ** Version:
(0020) ** Descriptions:
(0021) **
(0022) **------------------------------------------------------------------------------------------------------
(0023) **ICC-AVR application builder : 2008-12-13
(0024) **Target : M16
(0025) **Crystal: 7.3728Mhz
(0026) *******************************************************************************************************/
(0027)
(0028) #include <iom16v.h>
(0029) #include <macros.h>
(0030) #include "main.h"
(0031) #include "Define.h"
(0032)
(0033) unsigned char GET_Rx;
(0034) unsigned char GET_RxNum;
(0035) unsigned char GET_RxBUF[10];
(0036)
(0037) void Uart_Init(void);
(0038) void USART_TXD(uint8 data);
(0039)
(0040) void main(void)
(0041) {
(0042) Uart_Init(); //TART初始化
_main:
004B D010 RCALL _Uart_Init
(0043) SEI(); //全局中断使能
004C 9478 BSET 7
(0044)
(0045) GET_Rx=False;
004D 2422 CLR R2
004E 9220006B STS GET_Rx,R2
(0046) for(;;)
(0047) {
(0048) if(GET_Rx==True)
0050 9180006B LDS R24,GET_Rx
0052 3081 CPI R24,1
0053 F7E1 BNE 0x0050
(0049) {
(0050) USART_TXD(GET_RxBUF[0]);
0054 91000060 LDS R16,GET_RxBUF
0056 D00E RCALL _USART_TXD
(0051) GET_Rx=False;
0057 2422 CLR R2
0058 9220006B STS GET_Rx,R2
005A CFF5 RJMP 0x0050
005B 9508 RET
(0052) }
(0053) }
(0054) }
(0055)
(0056) //===============================================================
(0057) void Uart_Init(void) //UART初始化
(0058) {
(0059)
(0060) //设置侦格式
(0061) //异步,8位数据,无奇偶校验,一个停止位,无倍速
(0062) UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
_Uart_Init:
005C E886 LDI R24,0x86
005D BD80 OUT 0x20,R24
(0063)
(0064) //设置波特率
(0065) UBRRL= (F_osc/Baud_rate/16-1)%256;
005E E28F LDI R24,0x2F
005F B989 OUT 0x09,R24
(0066) UBRRH= (F_osc/Baud_rate/16-1)/256;
0060 2422 CLR R2
0061 BC20 OUT 0x20,R2
(0067)
(0068) //使能接收中断,使能接收,使能发送
(0069) UCSRB = (1<<RXCIE)|(1<<RXEN)|(1<<TXEN);
0062 E988 LDI R24,0x98
0063 B98A OUT 0x0A,R24
0064 9508 RET
(0070) }
(0071)
(0072)
(0073) //===============================================================
(0074) void USART_TXD(uint8 data) //发送采用查询方式
(0075) {
(0076) while( !(UCSRA & BIT(UDRE)) );
_USART_TXD:
data --> R16
0065 9B5D SBIS 0x0B,5
0066 CFFE RJMP _USART_TXD
(0077) UDR=data;
0067 B90C OUT 0x0C,R16
(0078) while( !(UCSRA & BIT(TXC )) );
0068 9B5E SBIS 0x0B,6
0069 CFFE RJMP 0x0068
(0079) UCSRA|=BIT(TXC);
006A 9A5E SBI 0x0B,6
006B 9508 RET
_USART_RXC:
006C 922A ST R2,-Y
006D 938A ST R24,-Y
006E B62F IN R2,0x3F
006F 922A ST R2,-Y
(0080) }
(0081)
(0082) //=======================================================================
(0083)
(0084) #pragma interrupt_handler USART_RXC:12
(0085) void USART_RXC(void)
(0086) {
(0087) GET_RxBUF[0]=UDR;
0070 B02C IN R2,0x0C
0071 92200060 STS GET_RxBUF,R2
(0088) GET_Rx=True;
FILE: <library>
0073 E081 LDI R24,1
0074 9380006B STS GET_Rx,R24
0076 9029 LD R2,Y+
0077 BE2F OUT 0x3F,R2
0078 9189 LD R24,Y+
0079 9029 LD R2,Y+
007A 9518 RETI
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -