⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uart.lst

📁 MEGA16 开发包3
💻 LST
字号:
__text_start:
__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 36E1      CPI	R30,0x61
    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 940E0070  CALL	_main
_exit:
    004A CFFF      RJMP	_exit
FILE: F:\开发\C程序开发\AVR\usart\usart.c
(0001) //Project : USART
(0002) //Writer :youhu
(0003) //ICC-AVR application builder : 2007-4-24 16:45:33
(0004) // Target : M16
(0005) // Crystal: 8.0000Mhz
(0006) // USART initialize
(0007) // desired baud rate: 115200
(0008) // actual: baud rate:111111 (3.7%)
(0009) // char size: 8 bit
(0010) // parity: Disabled
(0011) 
(0012) #include <iom16v.h>
(0013) #include <macros.h>
(0014) unsigned char mes;
(0015) 
(0016) void uart_init(void)
(0017) {
(0018)  UCSRB = 0x00;                 
_uart_init:
    004B 2422      CLR	R2
    004C B82A      OUT	0x0A,R2
(0019)  UCSRA = 0x03;                 //异步模式,禁止奇偶校验,8位数据帧
    004D E083      LDI	R24,3
    004E B98B      OUT	0x0B,R24
(0020)  UCSRC = BIT(URSEL) | 0x06;    
    004F E886      LDI	R24,0x86
    0050 BD80      OUT	0x20,R24
(0021)  UBRRL = 0x08;                 //波特率设置为115200
    0051 E088      LDI	R24,0x8
    0052 B989      OUT	0x09,R24
(0022)  UBRRH = 0x00;             
    0053 BC20      OUT	0x20,R2
(0023)  UCSRB = 0xF8;                 //允许串口发送和接收,接收和发送中断使能
    0054 EF88      LDI	R24,0xF8
    0055 B98A      OUT	0x0A,R24
    0056 9508      RET
(0024) }
(0025) 
(0026) /*
(0027) void USART_Transmit( unsigned char data )
(0028) {
(0029)   while ( !( UCSRA & (1<<UDRE)) );          
(0030)   UDR = data;                                
(0031) }
(0032) */
(0033) unsigned char USART_Receive( void )          //串口从主机接收数据
(0034) {
(0035) 
(0036) while ( !(UCSRA & (1<<RXC)) );                // 等待接收数据
_USART_Receive:
    0057 9B5F      SBIS	0x0B,7
    0058 CFFE      RJMP	_USART_Receive
(0037) 
(0038) return UDR;                                   // 从缓冲器中获取并返回数据
    0059 B10C      IN	R16,0x0C
    005A 9508      RET
_uart0_tx_isr:
    005B 940E0072  CALL	push_lset
(0039) }
(0040) 
(0041) /*
(0042) #pragma interrupt_handler uart0_rx_isr:12     //接收中断函数
(0043) void uart0_rx_isr(void)
(0044) {
(0045) //wait a task; 
(0046) }
(0047) */
(0048) #pragma interrupt_handler uart0_tx_isr:14     //发送中断函数
(0049) void uart0_tx_isr(void)
(0050) {
(0051)   mes = USART_Receive();
    005D DFF9      RCALL	_USART_Receive
    005E 93000060  STS	mes,R16
(0052)   while ( !( UCSRA & (1<<UDRE)) );            // 等待发送缓冲器为空 
    0060 9B5D      SBIS	0x0B,5
    0061 CFFE      RJMP	0x0060
(0053)   UDR = mes;                                  // 将数据放入缓冲器,发送数据
    0062 90200060  LDS	R2,mes
    0064 B82C      OUT	0x0C,R2
    0065 940E0089  CALL	pop_lset
    0067 9518      RETI
(0054) }
(0055) 
(0056) void init_devices(void)    //初始化各中断
(0057) { 
(0058)  CLI(); 
_init_devices:
    0068 94F8      BCLR	7
(0059)  uart_init();
    0069 DFE1      RCALL	_uart_init
(0060)  MCUCR = 0x00;
    006A 2422      CLR	R2
    006B BE25      OUT	0x35,R2
(0061)  GICR  = 0x00;
    006C BE2B      OUT	0x3B,R2
(0062)  TIMSK = 0x00; 
    006D BE29      OUT	0x39,R2
(0063)  SEI(); 
    006E 9478      BSET	7
    006F 9508      RET
(0064) }
(0065) 
(0066) 
(0067) void main(void)
(0068) { 
(0069)  init_devices();
FILE: <library>
_main:
    0070 DFF7      RCALL	_init_devices
    0071 9508      RET
push_lset:
    0072 93FA      ST	R31,-Y
    0073 93EA      ST	R30,-Y
    0074 93BA      ST	R27,-Y
    0075 93AA      ST	R26,-Y
    0076 939A      ST	R25,-Y
    0077 938A      ST	R24,-Y
    0078 933A      ST	R19,-Y
    0079 932A      ST	R18,-Y
    007A 931A      ST	R17,-Y
    007B 930A      ST	R16,-Y
    007C 929A      ST	R9,-Y
    007D 928A      ST	R8,-Y
    007E 927A      ST	R7,-Y
    007F 926A      ST	R6,-Y
    0080 925A      ST	R5,-Y
    0081 924A      ST	R4,-Y
    0082 923A      ST	R3,-Y
    0083 922A      ST	R2,-Y
    0084 921A      ST	R1,-Y
    0085 920A      ST	R0,-Y
    0086 B60F      IN	R0,0x3F
    0087 920A      ST	R0,-Y
    0088 9508      RET
pop_lset:
    0089 9009      LD	R0,Y+
    008A BE0F      OUT	0x3F,R0
    008B 9009      LD	R0,Y+
    008C 9019      LD	R1,Y+
    008D 9029      LD	R2,Y+
    008E 9039      LD	R3,Y+
    008F 9049      LD	R4,Y+
    0090 9059      LD	R5,Y+
    0091 9069      LD	R6,Y+
    0092 9079      LD	R7,Y+
    0093 9089      LD	R8,Y+
    0094 9099      LD	R9,Y+
    0095 9109      LD	R16,Y+
    0096 9119      LD	R17,Y+
    0097 9129      LD	R18,Y+
    0098 9139      LD	R19,Y+
    0099 9189      LD	R24,Y+
    009A 9199      LD	R25,Y+
    009B 91A9      LD	R26,Y+
    009C 91B9      LD	R27,Y+
    009D 91E9      LD	R30,Y+
    009E 91F9      LD	R31,Y+
    009F 9508      RET

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -