📄 queryad.lst
字号:
__text_start:
__start:
002E E5CF LDI R28,0x5F
002F E0D4 LDI R29,4
0030 BFCD OUT 0x3D,R28
0031 BFDE OUT 0x3E,R29
0032 51C0 SUBI R28,0x10
0033 40D0 SBCI R29,0
0034 EA0A LDI R16,0xAA
0035 8308 STD Y+0,R16
0036 2400 CLR R0
0037 E6E0 LDI R30,0x60
0038 E0F0 LDI R31,0
0039 E010 LDI R17,0
003A 36E9 CPI R30,0x69
003B 07F1 CPC R31,R17
003C F011 BEQ 0x003F
003D 9201 ST R0,Z+
003E CFFB RJMP 0x003A
003F 8300 STD Z+0,R16
0040 E5EC LDI R30,0x5C
0041 E0F0 LDI R31,0
0042 E6A0 LDI R26,0x60
0043 E0B0 LDI R27,0
0044 E010 LDI R17,0
0045 35EC CPI R30,0x5C
0046 07F1 CPC R31,R17
0047 F021 BEQ 0x004C
0048 95C8 LPM
0049 9631 ADIW R30,1
004A 920D ST R0,X+
004B CFF9 RJMP 0x0045
004C 940E0152 CALL _main
_exit:
004E CFFF RJMP _exit
_delay50us:
j --> R20
t --> R16
004F 940E022A CALL push_gset1
FILE: E:\ICCAVR_H\CmmICC.H
(0001) /*********************************************************************
(0002) 微 雪 电 子 WaveShare http://www.waveShare.net
(0003)
(0004) 目 的: 建立ICCAVR的底层库函数,增加各类补丁,方便系统程序移植
(0005)
(0006) 目标系统: 基于任何兼容C51的微处理器
(0007)
(0008) 应用软件: ICCAVR
(0009)
(0010) 版 本: Version 1.0
(0011)
(0012) 圆版时间: 2005-06-25
(0013)
(0014) 开发人员: SEE
(0015)
(0016) 说 明: 若用于商业用途,请保留此段文字或注明代码来源
(0017)
(0018) 深 圳 微 雪 电 子 保 留 所 有 的 版 权
(0019) *********************************************************************/
(0020)
(0021) /*01010101010101010101010101010101010101010101010101010101010101010101
(0022) ----------------------------------------------------------------------
(0023) 版本更新记录:
(0024)
(0025) ----------------------------------------------------------------------
(0026) 入口参数说明:
(0027)
(0028) ----------------------------------------------------------------------
(0029) 待定参数说明:
(0030)
(0031) ----------------------------------------------------------------------
(0032) 对外变量说明:
(0033) uint8 dataElem[6];
(0034) ----------------------------------------------------------------------
(0035) 对外函数说明:
(0036) void delay50us(uint16 t); //50us延时
(0037) void delay50ms(uint16 t); //50ms延时
(0038) void speaData(ulong D,uint8 C); //数据拆字
(0039) uint8 changeDToH(uint8 dec); //十进制强制转换为十六进制
(0040) uint8 converseDToH(uint8 dec); //十进制化为十六进制
(0041) uint8 changeHToD(uint8 hex); //十六进制强制转换为十进制
(0042) uint8 converseHToD(uint8 hex); //十六进制化为十进制
(0043) ----------------------------------------------------------------------
(0044) 10101010101010101010101010101010101010101010101010101010101010101010*/
(0045)
(0046) #ifndef CmmICC_H
(0047) #define CmmICC_H
(0048)
(0049) #include <stdio.h>
(0050) #include <math.h>
(0051) #include <string.h>
(0052) #include <macros.h>
(0053) #include <eeprom.h>
(0054)
(0055) /* 兼容一般程序员的常用写法 */
(0056) typedef unsigned char uchar;
(0057) typedef unsigned int uint;
(0058) typedef unsigned long ulong;
(0059) typedef signed char schar;
(0060) typedef signed int sint;
(0061) typedef signed long slong;
(0062)
(0063) /* 为方便移植,建议使用下面写法 */
(0064) typedef unsigned char bool;
(0065) typedef unsigned char uint8;
(0066) typedef unsigned int uint16;
(0067) typedef unsigned long uint32;
(0068) typedef signed char sint8;
(0069) typedef signed int sint16;
(0070) typedef signed long sint32;
(0071) //typedef signed char int8;
(0072) //typedef signed int int16;
(0073) //typedef signed long int32;
(0074)
(0075) /* 下面写法一般不推荐 */
(0076) //typedef unsigned char ubyte;
(0077) //typedef unsigned int uword;
(0078) //typedef unsigned long udword;
(0079) //typedef signed char sbyte;
(0080) //typedef signed int sword;
(0081) //typedef signed long sdword;
(0082)
(0083) /* 各程序员一般定义的默认值 */
(0084) //#define TRUE 1
(0085) //#define FALSE 0
(0086) //#define YES 1
(0087) //#define NO 0
(0088) //#define ON 1
(0089) //#define OFF 0
(0090) //#define ENABLE 1
(0091) //#define DISABLE 0
(0092) //#define CRR 1
(0093) //#define ERR 0
(0094) //#define RIGHT 1
(0095) //#define WRONG 0
(0096) //#define SUCCESS 1
(0097) //#define FAILURE 0
(0098)
(0099) /* 为减少常用操作需要使用的RAM,可考虑使用下面的define */
(0100) //#define _CALLOC(a) ((a *)calloc(n,sizeof(a)))
(0101) //#define _MALLOC(a) ((a *)malloc(sizeof(a)))
(0102) //
(0103) //#define _MIN(a,b) ((a) < (b) ? (a) : (b))
(0104) //#define _MAX(a,b) ((a) > (b) ? (a) : (b))
(0105) //
(0106) //#define _EXCHANGE(a,b) {int t; t=a; a=b; b=t;}
(0107)
(0108) /*--------------------------------------------------------------------
(0109) 函数全称:50us 延时
(0110) 函数功能:
(0111) 注意事项:基于7.3728M晶振,i<70
(0112) 提示说明:调用Delay50us(20),得到1ms延时
(0113) 输 入:
(0114) 返 回:无
(0115) --------------------------------------------------------------------*/
(0116) void delay50us(sint16 t)
(0117) {
(0118) uint8 j;
(0119) for(;t>0;t--)
0051 C007 RJMP 0x0059
(0120) for(j=0;j<70;j++)
0052 2744 CLR R20
0053 C001 RJMP 0x0055
0054 9543 INC R20
0055 3446 CPI R20,0x46
0056 F3E8 BCS 0x0054
0057 5001 SUBI R16,1
0058 4010 SBCI R17,0
0059 2422 CLR R2
005A 2433 CLR R3
005B 1620 CP R2,R16
005C 0631 CPC R3,R17
005D F3A4 BLT 0x0052
(0121) ;
(0122) }
005E 940E022D CALL pop_gset1
0060 9508 RET
_delay50ms:
i --> R20
t --> R16
0061 940E022A CALL push_gset1
(0123) /*--------------------------------------------------------------------
(0124) 函数全称:50ms 延时
(0125) 函数功能:
(0126) 注意事项:基于7.3728M晶振,i<52642
(0127) 提示说明:调用delay50ms(20),得到1s延时
(0128) 输 入:
(0129) 返 回:无
(0130) --------------------------------------------------------------------*/
(0131) void delay50ms(sint16 t)
(0132) {
(0133) uint16 i;
(0134) for(;t>0;t--)
0063 C00B RJMP 0x006F
(0135) for(i=0;i<52642;i++)
0064 2744 CLR R20
0065 2755 CLR R21
0066 C002 RJMP 0x0069
0067 5F4F SUBI R20,0xFF
0068 4F5F SBCI R21,0xFF
0069 3A42 CPI R20,0xA2
006A ECED LDI R30,0xCD
006B 075E CPC R21,R30
006C F3D0 BCS 0x0067
006D 5001 SUBI R16,1
006E 4010 SBCI R17,0
006F 2422 CLR R2
0070 2433 CLR R3
0071 1620 CP R2,R16
0072 0631 CPC R3,R17
0073 F384 BLT 0x0064
(0136) ;
(0137) }
0074 940E022D CALL pop_gset1
0076 9508 RET
_speaData:
y --> Y+4
j --> Y+0
i --> R10
C --> R12
D --> Y+16
0077 940E0169 CALL push_arg4
0079 940E0249 CALL push_gset4
007B 9728 SBIW R28,0x8
007C 88CC LDD R12,Y+20
(0138) /*--------------------------------------------------------------------
(0139) 函数全称:拆字
(0140) 函数功能:
(0141) 注意事项:D<=999999,C<=6
(0142) 提示说明:调用speaData(12,2),得到dataElem[0]=2、dataElem[0]=1
(0143) 输 入:
(0144) 返 回:无
(0145) --------------------------------------------------------------------*/
(0146) uint8 dataElem[6];
(0147) void speaData(ulong D,uint8 C)
(0148) {
(0149) uint8 i;
(0150) ulong j,y;
(0151) for(i=0,j=1;i<C;i++)
007D 24AA CLR R10
007E E041 LDI R20,1
007F E050 LDI R21,0
0080 E060 LDI R22,0
0081 E070 LDI R23,0
0082 01FE MOVW R30,R28
0083 8340 STD Z+0,R20
0084 8351 STD Z+1,R21
0085 8362 STD Z+2,R22
0086 8373 STD Z+3,R23
0087 C046 RJMP 0x00CE
(0152) {
(0153) y=D/j;
0088 01FE MOVW R30,R28
0089 8020 LDD R2,Z+0
008A 8031 LDD R3,Z+1
008B 8042 LDD R4,Z+2
008C 8053 LDD R5,Z+3
008D 01FE MOVW R30,R28
008E 8860 LDD R6,Z+16
008F 8871 LDD R7,Z+17
0090 8882 LDD R8,Z+18
0091 8893 LDD R9,Z+19
0092 925A ST R5,-Y
0093 924A ST R4,-Y
0094 923A ST R3,-Y
0095 922A ST R2,-Y
0096 0183 MOVW R16,R6
0097 0194 MOVW R18,R8
0098 940E016E CALL div32u
009A 01FE MOVW R30,R28
009B 8304 STD Z+4,R16
009C 8315 STD Z+5,R17
009D 8326 STD Z+6,R18
009E 8337 STD Z+7,R19
(0154) dataElem[i]=y%10;
009F E04A LDI R20,0xA
00A0 E050 LDI R21,0
00A1 E060 LDI R22,0
00A2 E070 LDI R23,0
00A3 01FE MOVW R30,R28
00A4 8024 LDD R2,Z+4
00A5 8035 LDD R3,Z+5
00A6 8046 LDD R4,Z+6
00A7 8057 LDD R5,Z+7
00A8 937A ST R23,-Y
00A9 936A ST R22,-Y
00AA 935A ST R21,-Y
00AB 934A ST R20,-Y
00AC 0181 MOVW R16,R2
00AD 0192 MOVW R18,R4
00AE 940E0170 CALL mod32u
00B0 E683 LDI R24,0x63
00B1 E090 LDI R25,0
00B2 2DEA MOV R30,R10
00B3 27FF CLR R31
00B4 0FE8 ADD R30,R24
00B5 1FF9 ADC R31,R25
00B6 8300 STD Z+0,R16
(0155) j*=10;
00B7 01FE MOVW R30,R28
00B8 8020 LDD R2,Z+0
00B9 8031 LDD R3,Z+1
00BA 8042 LDD R4,Z+2
00BB 8053 LDD R5,Z+3
00BC E04A LDI R20,0xA
00BD E050 LDI R21,0
00BE E060 LDI R22,0
00BF E070 LDI R23,0
00C0 925A ST R5,-Y
00C1 924A ST R4,-Y
00C2 923A ST R3,-Y
00C3 922A ST R2,-Y
00C4 018A MOVW R16,R20
00C5 019B MOVW R18,R22
00C6 940E01F7 CALL empy32u
00C8 01FE MOVW R30,R28
00C9 8300 STD Z+0,R16
00CA 8311 STD Z+1,R17
00CB 8322 STD Z+2,R18
00CC 8333 STD Z+3,R19
00CD 94A3 INC R10
00CE 14AC CP R10,R12
00CF F408 BCC 0x00D1
00D0 CFB7 RJMP 0x0088
(0156) }
(0157) }
00D1 9628 ADIW R28,0x8
00D2 940E0227 CALL pop_gset4
00D4 9624 ADIW R28,4
00D5 9508 RET
_changeDToH:
hex --> R20
t --> Y+0
dec --> R20
00D6 940E022A CALL push_gset1
00D8 2F40 MOV R20,R16
00D9 9722 SBIW R28,2
(0158) /*--------------------------------------------------------------------
(0159) 函数全称:十进制强制转换为十六进制
(0160) 函数功能:
(0161) 注意事项:无
(0162) 提示说明:调用changeDToH(33),return 0x33
(0163) 输 入:
(0164) 返 回:uint8 hex
(0165) --------------------------------------------------------------------*/
(0166) uint8 changeDToH(uint8 dec)
(0167) {
(0168) uint8 hex;
(0169) uint8 t[2];
(0170) t[1]=dec/10;
00DA E01A LDI R17,0xA
00DB 2F04 MOV R16,R20
00DC 940E01E1 CALL div8u
00DE 8309 STD Y+1,R16
(0171) t[0]=dec%10;
00DF E01A LDI R17,0xA
00E0 2F04 MOV R16,R20
00E1 940E01DF CALL mod8u
00E3 8308 STD Y+0,R16
(0172) hex=t[1]*16+t[0];
00E4 8029 LDD R2,Y+1
00E5 E180 LDI R24,0x10
00E6 9D82 MUL R24,R2
00E7 2D40 MOV R20,R0
00E8 0F40 ADD R20,R16
(0173) return hex;
00E9 2F04 MOV R16,R20
00EA 9622 ADIW R28,2
00EB 940E022D CALL pop_gset1
00ED 9508 RET
_converseDToH:
hex --> R20
t --> Y+0
dec --> R20
00EE 940E022A CALL push_gset1
00F0 2F40 MOV R20,R16
00F1 9722 SBIW R28,2
(0174) }
(0175) /*--------------------------------------------------------------------
(0176) 函数全称:十进制化为十六进制
(0177) 函数功能:
(0178) 注意事项:无
(0179) 提示说明:调用converseDToH(33),return 21
(0180) 输 入:
(0181) 返 回:uint8 hex
(0182) --------------------------------------------------------------------*/
(0183) uint8 converseDToH(uint8 dec)
(0184) {
(0185) uint8 hex;
(0186) uint8 t[2];
(0187) t[1]=dec/16;
00F2 2F84 MOV R24,R20
00F3 9582 SWAP R24
00F4 708F ANDI R24,0xF
00F5 8389 STD Y+1,R24
(0188) t[0]=dec%16;
00F6 E110 LDI R17,0x10
00F7 2F04 MOV R16,R20
00F8 940E01DF CALL mod8u
00FA 8308 STD Y+0,R16
(0189) hex=t[1]*16+t[0];
00FB 8029 LDD R2,Y+1
00FC E180 LDI R24,0x10
00FD 9D82 MUL R24,R2
00FE 2D40 MOV R20,R0
00FF 0F40 ADD R20,R16
(0190) return hex;
0100 2F04 MOV R16,R20
0101 9622 ADIW R28,2
0102 940E022D CALL pop_gset1
0104 9508 RET
_changeHToD:
dec --> R20
t --> Y+0
hex --> R20
0105 940E022A CALL push_gset1
0107 2F40 MOV R20,R16
0108 9722 SBIW R28,2
(0191) }
(0192) /*--------------------------------------------------------------------
(0193) 函数全称:十六进制强制转换为十进制
(0194) 函数功能:
(0195) 注意事项:无
(0196) 提示说明:调用changeHToD(0x33),return 33
(0197) 输 入:
(0198) 返 回:uint8 dec
(0199) --------------------------------------------------------------------*/
(0200) uint8 changeHToD(uint8 hex)
(0201) {
(0202) uint8 dec;
(0203) uint8 t[2];
(0204) t[1]=hex/16;
0109 2F84 MOV R24,R20
010A 9582 SWAP R24
010B 708F ANDI R24,0xF
010C 8389 STD Y+1,R24
(0205) t[0]=hex%16;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -