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

📄 串口发送接收.lst

📁 ICCAVR_mega8_串口发送接收
💻 LST
字号:
__start:
__text_start:
      19 E5CF      LDI	R28,0x5F
      1A E0D4      LDI	R29,4
      1B BFCD      OUT	0x3D,R28
      1C BFDE      OUT	0x3E,R29
      1D 51CE      SUBI	R28,0x1E
      1E 40D0      SBCI	R29,0
      1F EA0A      LDI	R16,0xAA
      20 8308      STD	Y+0,R16
      21 2400      CLR	R0
      22 E6EC      LDI	R30,0x6C
      23 E0F0      LDI	R31,0
      24 E010      LDI	R17,0
      25 36EC      CPI	R30,0x6C
      26 07F1      CPC	R31,R17
      27 F011      BEQ	0x002A
      28 9201      ST	R0,Z+
      29 CFFB      RJMP	0x0025
      2A 8300      STD	Z+0,R16
      2B E2E6      LDI	R30,0x26
      2C E0F0      LDI	R31,0
      2D E6A0      LDI	R26,0x60
      2E E0B0      LDI	R27,0
      2F E010      LDI	R17,0
      30 E000      LDI	R16,0
      31 BF0B      OUT	0x3B,R16
      32 33E2      CPI	R30,0x32
      33 07F1      CPC	R31,R17
      34 F021      BEQ	0x0039
      35 95C8      LPM
      36 9631      ADIW	R30,1
      37 920D      ST	R0,X+
      38 CFF9      RJMP	0x0032
      39 D08D      RCALL	_main
_exit:
      3A CFFF      RJMP	_exit
FILE: E:\xiaozhiyong2009\设计资料\项目设计\ICCAVR_mega8_C\ICCAVR_mega8_串口发送接收\串口发送接收.c
(0001) //ICC-AVR application builder : 2009-3-11 14:28:07
(0002) // Target : M8
(0003) // Crystal: 8.0000Mhz
(0004) 
(0005) #include <iom8v.h>
(0006) #include <macros.h>
(0007) 
(0008) void port_init(void)
(0009) {
(0010)  PORTB = 0x00;
_port_init:
      3B 2422      CLR	R2
      3C BA28      OUT	0x18,R2
(0011)  DDRB  = 0x00;
      3D BA27      OUT	0x17,R2
(0012)  PORTC = 0x00; //m103 output only
      3E BA25      OUT	0x15,R2
(0013)  DDRC  = 0x00;
      3F BA24      OUT	0x14,R2
(0014)  PORTD = 0x00;
      40 BA22      OUT	0x12,R2
(0015)  DDRD  = 0x00;
      41 BA21      OUT	0x11,R2
      42 9508      RET
(0016) }
(0017) 
(0018) //call this routine to initialize all peripherals
(0019) void init_devices(void)
(0020) {
(0021)  //stop errant interrupts until set up
(0022)  CLI(); //disable all interrupts
_init_devices:
      43 94F8      BCLR	7
(0023)  port_init();
      44 DFF6      RCALL	_port_init
(0024) 
(0025)  MCUCR = 0x00;
      45 2422      CLR	R2
      46 BE25      OUT	0x35,R2
(0026)  GICR  = 0x00;
      47 BE2B      OUT	0x3B,R2
(0027)  TIMSK = 0x00; //timer interrupt sources
      48 BE29      OUT	0x39,R2
(0028)  SEI(); //re-enable interrupts
      49 9478      BSET	7
      4A 9508      RET
(0029)  //all peripherals are now initialized
(0030) }
(0031) 
(0032) /************************************
(0033) Name         :小延时程序
(0034) Target       :atmega8
(0035) Crystal(晶振):8M
(0036) ************************************/
(0037) void delay()
(0038) {
(0039)  unsigned int i;//最大值65536
(0040)  for (i=0;i<40000;i++)
_delay:
  i                    --> R16
      4B 2700      CLR	R16
      4C 2711      CLR	R17
      4D C002      RJMP	0x0050
      4E 5F0F      SUBI	R16,0xFF
      4F 4F1F      SBCI	R17,0xFF
      50 E480      LDI	R24,0x40
      51 E99C      LDI	R25,0x9C
      52 E0A0      LDI	R26,0
      53 E0B0      LDI	R27,0
      54 0118      MOVW	R2,R16
      55 2444      CLR	R4
      56 2455      CLR	R5
      57 1628      CP	R2,R24
      58 0639      CPC	R3,R25
      59 064A      CPC	R4,R26
      5A 065B      CPC	R5,R27
      5B F394      BLT	0x004E
      5C 9508      RET
(0041)  {;}
(0042) }
(0043) 
(0044) /***********************************************************
(0045) 用    途:串口发送接收程序
(0046) Taget   :mega8
(0047) crystal :8M
(0048) 介    绍:
(0049) **********************************************************/
(0050) //晶振和波特率
(0051) #define fosc 8000000
(0052) #define baud 9600
(0053) //UART初始化函数
(0054) void init_uart()
(0055) {
(0056)  UCSRB=(1<<RXEN)|(1<<TXEN)|(1<<RXCIE);//允许收发,打开接收中断
_init_uart:
      5D E988      LDI	R24,0x98
      5E B98A      OUT	0x0A,R24
(0057)  UBRRL=(fosc/16/(baud+1))%256;//设置波特率寄存器
      5F E384      LDI	R24,0x34
      60 B989      OUT	0x09,R24
(0058)  UBRRH=(fosc/16/(baud+1))/256;
      61 2422      CLR	R2
      62 BC20      OUT	0x20,R2
(0059)  UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);//8位数据+1位STOP
      63 E886      LDI	R24,0x86
      64 BD80      OUT	0x20,R24
      65 9508      RET
(0060) }
(0061) //字符输出
(0062) void uart_putchar(unsigned char c)
(0063) {
(0064)  while(!(UCSRA&(1<<UDRE)));//上次发送有没有完成
_uart_putchar:
  c                    --> R16
      66 9B5D      SBIS	0x0B,5
      67 CFFE      RJMP	_uart_putchar
(0065)  UDR=c;
      68 B90C      OUT	0x0C,R16
      69 9508      RET
(0066) }
(0067) //字符输入
(0068) unsigned char uart_getchar()
(0069) {
(0070)  while(!(UCSRA&(1<<RXC))){;}//有没有接收到数据
_uart_getchar:
      6A 9B5F      SBIS	0x0B,7
      6B CFFE      RJMP	_uart_getchar
(0071)  return UDR;
      6C B10C      IN	R16,0x0C
      6D 9508      RET
_uart_print:
  s                    --> R20
      6E 934A      ST	R20,-Y
      6F 935A      ST	R21,-Y
      70 01A8      MOVW	R20,R16
(0072) }
(0073) //带回车的字符串输出
(0074) int uart_print(char *s)
(0075) {
      71 C005      RJMP	0x0077
(0076)  while(*s)
(0077)  {
(0078)   uart_putchar(*s);
      72 01FA      MOVW	R30,R20
      73 8100      LDD	R16,Z+0
      74 DFF1      RCALL	_uart_putchar
(0079)   s++;
      75 5F4F      SUBI	R20,0xFF
      76 4F5F      SBCI	R21,0xFF
      77 01FA      MOVW	R30,R20
      78 8020      LDD	R2,Z+0
      79 2022      TST	R2
      7A F7B9      BNE	0x0072
(0080)  }
(0081)  uart_putchar(0x0a);//回车换行
      7B E00A      LDI	R16,0xA
      7C DFE9      RCALL	_uart_putchar
(0082)  uart_putchar(0x0d);
      7D E00D      LDI	R16,0xD
      7E DFE7      RCALL	_uart_putchar
(0083)  return 1;
      7F E001      LDI	R16,1
      80 E010      LDI	R17,0
      81 9159      LD	R21,Y+
      82 9149      LD	R20,Y+
      83 9508      RET
_uart_prints:
  s                    --> R20
      84 934A      ST	R20,-Y
      85 935A      ST	R21,-Y
      86 01A8      MOVW	R20,R16
(0084) }
(0085) //不带回车换行的字符串输出
(0086) void uart_prints(char *s)
(0087) {
      87 C005      RJMP	0x008D
(0088)  while(*s)
(0089)  {
(0090)   uart_putchar(*s);
      88 01FA      MOVW	R30,R20
      89 8100      LDD	R16,Z+0
      8A DFDB      RCALL	_uart_putchar
(0091)   s++;
      8B 5F4F      SUBI	R20,0xFF
      8C 4F5F      SBCI	R21,0xFF
      8D 01FA      MOVW	R30,R20
      8E 8020      LDD	R2,Z+0
      8F 2022      TST	R2
      90 F7B9      BNE	0x0088
      91 9159      LD	R21,Y+
      92 9149      LD	R20,Y+
      93 9508      RET
_uart_rec_int:
      94 920A      ST	R0,-Y
      95 921A      ST	R1,-Y
      96 922A      ST	R2,-Y
      97 923A      ST	R3,-Y
      98 924A      ST	R4,-Y
      99 925A      ST	R5,-Y
      9A 926A      ST	R6,-Y
      9B 927A      ST	R7,-Y
      9C 928A      ST	R8,-Y
      9D 929A      ST	R9,-Y
      9E 930A      ST	R16,-Y
      9F 931A      ST	R17,-Y
      A0 932A      ST	R18,-Y
      A1 933A      ST	R19,-Y
      A2 938A      ST	R24,-Y
      A3 939A      ST	R25,-Y
      A4 93AA      ST	R26,-Y
      A5 93BA      ST	R27,-Y
      A6 93EA      ST	R30,-Y
      A7 93FA      ST	R31,-Y
      A8 B60F      IN	R0,0x3F
      A9 920A      ST	R0,-Y
(0092)  }
(0093) }
(0094) //接收中断
(0095) #pragma interrupt_handler uart_rec_int:iv_USART_RX
(0096) void uart_rec_int()
(0097) {
(0098)  uart_putchar(UDR);
      AA B10C      IN	R16,0x0C
      AB DFBA      RCALL	_uart_putchar
(0099)  uart_putchar(0x0a);//回车换行
      AC E00A      LDI	R16,0xA
      AD DFB8      RCALL	_uart_putchar
(0100)  uart_putchar(0x0d);
      AE E00D      LDI	R16,0xD
      AF DFB6      RCALL	_uart_putchar
      B0 9009      LD	R0,Y+
      B1 BE0F      OUT	0x3F,R0
      B2 91F9      LD	R31,Y+
      B3 91E9      LD	R30,Y+
      B4 91B9      LD	R27,Y+
      B5 91A9      LD	R26,Y+
      B6 9199      LD	R25,Y+
      B7 9189      LD	R24,Y+
      B8 9139      LD	R19,Y+
      B9 9129      LD	R18,Y+
      BA 9119      LD	R17,Y+
      BB 9109      LD	R16,Y+
      BC 9099      LD	R9,Y+
      BD 9089      LD	R8,Y+
      BE 9079      LD	R7,Y+
      BF 9069      LD	R6,Y+
      C0 9059      LD	R5,Y+
      C1 9049      LD	R4,Y+
      C2 9039      LD	R3,Y+
      C3 9029      LD	R2,Y+
      C4 9019      LD	R1,Y+
      C5 9009      LD	R0,Y+
      C6 9518      RETI
(0101) }
(0102) //**************************************************************************
(0103) 
(0104) void main()
(0105) {
(0106)  port_init();
_main:
      C7 DF73      RCALL	_port_init
(0107)  init_devices();
      C8 DF7A      RCALL	_init_devices
(0108)  
(0109)  init_uart();
      C9 DF93      RCALL	_init_uart
(0110)  uart_print("xiaozhiyong");
      CA E600      LDI	R16,0x60
      CB E010      LDI	R17,0
      CC DFA1      RCALL	_uart_print
(0111)  while(1)
FILE: <library>
      CD CFFF      RJMP	0x00CD
      CE 9508      RET

⌨️ 快捷键说明

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