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

📄 sendrcvself.lst

📁 ATmega16应用例子
💻 LST
📖 第 1 页 / 共 2 页
字号:
__start:
__text_start:
    002A E5CF      LDI	R28,0x5F
    002B E0D4      LDI	R29,4
    002C BFCD      OUT	0x3D,R28
    002D BFDE      OUT	0x3E,R29
    002E 51C0      SUBI	R28,0x10
    002F 40D0      SBCI	R29,0
    0030 EA0A      LDI	R16,0xAA
    0031 8308      STD	Y+0,R16
    0032 2400      CLR	R0
    0033 E6E0      LDI	R30,0x60
    0034 E0F0      LDI	R31,0
    0035 E010      LDI	R17,0
    0036 36E6      CPI	R30,0x66
    0037 07F1      CPC	R31,R17
    0038 F011      BEQ	0x003B
    0039 9201      ST	R0,Z+
    003A CFFB      RJMP	0x0036
    003B 8300      STD	Z+0,R16
    003C E5E4      LDI	R30,0x54
    003D E0F0      LDI	R31,0
    003E E6A0      LDI	R26,0x60
    003F E0B0      LDI	R27,0
    0040 E010      LDI	R17,0
    0041 35E4      CPI	R30,0x54
    0042 07F1      CPC	R31,R17
    0043 F021      BEQ	0x0048
    0044 95C8      LPM
    0045 9631      ADIW	R30,1
    0046 920D      ST	R0,X+
    0047 CFF9      RJMP	0x0041
    0048 940E014C  CALL	_main
_exit:
    004A CFFF      RJMP	_exit
_delay50us:
  j                    --> R20
  t                    --> R16
    004B 940E021D  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--)			
    004D C007      RJMP	0x0055
(0120)         for(j=0;j<70;j++)	
    004E 2744      CLR	R20
    004F C001      RJMP	0x0051
    0050 9543      INC	R20
    0051 3446      CPI	R20,0x46
    0052 F3E8      BCS	0x0050
    0053 5001      SUBI	R16,1
    0054 4010      SBCI	R17,0
    0055 2422      CLR	R2
    0056 2433      CLR	R3
    0057 1620      CP	R2,R16
    0058 0631      CPC	R3,R17
    0059 F3A4      BLT	0x004E
(0121)             ;
(0122) }
    005A 940E0220  CALL	pop_gset1
    005C 9508      RET
_delay50ms:
  i                    --> R20
  t                    --> R16
    005D 940E021D  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--)
    005F C00B      RJMP	0x006B
(0135) 		for(i=0;i<52642;i++)	
    0060 2744      CLR	R20
    0061 2755      CLR	R21
    0062 C002      RJMP	0x0065
    0063 5F4F      SUBI	R20,0xFF
    0064 4F5F      SBCI	R21,0xFF
    0065 3A42      CPI	R20,0xA2
    0066 ECED      LDI	R30,0xCD
    0067 075E      CPC	R21,R30
    0068 F3D0      BCS	0x0063
    0069 5001      SUBI	R16,1
    006A 4010      SBCI	R17,0
    006B 2422      CLR	R2
    006C 2433      CLR	R3
    006D 1620      CP	R2,R16
    006E 0631      CPC	R3,R17
    006F F384      BLT	0x0060
(0136) 			;								 
(0137) }
    0070 940E0220  CALL	pop_gset1
    0072 9508      RET
_speaData:
  y                    --> Y+4
  j                    --> Y+0
  i                    --> R10
  C                    --> R12
  D                    --> Y+16
    0073 940E015C  CALL	push_arg4
    0075 940E023C  CALL	push_gset4
    0077 9728      SBIW	R28,0x8
    0078 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++)               
    0079 24AA      CLR	R10
    007A E041      LDI	R20,1
    007B E050      LDI	R21,0
    007C E060      LDI	R22,0
    007D E070      LDI	R23,0
    007E 01FE      MOVW	R30,R28
    007F 8340      STD	Z+0,R20
    0080 8351      STD	Z+1,R21
    0081 8362      STD	Z+2,R22
    0082 8373      STD	Z+3,R23
    0083 C046      RJMP	0x00CA
(0152)     {
(0153)         y=D/j;           
    0084 01FE      MOVW	R30,R28
    0085 8020      LDD	R2,Z+0
    0086 8031      LDD	R3,Z+1
    0087 8042      LDD	R4,Z+2
    0088 8053      LDD	R5,Z+3
    0089 01FE      MOVW	R30,R28
    008A 8860      LDD	R6,Z+16
    008B 8871      LDD	R7,Z+17
    008C 8882      LDD	R8,Z+18
    008D 8893      LDD	R9,Z+19
    008E 925A      ST	R5,-Y
    008F 924A      ST	R4,-Y
    0090 923A      ST	R3,-Y
    0091 922A      ST	R2,-Y
    0092 0183      MOVW	R16,R6
    0093 0194      MOVW	R18,R8
    0094 940E0161  CALL	div32u
    0096 01FE      MOVW	R30,R28
    0097 8304      STD	Z+4,R16
    0098 8315      STD	Z+5,R17
    0099 8326      STD	Z+6,R18
    009A 8337      STD	Z+7,R19
(0154)         dataElem[i]=y%10;
    009B E04A      LDI	R20,0xA
    009C E050      LDI	R21,0
    009D E060      LDI	R22,0
    009E E070      LDI	R23,0
    009F 01FE      MOVW	R30,R28
    00A0 8024      LDD	R2,Z+4
    00A1 8035      LDD	R3,Z+5
    00A2 8046      LDD	R4,Z+6
    00A3 8057      LDD	R5,Z+7
    00A4 937A      ST	R23,-Y
    00A5 936A      ST	R22,-Y
    00A6 935A      ST	R21,-Y
    00A7 934A      ST	R20,-Y
    00A8 0181      MOVW	R16,R2
    00A9 0192      MOVW	R18,R4
    00AA 940E0163  CALL	mod32u
    00AC E680      LDI	R24,0x60
    00AD E090      LDI	R25,0
    00AE 2DEA      MOV	R30,R10
    00AF 27FF      CLR	R31
    00B0 0FE8      ADD	R30,R24
    00B1 1FF9      ADC	R31,R25
    00B2 8300      STD	Z+0,R16
(0155)         j*=10;
    00B3 01FE      MOVW	R30,R28
    00B4 8020      LDD	R2,Z+0
    00B5 8031      LDD	R3,Z+1
    00B6 8042      LDD	R4,Z+2
    00B7 8053      LDD	R5,Z+3
    00B8 E04A      LDI	R20,0xA
    00B9 E050      LDI	R21,0
    00BA E060      LDI	R22,0
    00BB E070      LDI	R23,0
    00BC 925A      ST	R5,-Y
    00BD 924A      ST	R4,-Y
    00BE 923A      ST	R3,-Y
    00BF 922A      ST	R2,-Y
    00C0 018A      MOVW	R16,R20
    00C1 019B      MOVW	R18,R22
    00C2 940E01EA  CALL	empy32u
    00C4 01FE      MOVW	R30,R28
    00C5 8300      STD	Z+0,R16
    00C6 8311      STD	Z+1,R17
    00C7 8322      STD	Z+2,R18
    00C8 8333      STD	Z+3,R19
    00C9 94A3      INC	R10
    00CA 14AC      CP	R10,R12
    00CB F408      BCC	0x00CD
    00CC CFB7      RJMP	0x0084
(0156)     }
(0157) }
    00CD 9628      ADIW	R28,0x8
    00CE 940E021A  CALL	pop_gset4
    00D0 9624      ADIW	R28,4
    00D1 9508      RET
_changeDToH:
  hex                  --> R20
  t                    --> Y+0
  dec                  --> R20
    00D2 940E021D  CALL	push_gset1
    00D4 2F40      MOV	R20,R16
    00D5 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;
    00D6 E01A      LDI	R17,0xA
    00D7 2F04      MOV	R16,R20
    00D8 940E01D4  CALL	div8u
    00DA 8309      STD	Y+1,R16
(0171)     t[0]=dec%10;
    00DB E01A      LDI	R17,0xA
    00DC 2F04      MOV	R16,R20
    00DD 940E01D2  CALL	mod8u
    00DF 8308      STD	Y+0,R16
(0172)     hex=t[1]*16+t[0];
    00E0 8029      LDD	R2,Y+1
    00E1 E180      LDI	R24,0x10
    00E2 9D82      MUL	R24,R2
    00E3 2D40      MOV	R20,R0
    00E4 0F40      ADD	R20,R16
(0173)     return hex;
    00E5 2F04      MOV	R16,R20
    00E6 9622      ADIW	R28,2
    00E7 940E0220  CALL	pop_gset1
    00E9 9508      RET
_converseDToH:
  hex                  --> R20
  t                    --> Y+0
  dec                  --> R20
    00EA 940E021D  CALL	push_gset1
    00EC 2F40      MOV	R20,R16
    00ED 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;
    00EE 2F84      MOV	R24,R20
    00EF 9582      SWAP	R24
    00F0 708F      ANDI	R24,0xF
    00F1 8389      STD	Y+1,R24
(0188)     t[0]=dec%16;
    00F2 E110      LDI	R17,0x10
    00F3 2F04      MOV	R16,R20
    00F4 940E01D2  CALL	mod8u
    00F6 8308      STD	Y+0,R16
(0189)     hex=t[1]*16+t[0];
    00F7 8029      LDD	R2,Y+1
    00F8 E180      LDI	R24,0x10
    00F9 9D82      MUL	R24,R2
    00FA 2D40      MOV	R20,R0
    00FB 0F40      ADD	R20,R16
(0190)     return hex;
    00FC 2F04      MOV	R16,R20
    00FD 9622      ADIW	R28,2
    00FE 940E0220  CALL	pop_gset1
    0100 9508      RET
_changeHToD:
  dec                  --> R20
  t                    --> Y+0
  hex                  --> R20
    0101 940E021D  CALL	push_gset1
    0103 2F40      MOV	R20,R16
    0104 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;
    0105 2F84      MOV	R24,R20
    0106 9582      SWAP	R24
    0107 708F      ANDI	R24,0xF
    0108 8389      STD	Y+1,R24
(0205)     t[0]=hex%16;
    0109 E110      LDI	R17,0x10
    010A 2F04      MOV	R16,R20
    010B 940E01D2  CALL	mod8u
    010D 8308      STD	Y+0,R16
(0206)     dec=t[1]*10+t[0];
    010E 8029      LDD	R2,Y+1
    010F E08A      LDI	R24,0xA
    0110 9D82      MUL	R24,R2
    0111 2D40      MOV	R20,R0

⌨️ 快捷键说明

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