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

📄 uart_main.lst

📁 ATmega16单片机的实验程序
💻 LST
字号:
__start:
__text_start:
      46 EFCF      LDI	R28,0xFF
      47 E1D0      LDI	R29,0x10
      48 BFCD      OUT	0x3D,R28
      49 BFDE      OUT	0x3E,R29
      4A 51CE      SUBI	R28,0x1E
      4B 40D0      SBCI	R29,0
      4C EA0A      LDI	R16,0xAA
      4D 8308      STD	Y+0,R16
      4E 2400      CLR	R0
      4F E0E0      LDI	R30,0
      50 E0F1      LDI	R31,1
      51 E011      LDI	R17,1
      52 30E1      CPI	R30,1
      53 07F1      CPC	R31,R17
      54 F011      BEQ	0x0057
      55 9201      ST	R0,Z+
      56 CFFB      RJMP	0x0052
      57 8300      STD	Z+0,R16
      58 E8EC      LDI	R30,0x8C
      59 E0F0      LDI	R31,0
      5A E0A0      LDI	R26,0
      5B E0B1      LDI	R27,1
      5C E010      LDI	R17,0
      5D E000      LDI	R16,0
      5E BF0B      OUT	0x3B,R16
      5F 38EC      CPI	R30,0x8C
      60 07F1      CPC	R31,R17
      61 F021      BEQ	0x0066
      62 95C8      LPM
      63 9631      ADIW	R30,1
      64 920D      ST	R0,X+
      65 CFF9      RJMP	0x005F
      66 940E 0098 CALL	_main
_exit:
      68 CFFF      RJMP	_exit
FILE: D:\16实验程序\串口通信\单片机间通信\主机\uart1.h
(0001) #define uchar unsigned char
(0002) uchar rx_data;
(0003) 
(0004) //端口初始化
(0005) void port_init(void)
(0006) {
(0007)  PORTA = 0x00;
_port_init:
      69 2422      CLR	R2
      6A BA2B      OUT	0x1B,R2
(0008)  DDRA  = 0x00;
      6B BA2A      OUT	0x1A,R2
(0009)  PORTB = 0x00;
      6C BA28      OUT	0x18,R2
(0010)  DDRB  = 0x00;
      6D BA27      OUT	0x17,R2
(0011)  PORTC = 0x00; //m103 output only
      6E BA25      OUT	0x15,R2
(0012)  DDRC  = 0x00;
      6F BA24      OUT	0x14,R2
(0013)  PORTD = 0x00;
      70 BA22      OUT	0x12,R2
(0014)  DDRD  = 0x00;
      71 BA21      OUT	0x11,R2
      72 9508      RET
(0015) }
(0016) 
(0017) //串行口初始化
(0018) void uart0_init(void)
(0019) {
(0020)  UCSRB = 0x00; //disable while setting baud rate
_uart0_init:
      73 2422      CLR	R2
      74 B82A      OUT	0x0A,R2
(0021)  UCSRA = 0x00;
      75 B82B      OUT	0x0B,R2
(0022)  UCSRC = BIT(URSEL) | 0x06;
      76 E886      LDI	R24,0x86
      77 BD80      OUT	0x20,R24
(0023)  UBRRL = 0x19; //set baud rate lo
      78 E189      LDI	R24,0x19
      79 B989      OUT	0x09,R24
(0024)  UBRRH = 0x00; //set baud rate hi
      7A BC20      OUT	0x20,R2
(0025)  UCSRB = 0x18;
      7B E188      LDI	R24,0x18
      7C B98A      OUT	0x0A,R24
      7D 9508      RET
(0026) }
(0027) 
(0028) //call this routine to initialize all peripherals
(0029) void init_devices(void)
(0030) {
(0031)  //stop errant interrupts until set up
(0032)  CLI(); //disable all interrupts
_init_devices:
      7E 94F8      BCLR	7
(0033)  port_init();
      7F DFE9      RCALL	_port_init
(0034)  uart0_init();
      80 DFF2      RCALL	_uart0_init
(0035) 
(0036)  MCUCR = 0x00;
      81 2422      CLR	R2
      82 BE25      OUT	0x35,R2
(0037)  GICR  = 0x00;
      83 BE2B      OUT	0x3B,R2
(0038)  TIMSK = 0x00; //timer interrupt sources
      84 BE29      OUT	0x39,R2
(0039)  SEI(); //re-enable interrupts
      85 9478      BSET	7
      86 9508      RET
(0040)  //all peripherals are now initialized
(0041) }
(0042) 
(0043) //发送一个字节的数据
(0044) void uart_tx(uchar txc)      //send a uchar data
(0045) {
(0046) while(!(UCSRA&(1<<UDRE)));   //check send enable
_uart_tx:
  txc                  --> R16
      87 9B5D      SBIS	0x0B,5
      88 CFFE      RJMP	_uart_tx
(0047) UDR=txc;              
      89 B90C      OUT	0x0C,R16
      8A 9508      RET
(0048) }
(0049) 
(0050) //查询接收
(0051) uchar rx_c()
(0052) {
(0053) PORTC|=(1<<2);
_rx_c:
      8B 9AAA      SBI	0x15,2
(0054) while(!(UCSRA&(1<<RXC)));
      8C 9B5F      SBIS	0x0B,7
      8D CFFE      RJMP	0x008C
(0055) PORTC|=(1<<3);
      8E 9AAB      SBI	0x15,3
(0056) return UDR;
      8F B10C      IN	R16,0x0C
      90 9508      RET
FILE: D:\16实验程序\串口通信\单片机间通信\主机\uart_main.c
(0001) //串口通信的主机程序
(0002) //发送数据并等待接收数据,收到数据与发送数据对比,正确继续,错误闪烁
(0003) //led显示数据
(0004) #include <iom16v.h>
(0005) #include <macros.h>
(0006) #include "uart1.h"
(0007) #define uint unsigned int
(0008) 
(0009) ms(uint aa)
(0010) {
(0011) for(;aa>0;aa--);
_ms:
  aa                   --> R16
      91 C002      RJMP	0x0094
      92 5001      SUBI	R16,1
      93 4010      SBCI	R17,0
      94 3000      CPI	R16,0
      95 0701      CPC	R16,R17
      96 F7D9      BNE	0x0092
      97 9508      RET
(0012) }
(0013) 
(0014) main()
(0015) {
(0016) uchar i=0,rx_temp;
_main:
  rx_temp              --> R12
  i                    --> R10
      98 24AA      CLR	R10
(0017) init_devices();      //初始化
      99 DFE4      RCALL	_init_devices
(0018) DDRD=0xff;
      9A EF8F      LDI	R24,0xFF
      9B BB81      OUT	0x11,R24
(0019) PORTD=0x00;
      9C 2422      CLR	R2
      9D BA22      OUT	0x12,R2
(0020) ms(60000);
      9E E600      LDI	R16,0x60
      9F EE1A      LDI	R17,0xEA
      A0 DFF0      RCALL	_ms
      A1 C033      RJMP	0x00D5
(0021) while(1)
(0022) 		{
(0023)       		uart_tx(i);       //发送数据i
      A2 2D0A      MOV	R16,R10
      A3 DFE3      RCALL	_uart_tx
(0024) 			rx_temp=rx_c();   //查询接收
      A4 DFE6      RCALL	_rx_c
      A5 2EC0      MOV	R12,R16
(0025) 			if(rx_temp==i)    //验证发送接收是否正确
      A6 150A      CP	R16,R10
      A7 F561      BNE	0x00D4
(0026) 			{
(0027) 			i++;
      A8 94A3      INC	R10
(0028) 			PORTD=~i<<2; 
      A9 2C2A      MOV	R2,R10
      AA 9420      COM	R2
      AB 0C22      LSL	R2
      AC 0C22      LSL	R2
      AD BA22      OUT	0x12,R2
(0029) 			ms(60000);
      AE E600      LDI	R16,0x60
      AF EE1A      LDI	R17,0xEA
      B0 DFE0      RCALL	_ms
(0030) 			ms(60000);
      B1 E600      LDI	R16,0x60
      B2 EE1A      LDI	R17,0xEA
      B3 DFDD      RCALL	_ms
(0031) 			ms(60000);
      B4 E600      LDI	R16,0x60
      B5 EE1A      LDI	R17,0xEA
      B6 DFDA      RCALL	_ms
(0032) 			ms(60000);
      B7 E600      LDI	R16,0x60
      B8 EE1A      LDI	R17,0xEA
      B9 DFD7      RCALL	_ms
(0033) 			ms(60000);
      BA E600      LDI	R16,0x60
      BB EE1A      LDI	R17,0xEA
      BC DFD4      RCALL	_ms
(0034) 			}
      BD C017      RJMP	0x00D5
(0035) 			else              //通信错误
(0036) 			{
(0037) 			while(1)
(0038) 			     {
(0039) 			      PORTD=0x00;
      BE 2422      CLR	R2
      BF BA22      OUT	0x12,R2
(0040) 			      ms(60000);
      C0 E600      LDI	R16,0x60
      C1 EE1A      LDI	R17,0xEA
      C2 DFCE      RCALL	_ms
(0041) 			      ms(60000);
      C3 E600      LDI	R16,0x60
      C4 EE1A      LDI	R17,0xEA
      C5 DFCB      RCALL	_ms
(0042) 			      ms(60000);
      C6 E600      LDI	R16,0x60
      C7 EE1A      LDI	R17,0xEA
      C8 DFC8      RCALL	_ms
(0043) 			      PORTD=0xff;
      C9 EF8F      LDI	R24,0xFF
      CA BB82      OUT	0x12,R24
(0044) 			      ms(60000);
      CB E600      LDI	R16,0x60
      CC EE1A      LDI	R17,0xEA
      CD DFC3      RCALL	_ms
(0045) 			      ms(60000);
      CE E600      LDI	R16,0x60
      CF EE1A      LDI	R17,0xEA
      D0 DFC0      RCALL	_ms
(0046) 			      ms(60000);
FILE: <library>
      D1 E600      LDI	R16,0x60
      D2 EE1A      LDI	R17,0xEA
      D3 DFBD      RCALL	_ms
      D4 CFE9      RJMP	0x00BE
      D5 CFCC      RJMP	0x00A2
      D6 9508      RET

⌨️ 快捷键说明

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