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

📄 test.lst

📁 avr单片机mega128 的串口通讯的完整程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
__start:
__text_start:
    0071 EFCF      LDI	R28,0xFF
    0072 E1D0      LDI	R29,0x10
    0073 BFCD      OUT	0x3D,R28
    0074 BFDE      OUT	0x3E,R29
    0075 51C0      SUBI	R28,0x10
    0076 40D0      SBCI	R29,0
    0077 EA0A      LDI	R16,0xAA
    0078 8308      STD	Y+0,R16
    0079 2400      CLR	R0
    007A E5E6      LDI	R30,0x56
    007B E0F1      LDI	R31,1
    007C E011      LDI	R17,1
    007D 35E6      CPI	R30,0x56
    007E 07F1      CPC	R31,R17
    007F F011      BEQ	0x0082
    0080 9201      ST	R0,Z+
    0081 CFFB      RJMP	0x007D
    0082 8300      STD	Z+0,R16
    0083 E8EC      LDI	R30,0x8C
    0084 E0F0      LDI	R31,0
    0085 E0A0      LDI	R26,0
    0086 E0B1      LDI	R27,1
    0087 E010      LDI	R17,0
    0088 3EE2      CPI	R30,0xE2
    0089 07F1      CPC	R31,R17
    008A F021      BEQ	0x008F
    008B 95C8      LPM
    008C 9631      ADIW	R30,1
    008D 920D      ST	R0,X+
    008E CFF9      RJMP	0x0088
    008F 940E0092  CALL	_main
_exit:
    0091 CFFF      RJMP	_exit
FILE: C:\AVR_TOOL\test\main.c
(0001) /*--------------------------------------------------*/
(0002) /*             AVR-ARM开发网论坛                    */
(0003) /*           http://www.avrarm.com                  */
(0004) /*            AVR生成代码测试程序                   */
(0005) /*--------------------------------------------------*/
(0006) /*     程序由AVR辅助开发工具V2.1.1自动生成          */
(0007) /*     AVR系统的处理器为:   ATMega128               */
(0008) /*     AVR系统的晶振频率:   8.0000 Mhz             */
(0009) /*--------------------------------------------------*/
(0010) 
(0011) #include <iom128v.h>
(0012) #include <macros.h>
(0013) #include "uart.h"
(0014) 
(0015) 
(0016) //-----------------------------------------------------------
(0017) //主函数
(0018) //-----------------------------------------------------------
(0019) void main(void)
(0020) {
(0021)    unsigned char i=0;
_main:
  i                    --> R20
    0092 2744      CLR	R20
(0022) 
(0023)    Uart0_Init();
    0093 940E00C2  CALL	_Uart0_Init
(0024) 
(0025)    Puts0("AVR-ARM 开发网论坛RS232 通信测试程序");
    0095 E20C      LDI	R16,0x2C
    0096 E011      LDI	R17,1
    0097 940E00F7  CALL	_Puts0
(0026)    Puts0("Http://www.avrarm.com");
    0099 E106      LDI	R16,0x16
    009A E011      LDI	R17,1
    009B 940E00F7  CALL	_Puts0
(0027)    Puts0("ATMega128的串口0 测试");
    009D E000      LDI	R16,0
    009E E011      LDI	R17,1
    009F 940E00F7  CALL	_Puts0
(0028)    Putchar0(0x0d);
    00A1 E00D      LDI	R16,0xD
    00A2 940E00D6  CALL	_Putchar0
(0029)    Putchar0(0x0a);
    00A4 E00A      LDI	R16,0xA
    00A5 940E00D6  CALL	_Putchar0
    00A7 C018      RJMP	0x00C0
(0030) 
(0031)    while(1)
(0032)    {
(0033)       i = Getchar0();
    00A8 940E00D2  CALL	_Getchar0
    00AA 2F40      MOV	R20,R16
(0034)       if (i==0x0F)    //发送0x0F开始测试
    00AB 300F      CPI	R16,0xF
    00AC F499      BNE	0x00C0
(0035)       {
(0036)          i=0;
    00AD 2744      CLR	R20
(0037)          Puts0("AVR-ARM 开发网论坛RS232 通信测试程序");
    00AE E20C      LDI	R16,0x2C
    00AF E011      LDI	R17,1
    00B0 940E00F7  CALL	_Puts0
(0038)          Puts0("Http://www.avrarm.com");
    00B2 E106      LDI	R16,0x16
    00B3 E011      LDI	R17,1
    00B4 940E00F7  CALL	_Puts0
(0039)          Puts0("ATMega128的串口0 测试");
    00B6 E000      LDI	R16,0
    00B7 E011      LDI	R17,1
    00B8 940E00F7  CALL	_Puts0
(0040)          Putchar0(0x0d);
    00BA E00D      LDI	R16,0xD
    00BB 940E00D6  CALL	_Putchar0
(0041)          Putchar0(0x0a);
    00BD E00A      LDI	R16,0xA
    00BE 940E00D6  CALL	_Putchar0
    00C0 CFE7      RJMP	0x00A8
    00C1 9508      RET
FILE: C:\AVR_TOOL\test\uart.c
(0001) //-----------------------------------------------------------
(0002) //程序由AVR辅助开发工具V2.1.1自动生成     
(0003) //MCU系统的处理器为:    ATMega128
(0004) //MCU系统的晶振频率:    8.0000 Mhz
(0005) //-----------------------------------------------------------
(0006) 
(0007) #include <iom128v.h>
(0008) #include "uart.h"
(0009) #include "delay.h"
(0010) 
(0011) 
(0012) //-----------------------------------------------------------
(0013) //串口0初始化子程序
(0014) //字符长度:8位
(0015) //奇偶校验:禁止
(0016) //通讯模式:异步
(0017) //-----------------------------------------------------------
(0018) void Uart0_Init(void)
(0019) {
(0020)     UCSR0B  =  0x00;     //disable while setting baud rate
_Uart0_Init:
    00C2 2422      CLR	R2
    00C3 B82A      OUT	0x0A,R2
(0021)     UCSR0A  =  0x00;     //Bit1为1则倍速发送
    00C4 B82B      OUT	0x0B,R2
(0022)     UCSR0C  =  0x06;  
    00C5 E086      LDI	R24,6
    00C6 93800095  STS	0x95,R24
(0023)     UBRR0L  =  0x22;     //波特率:14400 Bps
    00C8 E282      LDI	R24,0x22
    00C9 B989      OUT	0x09,R24
(0024)     UBRR0H  =  0x00;     //误差率:-0.799%
    00CA 92200090  STS	0x90,R2
(0025)     UCSR0B  =  0x18;  
    00CC E188      LDI	R24,0x18
    00CD B98A      OUT	0x0A,R24
(0026) //初始化RS485通讯的流控制引脚
(0027)     RS485_RD0_PORT|= RS485_RD0_BIT;
    00CE 9A1A      SBI	0x03,2
(0028)     RS485_RD0_DDR|= RS485_RD0_BIT;
    00CF 9A12      SBI	0x02,2
(0029)     RS485_RD0_L;
    00D0 9A1A      SBI	0x03,2
    00D1 9508      RET
(0030) }
(0031) 
(0032) //-----------------------------------------------------------
(0033) //串口0接收字节子程序
(0034) //-----------------------------------------------------------
(0035) unsigned char Getchar0(void)
(0036) {
(0037)  while(!(UCSR0A& (1<<RXC0)));
_Getchar0:
    00D2 9B5F      SBIS	0x0B,7
    00D3 CFFE      RJMP	_Getchar0
(0038)    return UDR0;
    00D4 B10C      IN	R16,0x0C
    00D5 9508      RET
_Putchar0:
  c                    --> R20
    00D6 940E0257  CALL	push_gset1
    00D8 2F40      MOV	R20,R16
(0039) }
(0040) 
(0041) //-----------------------------------------------------------
(0042) //串口0发送字节子程序
(0043) //-----------------------------------------------------------
(0044) void Putchar0(unsigned char c)
(0045) {
(0046)    RS485_RD0_H;
    00D9 981A      CBI	0x03,2
(0047)    while (!(UCSR0A&(1<<UDRE0)));
    00DA 9B5D      SBIS	0x0B,5
    00DB CFFE      RJMP	0x00DA
(0048)    UDR0=c;
    00DC B94C      OUT	0x0C,R20
(0049)    while (!(UCSR0A&(1<<UDRE0)));
    00DD 9B5D      SBIS	0x0B,5
    00DE CFFE      RJMP	0x00DD
(0050)    delay_nus(500);
    00DF EF04      LDI	R16,0xF4
    00E0 E011      LDI	R17,1
    00E1 940E01B4  CALL	_delay_nus
(0051)    RS485_RD0_L;
    00E3 9A1A      SBI	0x03,2
    00E4 940E025A  CALL	pop_gset1
    00E6 9508      RET
_Putstr0:
  s                    --> R20
    00E7 940E0257  CALL	push_gset1
    00E9 01A8      MOVW	R20,R16
(0052) }
(0053) 
(0054) //-----------------------------------------------------------
(0055) //串口0发送字符串子程序
(0056) //-----------------------------------------------------------
(0057) void Putstr0(char *s)
(0058) {
    00EA C005      RJMP	0x00F0
(0059)    while (*s)
(0060)    {
(0061)       Putchar0(*s);
    00EB 01FA      MOVW	R30,R20
    00EC 8100      LDD	R16,Z+0
    00ED DFE8      RCALL	_Putchar0
(0062)       s++;
    00EE 5F4F      SUBI	R20,0xFF
    00EF 4F5F      SBCI	R21,0xFF
    00F0 01FA      MOVW	R30,R20
    00F1 8020      LDD	R2,Z+0
    00F2 2022      TST	R2
    00F3 F7B9      BNE	0x00EB
    00F4 940E025A  CALL	pop_gset1
    00F6 9508      RET
_Puts0:
  s                    --> R20
    00F7 940E0257  CALL	push_gset1
    00F9 01A8      MOVW	R20,R16
(0063)    }
(0064) }
(0065) 
(0066) //-----------------------------------------------------------
(0067) //串口0发送字符串子程序(带有换行符)
(0068) //-----------------------------------------------------------
(0069) void Puts0(char *s)
(0070) {
    00FA C005      RJMP	0x0100
(0071)    while (*s)
(0072)    {
(0073)       Putchar0(*s);
    00FB 01FA      MOVW	R30,R20
    00FC 8100      LDD	R16,Z+0
    00FD DFD8      RCALL	_Putchar0
(0074)       s++;
    00FE 5F4F      SUBI	R20,0xFF
    00FF 4F5F      SBCI	R21,0xFF
    0100 01FA      MOVW	R30,R20
    0101 8020      LDD	R2,Z+0
    0102 2022      TST	R2
    0103 F7B9      BNE	0x00FB
(0075)    }
(0076)    Putchar0(0x0d);   //回车换行
    0104 E00D      LDI	R16,0xD
    0105 DFD0      RCALL	_Putchar0
(0077)    Putchar0(0x0a);
    0106 E00A      LDI	R16,0xA
    0107 DFCE      RCALL	_Putchar0
    0108 940E025A  CALL	pop_gset1
    010A 9508      RET
_buffer2str:
  i                    --> R20
  hhh                  --> R16
    010B 940E0257  CALL	push_gset1
(0078) }
(0079) 
(0080) //-----------------------------------------------------------
(0081) //数组转换成可发送的字符串
(0082) //-----------------------------------------------------------
(0083) char *buffer2str(char *hhh)
(0084) {
(0085)    unsigned char i=0;
    010D 2744      CLR	R20
    010E C009      RJMP	0x0118
(0086) 
(0087)    while (i<40)
(0088)    {
(0089)       hhh[i]=hhh[i]+48;
    010F 2E24      MOV	R2,R20
    0110 2433      CLR	R3
    0111 0E20      ADD	R2,R16
    0112 1E31      ADC	R3,R17
    0113 01F1      MOVW	R30,R2
    0114 8180      LDD	R24,Z+0
    0115 5D80      SUBI	R24,0xD0
    0116 8380      STD	Z+0,R24
(0090)       i++;
    0117 9543      INC	R20
    0118 3248      CPI	R20,0x28
    0119 F3A8      BCS	0x010F
(0091)    }	
(0092)    return hhh;
    011A 940E025A  CALL	pop_gset1
    011C 9508      RET
_long2str:
  ss                   --> R10
  hh                   --> Y+6
    011D 940E01D6  CALL	push_arg4
    011F 940E0253  CALL	push_gset3
(0093) }
(0094) 
(0095) //-----------------------------------------------------------
(0096) //数字转换成可发送的字符串
(0097) //-----------------------------------------------------------
(0098) char *long2str(unsigned long hh)
(0099) {
(0100)    char *ss="    ";
    0121 E581      LDI	R24,0x51
    0122 E091      LDI	R25,1
    0123 015C      MOVW	R10,R24
(0101) 
(0102)    ss[0]=48+hh/1000;
    0124 EE48      LDI	R20,0xE8
    0125 E053      LDI	R21,3
    0126 E060      LDI	R22,0
    0127 E070      LDI	R23,0
    0128 01FE      MOVW	R30,R28
    0129 8026      LDD	R2,Z+6
    012A 8037      LDD	R3,Z+7
    012B 8440      LDD	R4,Z+8
    012C 8451      LDD	R5,Z+9
    012D 937A      ST	R23,-Y
    012E 936A      ST	R22,-Y
    012F 935A      ST	R21,-Y
    0130 934A      ST	R20,-Y
    0131 0181      MOVW	R16,R2
    0132 0192      MOVW	R18,R4
    0133 940E01DB  CALL	div32u
    0135 0118      MOVW	R2,R16
    0136 0129      MOVW	R4,R18
    0137 E340      LDI	R20,0x30
    0138 E050      LDI	R21,0
    0139 E060      LDI	R22,0
    013A E070      LDI	R23,0
    013B 0E24      ADD	R2,R20
    013C 1E35      ADC	R3,R21
    013D 1E46      ADC	R4,R22
    013E 1E57      ADC	R5,R23
    013F 01F5      MOVW	R30,R10
    0140 8220      STD	Z+0,R2
(0103)    ss[1]=48+(hh%1000)/100;
    0141 EE48      LDI	R20,0xE8
    0142 E053      LDI	R21,3
    0143 E060      LDI	R22,0
    0144 E070      LDI	R23,0
    0145 01FE      MOVW	R30,R28
    0146 8026      LDD	R2,Z+6
    0147 8037      LDD	R3,Z+7
    0148 8440      LDD	R4,Z+8
    0149 8451      LDD	R5,Z+9
    014A 937A      ST	R23,-Y
    014B 936A      ST	R22,-Y
    014C 935A      ST	R21,-Y
    014D 934A      ST	R20,-Y
    014E 0181      MOVW	R16,R2

⌨️ 快捷键说明

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