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

📄 串口通信.lst

📁 AVR之ATMega16
💻 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 36E0      CPI	R30,0x60
    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 940E009A  CALL	_main
_exit:
    004A CFFF      RJMP	_exit
FILE: C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\串口通信\delay.h
(0001) #define xtal  8                      //8MS
(0002) /************************************************************
(0003) *   函数名称:void DelayUS(unsigned int time)
(0004) *   功    能:软件延时1.1Us 
(0005) *   入口参数:time 延时时间
(0006) *   出口参数:无
(0007) ************************************************************/
(0008) void DelayUS(unsigned int time)
(0009) {   
_DelayUS:
  time                 --> R16
    004B C002      RJMP	0x004E
(0010)      while(time>1)
(0011) 	    time--; 
    004C 5001      SUBI	R16,1
    004D 4010      SBCI	R17,0
    004E E081      LDI	R24,1
    004F E090      LDI	R25,0
    0050 1780      CP	R24,R16
    0051 0791      CPC	R25,R17
    0052 F3C8      BCS	0x004C
    0053 9508      RET
_DelayMS:
  i                    --> R20
  time                 --> R16
    0054 940E00A7  CALL	push_gset1
(0012) }
(0013) /************************************************************
(0014) *   函数名称:void DelayMS(unsigned int time)
(0015) *   功    能:软件延时  1/1000s
(0016) *   入口参数:time 延时时间 MS  
(0017) *   出口参数:无
(0018) ************************************************************/
(0019) void DelayMS (unsigned int time)
(0020) {
    0056 C009      RJMP	0x0060
(0021)     unsigned int i;
(0022)     while(time--)	
(0023) 	{
(0024) 	  for(i=1;i<(unsigned int)(xtal*143-2);i++)
    0057 E041      LDI	R20,1
    0058 E050      LDI	R21,0
    0059 C002      RJMP	0x005C
    005A 5F4F      SUBI	R20,0xFF
    005B 4F5F      SBCI	R21,0xFF
    005C 3746      CPI	R20,0x76
    005D E0E4      LDI	R30,4
    005E 075E      CPC	R21,R30
    005F F3D0      BCS	0x005A
    0060 0118      MOVW	R2,R16
    0061 5001      SUBI	R16,1
    0062 4010      SBCI	R17,0
    0063 2022      TST	R2
    0064 F791      BNE	0x0057
    0065 2033      TST	R3
    0066 F781      BNE	0x0057
    0067 940E00AA  CALL	pop_gset1
    0069 9508      RET
FILE: C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\串口通信\串口通信.c
(0001) //内部晶振 8M
(0002) #include <ioM16v.h>
(0003) #include <macros.h>
(0004) #include"delay.h"
(0005) 
(0006) 
(0007) 
(0008) /*------宏定义------*/
(0009) #define uchar	unsigned char
(0010) #define uint	unsigned int
(0011) 
(0012) 
(0013) 
(0014) //端口初始化
(0015) void port_init(void)
(0016) {
(0017)  PORTA = 0x00;//设置端口方向、数据
_port_init:
    006A 2422      CLR	R2
    006B BA2B      OUT	0x1B,R2
(0018)  DDRA  = 0x00;
    006C BA2A      OUT	0x1A,R2
(0019)  PORTB = 0x00;
    006D BA28      OUT	0x18,R2
(0020)  DDRB  = 0x00;
    006E BA27      OUT	0x17,R2
(0021)  PORTC = 0x00;
    006F BA25      OUT	0x15,R2
(0022)  DDRC  = 0x00;
    0070 BA24      OUT	0x14,R2
(0023)  PORTD = 0x00;
    0071 BA22      OUT	0x12,R2
(0024)  DDRD  = 0x03;
    0072 E083      LDI	R24,3
    0073 BB81      OUT	0x11,R24
    0074 9508      RET
(0025) }
(0026) 
(0027) 
(0028) //串口通信初始化
(0029) void usart_init(void)
(0030) {
(0031)  UCSRB = 0x00;//禁止中断
_usart_init:
    0075 2422      CLR	R2
    0076 B82A      OUT	0x0A,R2
(0032)  UCSRA = 0x00;//数据发送、接受位、数据帧错误、奇偶校验、溢出、多机模式
    0077 B82B      OUT	0x0B,R2
(0033)  UCSRC = BIT(URSEL) | 0x06;//使用UBRRH寄存器、数据位数8位
    0078 E886      LDI	R24,0x86
    0079 BD80      OUT	0x20,R24
(0034)  UBRRL = 0x19;//设置波特率
    007A E189      LDI	R24,0x19
    007B B989      OUT	0x09,R24
(0035)  UBRRH = 0x00;
    007C BC20      OUT	0x20,R2
(0036)  UCSRB = 0x98;//接受中断使能、接受、发送使能、不使用第9数据位
    007D E988      LDI	R24,0x98
    007E B98A      OUT	0x0A,R24
    007F 9508      RET
(0037) }
(0038) void uart_putchar(char x)
(0039) {
(0040)  	 while (!(UCSRA&0x20))//查询发送区是否为空
_uart_putchar:
  x                    --> R16
    0080 9B5D      SBIS	0x0B,5
    0081 CFFE      RJMP	_uart_putchar
(0041) 	 ;
(0042) 	 UDR=x; //发送数据 
    0082 B90C      OUT	0x0C,R16
    0083 9508      RET
_usart_rx_isr:
  y                    --> R20
    0084 940E00BE  CALL	push_lset
    0086 940E00A7  CALL	push_gset1
(0043) }
(0044) 
(0045) //串行接收结束中断服务程序
(0046) #pragma interrupt_handler usart_rx_isr:12
(0047) void usart_rx_isr(void)
(0048) {
(0049)  	 char y;
(0050) 	 y=UDR;
    0088 B14C      IN	R20,0x0C
(0051) 	 uart_putchar(y);//把接收到的数据返回给上位机
    0089 2F04      MOV	R16,R20
    008A DFF5      RCALL	_uart_putchar
    008B 940E00AA  CALL	pop_gset1
    008D 940E00D5  CALL	pop_lset
    008F 9518      RETI
(0052) }
(0053) 
(0054) 
(0055) void init_devices(void)
(0056) {
(0057)  CLI(); //禁止所有中断
_init_devices:
    0090 94F8      BCLR	7
(0058)  MCUCR  = 0x00;//INT0、INT1中断触发方式
    0091 2422      CLR	R2
    0092 BE25      OUT	0x35,R2
(0059)  MCUCSR = 0x80;//禁止JTAG
    0093 E880      LDI	R24,0x80
    0094 BF84      OUT	0x34,R24
(0060)  GICR   = 0x00;//外部中断使能
    0095 BE2B      OUT	0x3B,R2
(0061)  port_init();
    0096 DFD3      RCALL	_port_init
(0062)  usart_init();
    0097 DFDD      RCALL	_usart_init
(0063)  SEI();//开全局中断
    0098 9478      BSET	7
    0099 9508      RET
(0064) }
(0065) //主函数
(0066) void main(void)
(0067) {
(0068)  init_devices();
_main:
    009A DFF5      RCALL	_init_devices
    009B C001      RJMP	0x009D
(0069)  //在这继续添加你的代码
(0070)  while(1)
(0071)  {
(0072)   NOP();
FILE: <library>
    009C 0000      NOP
    009D CFFE      RJMP	0x009C
    009E 9508      RET
push_gset5:
    009F 92FA      ST	R15,-Y
    00A0 92EA      ST	R14,-Y
push_gset4:
    00A1 92DA      ST	R13,-Y
    00A2 92CA      ST	R12,-Y
push_gset3:
    00A3 92BA      ST	R11,-Y
    00A4 92AA      ST	R10,-Y
push_gset2:
    00A5 937A      ST	R23,-Y
    00A6 936A      ST	R22,-Y
push_gset1:
    00A7 935A      ST	R21,-Y
    00A8 934A      ST	R20,-Y
    00A9 9508      RET
pop_gset1:
    00AA E0E1      LDI	R30,1
pop:
    00AB 9149      LD	R20,Y+
    00AC 9159      LD	R21,Y+
    00AD FDE0      SBRC	R30,0
    00AE 9508      RET
    00AF 9169      LD	R22,Y+
    00B0 9179      LD	R23,Y+
    00B1 FDE1      SBRC	R30,1
    00B2 9508      RET
    00B3 90A9      LD	R10,Y+
    00B4 90B9      LD	R11,Y+
    00B5 FDE2      SBRC	R30,2
    00B6 9508      RET
    00B7 90C9      LD	R12,Y+
    00B8 90D9      LD	R13,Y+
    00B9 FDE3      SBRC	R30,3
    00BA 9508      RET
    00BB 90E9      LD	R14,Y+
    00BC 90F9      LD	R15,Y+
    00BD 9508      RET
push_lset:
    00BE 93FA      ST	R31,-Y
    00BF 93EA      ST	R30,-Y
    00C0 93BA      ST	R27,-Y
    00C1 93AA      ST	R26,-Y
    00C2 939A      ST	R25,-Y
    00C3 938A      ST	R24,-Y
    00C4 933A      ST	R19,-Y
    00C5 932A      ST	R18,-Y
    00C6 931A      ST	R17,-Y
    00C7 930A      ST	R16,-Y
    00C8 929A      ST	R9,-Y
    00C9 928A      ST	R8,-Y
    00CA 927A      ST	R7,-Y
    00CB 926A      ST	R6,-Y
    00CC 925A      ST	R5,-Y
    00CD 924A      ST	R4,-Y
    00CE 923A      ST	R3,-Y
    00CF 922A      ST	R2,-Y
    00D0 921A      ST	R1,-Y
    00D1 920A      ST	R0,-Y
    00D2 B60F      IN	R0,0x3F
    00D3 920A      ST	R0,-Y
    00D4 9508      RET
pop_lset:
    00D5 9009      LD	R0,Y+
    00D6 BE0F      OUT	0x3F,R0
    00D7 9009      LD	R0,Y+
    00D8 9019      LD	R1,Y+
    00D9 9029      LD	R2,Y+
    00DA 9039      LD	R3,Y+
    00DB 9049      LD	R4,Y+
    00DC 9059      LD	R5,Y+
    00DD 9069      LD	R6,Y+
    00DE 9079      LD	R7,Y+
    00DF 9089      LD	R8,Y+
    00E0 9099      LD	R9,Y+
    00E1 9109      LD	R16,Y+
    00E2 9119      LD	R17,Y+
    00E3 9129      LD	R18,Y+
    00E4 9139      LD	R19,Y+
    00E5 9189      LD	R24,Y+
    00E6 9199      LD	R25,Y+
    00E7 91A9      LD	R26,Y+
    00E8 91B9      LD	R27,Y+
    00E9 91E9      LD	R30,Y+
    00EA 91F9      LD	R31,Y+
    00EB 9508      RET

⌨️ 快捷键说明

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