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

📄 uart.lst

📁 很好的串口调试程序
💻 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 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 940E007B  CALL	_main
_exit:
    004A CFFF      RJMP	_exit
FILE: uart.c
(0001) //ICC-AVR application builder : 2005-5-1 15:44:13
(0002) // Target : M16
(0003) // Crystal: 6.0000Mhz
(0004) 
(0005) #include <iom16v.h>
(0006) #include <macros.h>
(0007) 
(0008) #define b19200  ox19
(0009) #define b9600   0x26
(0010) #define baud   b9600
(0011) 
(0012) unsigned char com_in_buf[1];
(0013) 
(0014) void port_init(void)
(0015) {
(0016)  PORTA = 0xFF;
_port_init:
    004B EF8F      LDI	R24,0xFF
    004C BB8B      OUT	0x1B,R24
(0017)  DDRA  = 0xFF;
    004D BB8A      OUT	0x1A,R24
(0018)  PORTB = 0x00;
    004E 2422      CLR	R2
    004F BA28      OUT	0x18,R2
(0019)  DDRB  = 0x00;
    0050 BA27      OUT	0x17,R2
(0020)  PORTC = 0x00; //m103 output only
    0051 BA25      OUT	0x15,R2
(0021)  DDRC  = 0x00;
    0052 BA24      OUT	0x14,R2
(0022)  PORTD = 0x00;
    0053 BA22      OUT	0x12,R2
(0023)  DDRD  = 0x00;
    0054 BA21      OUT	0x11,R2
    0055 9508      RET
(0024) }
(0025) 
(0026) //UART0 initialize
(0027) // desired baud rate: 9600
(0028) // actual: baud rate:9615 (0.2%)
(0029) // char size: 8 bit
(0030) // parity: Disabled
(0031) void uart0_init(void)
(0032) {
(0033)  UCSRB = 0x00; //disable while setting baud rate
_uart0_init:
    0056 2422      CLR	R2
    0057 B82A      OUT	0x0A,R2
(0034)  UCSRA = 0x00;
    0058 B82B      OUT	0x0B,R2
(0035)  UCSRC = BIT(URSEL) | 0x06;
    0059 E886      LDI	R24,0x86
    005A BD80      OUT	0x20,R24
(0036)  UBRRL = baud; //set baud rate lo
    005B E286      LDI	R24,0x26
    005C B989      OUT	0x09,R24
(0037)  UBRRH = 0x00; //set baud rate hi
    005D BC20      OUT	0x20,R2
(0038)  UCSRB = 0x98;
    005E E988      LDI	R24,0x98
    005F B98A      OUT	0x0A,R24
    0060 9508      RET
(0039) }
(0040) 
(0041) void send_data(unsigned char back)
(0042) {
(0043)   while( !( UCSRA & (1<<UDRE)) ) ;
_send_data:
  back                 --> R16
    0061 9B5D      SBIS	0x0B,5
    0062 CFFE      RJMP	_send_data
(0044)   UDR=back;
    0063 B90C      OUT	0x0C,R16
    0064 9508      RET
_uart0_rx_isr:
    0065 940E0084  CALL	push_lset
(0045) }
(0046) 
(0047) #pragma interrupt_handler uart0_rx_isr:12
(0048) void uart0_rx_isr(void)
(0049) {
(0050)  //uart has received a character in UDR
(0051)  com_in_buf[0]=UDR;
    0067 B02C      IN	R2,0x0C
    0068 92200060  STS	com_in_buf,R2
(0052)  PORTA =~com_in_buf[0];
    006A 9420      COM	R2
    006B BA2B      OUT	0x1B,R2
(0053)  send_data(com_in_buf[0]);
    006C 91000060  LDS	R16,com_in_buf
    006E DFF2      RCALL	_send_data
    006F 940E009B  CALL	pop_lset
    0071 9518      RETI
(0054) }
(0055) 
(0056) //call this routine to initialize all peripherals
(0057) void init_devices(void)
(0058) {
(0059)  //stop errant interrupts until set up
(0060)  CLI(); //disable all interrupts
_init_devices:
    0072 94F8      BCLR	7
(0061)  port_init();
    0073 DFD7      RCALL	_port_init
(0062)  uart0_init();
    0074 DFE1      RCALL	_uart0_init
(0063) 
(0064)  MCUCR = 0x00;
    0075 2422      CLR	R2
    0076 BE25      OUT	0x35,R2
(0065)  GICR  = 0x00;
    0077 BE2B      OUT	0x3B,R2
(0066)  TIMSK = 0x00; //timer interrupt sources
    0078 BE29      OUT	0x39,R2
(0067)  SEI(); //re-enable interrupts
    0079 9478      BSET	7
    007A 9508      RET
(0068)  //all peripherals are now initialized
(0069) }
(0070) 
(0071) void main(void)
(0072) {
(0073)   char j;
(0074)   init_devices();
_main:
  j                    --> R20
    007B DFF6      RCALL	_init_devices
    007C C005      RJMP	0x0082
(0075)   while(1)
(0076)   {
(0077)     for(j=1;j<100;j++)
FILE: <library>
    007D E041      LDI	R20,1
    007E C001      RJMP	0x0080
    007F 9543      INC	R20
    0080 3644      CPI	R20,0x64
    0081 F3E8      BCS	0x007F
    0082 CFFA      RJMP	0x007D
    0083 9508      RET
push_lset:
    0084 93FA      ST	R31,-Y
    0085 93EA      ST	R30,-Y
    0086 93BA      ST	R27,-Y
    0087 93AA      ST	R26,-Y
    0088 939A      ST	R25,-Y
    0089 938A      ST	R24,-Y
    008A 933A      ST	R19,-Y
    008B 932A      ST	R18,-Y
    008C 931A      ST	R17,-Y
    008D 930A      ST	R16,-Y
    008E 929A      ST	R9,-Y
    008F 928A      ST	R8,-Y
    0090 927A      ST	R7,-Y
    0091 926A      ST	R6,-Y
    0092 925A      ST	R5,-Y
    0093 924A      ST	R4,-Y
    0094 923A      ST	R3,-Y
    0095 922A      ST	R2,-Y
    0096 921A      ST	R1,-Y
    0097 920A      ST	R0,-Y
    0098 B60F      IN	R0,0x3F
    0099 920A      ST	R0,-Y
    009A 9508      RET
pop_lset:
    009B 9009      LD	R0,Y+
    009C BE0F      OUT	0x3F,R0
    009D 9009      LD	R0,Y+
    009E 9019      LD	R1,Y+
    009F 9029      LD	R2,Y+
    00A0 9039      LD	R3,Y+
    00A1 9049      LD	R4,Y+
    00A2 9059      LD	R5,Y+
    00A3 9069      LD	R6,Y+
    00A4 9079      LD	R7,Y+
    00A5 9089      LD	R8,Y+
    00A6 9099      LD	R9,Y+
    00A7 9109      LD	R16,Y+
    00A8 9119      LD	R17,Y+
    00A9 9129      LD	R18,Y+
    00AA 9139      LD	R19,Y+
    00AB 9189      LD	R24,Y+
    00AC 9199      LD	R25,Y+
    00AD 91A9      LD	R26,Y+
    00AE 91B9      LD	R27,Y+
    00AF 91E9      LD	R30,Y+
    00B0 91F9      LD	R31,Y+
    00B1 9508      RET

⌨️ 快捷键说明

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