📄 test.lst
字号:
__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 + -