📄 rddayinji.lst
字号:
__text_start:
__start:
007B EFCF LDI R28,0xFF
007C E1D0 LDI R29,0x10
007D BFCD OUT 0x3D,R28
007E BFDE OUT 0x3E,R29
007F 51C0 SUBI R28,0x10
0080 40D0 SBCI R29,0
0081 EA0A LDI R16,0xAA
0082 8308 STD Y+0,R16
0083 2400 CLR R0
0084 E6EA LDI R30,0x6A
0085 E0F1 LDI R31,1
0086 E011 LDI R17,1
0087 36EA CPI R30,0x6A
0088 07F1 CPC R31,R17
0089 F011 BEQ 0x008C
008A 9201 ST R0,Z+
008B CFFB RJMP 0x0087
008C 8300 STD Z+0,R16
008D E8EC LDI R30,0x8C
008E E0F0 LDI R31,0
008F E0A0 LDI R26,0
0090 E0B1 LDI R27,1
0091 E010 LDI R17,0
0092 3FE6 CPI R30,0xF6
0093 07F1 CPC R31,R17
0094 F021 BEQ 0x0099
0095 95C8 LPM
0096 9631 ADIW R30,1
0097 920D ST R0,X+
0098 CFF9 RJMP 0x0092
0099 940E00D8 CALL _main
_exit:
009B CFFF RJMP _exit
FILE: C:\DOCUME~1\wangqinbo\MYDOCU~1\avrc\RDdayinji.c
(0001) /***********************************************************/
(0002) //Title:ATMAGE128串口通信程序-查询方式
(0003) //ICC-AVR : 2009-2-22 13:37:40
(0004) // Target : M128
(0005) // Crystal: 8.0000Mhz
(0006) //Author :borlittle
(0007) //Function:usart0 test
(0008) //备注 :本程序经调试好使
(0009) /***********************************************************/
(0010) #include <iom128v.h>
(0011) #include <macros.h>
(0012)
(0013) #define uchar unsigned char //定义无符号字符为 uchar
(0014) #define uint unsigned int //定义无符号整型
(0015) #define Crystal 8000000 //晶振8MHZ
(0016) #define Baud 9600 //波特率
(0017) /***************打印命令**************************************/
(0018) //0x1b,0x38->选择不同点阵汉字点阵,默认0,16*16点阵打印
(0019) //0x0d ->回车,执行打印
(0020) //0x0e ->横向字符放大2倍
(0021) //0x1b,0x40->打印机初始化
(0022) //0x0a ->换行
(0023) //0x1b,0x43,0xn->设置页行数
(0024) //0x0c ->换页
(0025) /*****************************************************/
(0026)
(0027) uchar data1[]={0xd0,0xc2,0xc8,0xd9,0xc8,0xcb};//汉字内码://汉字内码“新荣达”
(0028) uchar initorder[]={0x1b,0x43,0x08,0x00,0x1b,0x38,0x00,0x00}; //初始化命令,
(0029) uchar printorder[]={0x0a,0x0d}; //打印命令
(0030) uchar newline[]={0x0a};//换行设置
(0031) uchar newpage[]={0x0c,0x1b,0x40,0x00};//换页设置
(0032)
(0033)
(0034) //函数声明
(0035) void port_init(void);
(0036) void usart0_init(void);
(0037) void init_devices(void);
(0038) void usart0_char_send(uchar i);
(0039) void usart0_str_send(char *s);
(0040) uchar usart0_char_receive(void);
(0041)
(0042) /******************端口初始化*******************************/
(0043) void port_init(void)
(0044) {
(0045) PORTE = 0xFF; //设置RXD0和TXD0
_port_init:
009C EF8F LDI R24,0xFF
009D B983 OUT 0x03,R24
(0046) DDRE = 0x02;
009E E082 LDI R24,2
009F B982 OUT 0x02,R24
00A0 9508 RET
(0047) }
(0048) /*****************串口0初始化*********************************/
(0049) void usart0_init(void)
(0050) {
(0051) UCSR0B = 0x00; //禁止发送和接收
_usart0_init:
00A1 2422 CLR R2
00A2 B82A OUT 0x0A,R2
(0052) UCSR0A = 0x02; //倍速异步模式USX0=1
00A3 E082 LDI R24,2
00A4 B98B OUT 0x0B,R24
(0053) UCSR0C = 0x06; //0000 0110,UCSZ01=1,UCSZ00=1;8位字符,1位停止位
00A5 E086 LDI R24,6
00A6 93800095 STS 0x95,R24
(0054) UBRR0L=(Crystal/8/(Baud+1))%256; //若为正常异步模式USX0=0则位(Crystal/16/(Baud+1))%256
00A8 E688 LDI R24,0x68
00A9 B989 OUT 0x09,R24
(0055) UBRR0H=(Crystal/8/(Baud+1))/256; //参见ATMAGE128使用手册
00AA 92200090 STS 0x90,R2
(0056) UCSR0B = 0x08; //允许发送
00AC E088 LDI R24,0x8
00AD B98A OUT 0x0A,R24
00AE 9508 RET
(0057) }
(0058) /******************初始器件**************************************/
(0059) void init_devices(void)
(0060) {
(0061) port_init();
_init_devices:
00AF DFEC RCALL _port_init
(0062) usart0_init();
00B0 DFF0 RCALL _usart0_init
00B1 9508 RET
(0063) }
(0064) //****************发送一个字符******************************
(0065) void usart0_char_send(uchar i)
(0066) {
(0067) while(!(UCSR0A&(1<<UDRE0)));
_usart0_char_send:
i --> R16
00B2 9B5D SBIS 0x0B,5
00B3 CFFE RJMP _usart0_char_send
(0068) UDR0=i;
00B4 B90C OUT 0x0C,R16
00B5 9508 RET
_usart0_str_send:
s --> R20
00B6 940E0111 CALL push_gset1
00B8 01A8 MOVW R20,R16
(0069) }
(0070) /******************发送一个字符串*************************/
(0071) void usart0_str_send(char *s)
(0072) {
00B9 C005 RJMP 0x00BF
(0073) while(*s)
(0074) {
(0075) usart0_char_send(*s);
00BA 01FA MOVW R30,R20
00BB 8100 LDD R16,Z+0
00BC DFF5 RCALL _usart0_char_send
(0076) s++;
00BD 5F4F SUBI R20,0xFF
00BE 4F5F SBCI R21,0xFF
00BF 01FA MOVW R30,R20
00C0 8020 LDD R2,Z+0
00C1 2022 TST R2
00C2 F7B9 BNE 0x00BA
00C3 940E0114 CALL pop_gset1
00C5 9508 RET
_usart0_str_sendArray:
i --> R20
len --> R22
q --> R10
00C6 940E010D CALL push_gset3
00C8 2F62 MOV R22,R18
00C9 0158 MOVW R10,R16
(0077) }
(0078) }
(0079) /*********************发送一个数组**********************/
(0080) void usart0_str_sendArray(uchar *q,uchar len)
(0081) {
(0082) uchar i;
(0083) for(i=0;i<len;i++) //控制字符个数
00CA 2744 CLR R20
00CB C007 RJMP 0x00D3
(0084) {
(0085) usart0_char_send(*q);
00CC 01F5 MOVW R30,R10
00CD 8100 LDD R16,Z+0
00CE DFE3 RCALL _usart0_char_send
(0086) q++;
00CF 01C5 MOVW R24,R10
00D0 9601 ADIW R24,1
00D1 015C MOVW R10,R24
00D2 9543 INC R20
00D3 1746 CP R20,R22
00D4 F3B8 BCS 0x00CC
00D5 940E0106 CALL pop_gset3
00D7 9508 RET
(0087) }
(0088) }
(0089)
(0090) /***************主函数*****************************/
(0091) void main(void)
(0092) {
(0093) init_devices();
_main:
00D8 DFD6 RCALL _init_devices
(0094) usart0_str_sendArray(initorder,8);
00D9 E028 LDI R18,0x8
00DA E006 LDI R16,6
00DB E011 LDI R17,1
00DC DFE9 RCALL _usart0_str_sendArray
(0095) usart0_str_send("阀状态:正常");
00DD E50D LDI R16,0x5D
00DE E011 LDI R17,1
00DF DFD6 RCALL _usart0_str_send
(0096) usart0_str_sendArray(newline,1);
00E0 E021 LDI R18,1
00E1 E100 LDI R16,0x10
00E2 E011 LDI R17,1
00E3 DFE2 RCALL _usart0_str_sendArray
(0097) usart0_str_send("测试阀编号:12");
00E4 E40E LDI R16,0x4E
00E5 E011 LDI R17,1
00E6 DFCF RCALL _usart0_str_send
(0098) usart0_str_sendArray(newline,1);
00E7 E021 LDI R18,1
00E8 E100 LDI R16,0x10
00E9 E011 LDI R17,1
00EA DFDB RCALL _usart0_str_sendArray
(0099) usart0_str_send("测试阀号: 3");
00EB E401 LDI R16,0x41
00EC E011 LDI R17,1
00ED DFC8 RCALL _usart0_str_send
(0100) usart0_str_sendArray(newline,1);
00EE E021 LDI R18,1
00EF E100 LDI R16,0x10
00F0 E011 LDI R17,1
00F1 DFD4 RCALL _usart0_str_sendArray
(0101) usart0_str_send("测试者号:223");
00F2 E303 LDI R16,0x33
00F3 E011 LDI R17,1
00F4 DFC1 RCALL _usart0_str_send
(0102) usart0_str_sendArray(newline,1);
00F5 E021 LDI R18,1
00F6 E100 LDI R16,0x10
00F7 E011 LDI R17,1
00F8 DFCD RCALL _usart0_str_sendArray
(0103) usart0_str_send("测试时间:2009年2月24日15:46");
00F9 E105 LDI R16,0x15
00FA E011 LDI R17,1
00FB DFBA RCALL _usart0_str_send
(0104) usart0_str_sendArray(newline,1);
00FC E021 LDI R18,1
00FD E100 LDI R16,0x10
00FE E011 LDI R17,1
00FF DFC6 RCALL _usart0_str_sendArray
(0105) usart0_str_sendArray(newpage,3);
0100 E023 LDI R18,3
0101 E101 LDI R16,0x11
0102 E011 LDI R17,1
0103 DFC2 RCALL _usart0_str_sendArray
(0106) while(1);
FILE: <library>
0104 CFFF RJMP 0x0104
0105 9508 RET
pop_gset3:
0106 E0E4 LDI R30,4
0107 940C0115 JMP pop
push_gset5:
0109 92FA ST R15,-Y
010A 92EA ST R14,-Y
push_gset4:
010B 92DA ST R13,-Y
010C 92CA ST R12,-Y
push_gset3:
010D 92BA ST R11,-Y
010E 92AA ST R10,-Y
push_gset2:
010F 937A ST R23,-Y
0110 936A ST R22,-Y
push_gset1:
0111 935A ST R21,-Y
0112 934A ST R20,-Y
0113 9508 RET
pop_gset1:
0114 E0E1 LDI R30,1
pop:
0115 9149 LD R20,Y+
0116 9159 LD R21,Y+
0117 FDE0 SBRC R30,0
0118 9508 RET
0119 9169 LD R22,Y+
011A 9179 LD R23,Y+
011B FDE1 SBRC R30,1
011C 9508 RET
011D 90A9 LD R10,Y+
011E 90B9 LD R11,Y+
011F FDE2 SBRC R30,2
0120 9508 RET
0121 90C9 LD R12,Y+
0122 90D9 LD R13,Y+
0123 FDE3 SBRC R30,3
0124 9508 RET
0125 90E9 LD R14,Y+
0126 90F9 LD R15,Y+
0127 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -