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

📄 usart.lst

📁 使用mega8的USART与计算机通信
💻 LST
字号:
__text_start:
__start:
    0016 E5CF      LDI	R28,0x5F
    0017 E0D4      LDI	R29,4
    0018 BFCD      OUT	0x3D,R28
    0019 BFDE      OUT	0x3E,R29
    001A 51C0      SUBI	R28,0x10
    001B 40D0      SBCI	R29,0
    001C EA0A      LDI	R16,0xAA
    001D 8308      STD	Y+0,R16
    001E 2400      CLR	R0
    001F E6E6      LDI	R30,0x66
    0020 E0F0      LDI	R31,0
    0021 E010      LDI	R17,0
    0022 36E6      CPI	R30,0x66
    0023 07F1      CPC	R31,R17
    0024 F011      BEQ	0x0027
    0025 9201      ST	R0,Z+
    0026 CFFB      RJMP	0x0022
    0027 8300      STD	Z+0,R16
    0028 E2E6      LDI	R30,0x26
    0029 E0F0      LDI	R31,0
    002A E6A0      LDI	R26,0x60
    002B E0B0      LDI	R27,0
    002C E010      LDI	R17,0
    002D 32EC      CPI	R30,0x2C
    002E 07F1      CPC	R31,R17
    002F F021      BEQ	0x0034
    0030 95C8      LPM
    0031 9631      ADIW	R30,1
    0032 920D      ST	R0,X+
    0033 CFF9      RJMP	0x002D
    0034 D04E      RCALL	_main
_exit:
    0035 CFFF      RJMP	_exit
FILE: C:\DOCUME~1\Administrator\桌面\maga8练习\USART\USART使用.c
(0001) //ICC-AVR application builder : 1980-1-4 4:49:58
(0002) // Target : M8
(0003) // Crystal: 1.0000Mhz
(0004) 
(0005) #include <iom8v.h>
(0006) #include <macros.h>
(0007) unsigned char f[6]={0x01,0x02,0x03,0x04,0x05,0x00};
(0008) 
(0009) void port_init(void)
(0010) {
(0011)  PORTB = 0xFF;
_port_init:
    0036 EF8F      LDI	R24,0xFF
    0037 BB88      OUT	0x18,R24
(0012)  DDRB  = 0x00;
    0038 2422      CLR	R2
    0039 BA27      OUT	0x17,R2
(0013)  PORTC = 0x7F; //m103 output only
    003A E78F      LDI	R24,0x7F
    003B BB85      OUT	0x15,R24
(0014)  DDRC  = 0x00;
    003C BA24      OUT	0x14,R2
(0015)  PORTD = 0xFF;
    003D EF8F      LDI	R24,0xFF
    003E BB82      OUT	0x12,R24
(0016)  DDRD  = 0x02;
    003F E082      LDI	R24,2
    0040 BB81      OUT	0x11,R24
(0017) }
    0041 9508      RET
(0018) 
(0019) //UART0 initialisation
(0020) // desired baud rate: 9600
(0021) // actual: baud rate:9615 (0.2%)
(0022) // char size: 8 bit
(0023) // parity: Disabled
(0024) void uart0_init(void)
(0025) {
(0026)  UCSRB = 0x00; //disable while setting baud rate
_uart0_init:
    0042 2422      CLR	R2
    0043 B82A      OUT	0x0A,R2
(0027)  UCSRA = 0x02;//倍速
    0044 E082      LDI	R24,2
    0045 B98B      OUT	0x0B,R24
(0028)  UCSRC = 0x86;//写UCSRAC,XCK下降沿采样,异步
    0046 E886      LDI	R24,0x86
    0047 BD80      OUT	0x20,R24
(0029)  UBRRL = 0x0C; //set baud rate lo
    0048 E08C      LDI	R24,0xC
    0049 B989      OUT	0x09,R24
(0030)  UBRRH = 0x00; //set baud rate hi
    004A BC20      OUT	0x20,R2
(0031)  UCSRB = 0x98;//接收结束中断使能
    004B E988      LDI	R24,0x98
    004C B98A      OUT	0x0A,R24
(0032)  }
    004D 9508      RET
(0033)  /*字符输入函数*/         
(0034) /*unsigned char getchar(void) 
(0035) { 
(0036)        while(!(UCSRA& (1<<RXC))); 
(0037)        return UDR; 
(0038) } 
(0039) *///UART0 发送一个字节
(0040) void put_char(unsigned char d)       
(0041) {/* 等待发送缓冲器为空 */
(0042) while ( !( UCSRA & (1<<UDRE)));
_put_char:
  d                    --> R16
    004E 9B5D      SBIS	0x0B,5
    004F CFFE      RJMP	_put_char
(0043) /* 将数据放入缓冲器,发送数据 */
(0044)   UDR=d;
    0050 B90C      OUT	0x0C,R16
(0045)   //while(!(UCSRA&0x40));        //等待TXC置位
(0046)   //UCSRA|=0x40;                 //写1清零
(0047) }
    0051 9508      RET
_put_s:
  s                    --> R20
    0052 D046      RCALL	push_gset1
    0053 01A8      MOVW	R20,R16
(0048)  //字符输入函数
(0049) void put_s(unsigned char *s) 
(0050) {  
    0054 C005      RJMP	0x005A
(0051)       while (*s) 
(0052)       { 
(0053)            put_char(*s); 
    0055 01FA      MOVW	R30,R20
    0056 8100      LDD	R16,Z+0
    0057 DFF6      RCALL	_put_char
(0054)            s++; 
    0058 5F4F      SUBI	R20,0xFF
    0059 4F5F      SBCI	R21,0xFF
    005A 01FA      MOVW	R30,R20
    005B 8020      LDD	R2,Z+0
    005C 2022      TST	R2
    005D F7B9      BNE	0x0055
(0055)        }         
(0056) }
    005E D03D      RCALL	pop_gset1
    005F 9508      RET
_uart0_rx_isr:
    0060 D04F      RCALL	push_lset
(0057) 
(0058) #pragma interrupt_handler uart0_rx_isr:12
(0059) void uart0_rx_isr(void)//接收中断RXC置1时中断
(0060) {
(0061) put_char(UDR);//接收完发送短信
    0061 B10C      IN	R16,0x0C
    0062 DFEB      RCALL	_put_char
(0062)  
(0063)  //uart has received a character in UDR
(0064) }
    0063 D063      RCALL	pop_lset
    0064 9518      RETI
(0065) 
(0066) //call this routine to initialise all peripherals
(0067) void init_devices(void)
(0068) {
(0069)  //stop errant interrupts until set up
(0070)  CLI(); //disable all interrupts
_init_devices:
    0065 94F8      BCLR	7
(0071)  port_init();
    0066 DFCF      RCALL	_port_init
(0072)  uart0_init();
    0067 DFDA      RCALL	_uart0_init
(0073) 
(0074)  MCUCR = 0x00;
    0068 2422      CLR	R2
    0069 BE25      OUT	0x35,R2
(0075)  GICR  = 0x00;
    006A BE2B      OUT	0x3B,R2
(0076)  TIMSK = 0x00; //timer interrupt sources
    006B BE29      OUT	0x39,R2
(0077)  SEI(); //re-enable interrupts
    006C 9478      BSET	7
(0078)  //all peripherals are now initialised
(0079) }
    006D 9508      RET
(0080) void delay_us(int time)
(0081) 	 {     
(0082)   	  do
(0083) 	  	{
(0084) 		 time--;
_delay_us:
  time                 --> R16
    006E 5001      SUBI	R16,1
    006F 4010      SBCI	R17,0
(0085) 		}	
(0086)   	  while (time>1);
    0070 E081      LDI	R24,1
    0071 E090      LDI	R25,0
    0072 1780      CP	R24,R16
    0073 0791      CPC	R25,R17
    0074 F3CC      BLT	0x006E
(0087) 	 }	   
    0075 9508      RET
_delay_ms:
  time                 --> R20
    0076 D022      RCALL	push_gset1
    0077 01A8      MOVW	R20,R16
(0088) void delay_ms(unsigned int time)
(0089) 	 {
    0078 C005      RJMP	0x007E
(0090) 	   while(time!=0)
(0091) 	  	  {		
(0092) 		   delay_us(30);
    0079 E10E      LDI	R16,0x1E
    007A E010      LDI	R17,0
    007B DFF2      RCALL	_delay_us
(0093) 		   time--;
    007C 5041      SUBI	R20,1
    007D 4050      SBCI	R21,0
    007E 3040      CPI	R20,0
    007F 0745      CPC	R20,R21
    0080 F7C1      BNE	0x0079
(0094) 		  }
(0095) 	 } 
    0081 D01A      RCALL	pop_gset1
    0082 9508      RET
(0096) 
(0097) void main()
(0098) {int i;
(0099)  init_devices();
_main:
  i                    --> R20
    0083 DFE1      RCALL	_init_devices
    0084 C012      RJMP	0x0097
(0100)  /*put_s("hello donkey!");
(0101)  put_char(0x0a);
(0102)  put_char(0x0d);
(0103)  put_s("i love you");*/
(0104)  while(1)
(0105)  {
(0106)  for(i=0;i<6;i++)
    0085 2744      CLR	R20
    0086 2755      CLR	R21
(0107)  {
(0108)  put_char(f[i]);
    0087 E680      LDI	R24,0x60
    0088 E090      LDI	R25,0
    0089 01FA      MOVW	R30,R20
    008A 0FE8      ADD	R30,R24
    008B 1FF9      ADC	R31,R25
    008C 8100      LDD	R16,Z+0
    008D DFC0      RCALL	_put_char
    008E 5F4F      SUBI	R20,0xFF
    008F 4F5F      SBCI	R21,0xFF
    0090 3046      CPI	R20,6
    0091 E0E0      LDI	R30,0
    0092 075E      CPC	R21,R30
    0093 F39C      BLT	0x0087
(0109)  }//显示数字时,调proteus里面黑屏右键hex display mode
(0110)  //while(1);
(0111)  delay_ms(100);
    0094 E604      LDI	R16,0x64
    0095 E010      LDI	R17,0
    0096 DFDF      RCALL	_delay_ms
    0097 CFED      RJMP	0x0085
(0112)  }
(0113)  }
FILE: <library>
    0098 9508      RET
push_gset1:
    0099 935A      ST	R21,-Y
    009A 934A      ST	R20,-Y
    009B 9508      RET
pop_gset1:
    009C E0E1      LDI	R30,1
pop:
    009D 9149      LD	R20,Y+
    009E 9159      LD	R21,Y+
    009F FDE0      SBRC	R30,0
    00A0 9508      RET
    00A1 9169      LD	R22,Y+
    00A2 9179      LD	R23,Y+
    00A3 FDE1      SBRC	R30,1
    00A4 9508      RET
    00A5 90A9      LD	R10,Y+
    00A6 90B9      LD	R11,Y+
    00A7 FDE2      SBRC	R30,2
    00A8 9508      RET
    00A9 90C9      LD	R12,Y+
    00AA 90D9      LD	R13,Y+
    00AB FDE3      SBRC	R30,3
    00AC 9508      RET
    00AD 90E9      LD	R14,Y+
    00AE 90F9      LD	R15,Y+
    00AF 9508      RET
push_lset:
    00B0 93FA      ST	R31,-Y
    00B1 93EA      ST	R30,-Y
    00B2 93BA      ST	R27,-Y
    00B3 93AA      ST	R26,-Y
    00B4 939A      ST	R25,-Y
    00B5 938A      ST	R24,-Y
    00B6 933A      ST	R19,-Y
    00B7 932A      ST	R18,-Y
    00B8 931A      ST	R17,-Y
    00B9 930A      ST	R16,-Y
    00BA 929A      ST	R9,-Y
    00BB 928A      ST	R8,-Y
    00BC 927A      ST	R7,-Y
    00BD 926A      ST	R6,-Y
    00BE 925A      ST	R5,-Y
    00BF 924A      ST	R4,-Y
    00C0 923A      ST	R3,-Y
    00C1 922A      ST	R2,-Y
    00C2 921A      ST	R1,-Y
    00C3 920A      ST	R0,-Y
    00C4 B60F      IN	R0,0x3F
    00C5 920A      ST	R0,-Y
    00C6 9508      RET
pop_lset:
    00C7 9009      LD	R0,Y+
    00C8 BE0F      OUT	0x3F,R0
    00C9 9009      LD	R0,Y+
    00CA 9019      LD	R1,Y+
    00CB 9029      LD	R2,Y+
    00CC 9039      LD	R3,Y+
    00CD 9049      LD	R4,Y+
    00CE 9059      LD	R5,Y+
    00CF 9069      LD	R6,Y+
    00D0 9079      LD	R7,Y+
    00D1 9089      LD	R8,Y+
    00D2 9099      LD	R9,Y+
    00D3 9109      LD	R16,Y+
    00D4 9119      LD	R17,Y+
    00D5 9129      LD	R18,Y+
    00D6 9139      LD	R19,Y+
    00D7 9189      LD	R24,Y+
    00D8 9199      LD	R25,Y+
    00D9 91A9      LD	R26,Y+
    00DA 91B9      LD	R27,Y+
    00DB 91E9      LD	R30,Y+
    00DC 91F9      LD	R31,Y+
    00DD 9508      RET

⌨️ 快捷键说明

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