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

📄 queryad.lst

📁 ATmega16应用例子
💻 LST
📖 第 1 页 / 共 2 页
字号:
__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 + -