📄 ledindicator.lst
字号:
__text_start:
__start:
0032 E5CF LDI R28,0x5F
0033 E0D4 LDI R29,4
0034 BFCD OUT 0x3D,R28
0035 BFDE OUT 0x3E,R29
0036 51C0 SUBI R28,0x10
0037 40D0 SBCI R29,0
0038 EA0A LDI R16,0xAA
0039 8308 STD Y+0,R16
003A 2400 CLR R0
003B E6E0 LDI R30,0x60
003C E0F0 LDI R31,0
003D E010 LDI R17,0
003E 36E6 CPI R30,0x66
003F 07F1 CPC R31,R17
0040 F011 BEQ 0x0043
0041 9201 ST R0,Z+
0042 CFFB RJMP 0x003E
0043 8300 STD Z+0,R16
0044 E6E4 LDI R30,0x64
0045 E0F0 LDI R31,0
0046 E6A0 LDI R26,0x60
0047 E0B0 LDI R27,0
0048 E010 LDI R17,0
0049 36E4 CPI R30,0x64
004A 07F1 CPC R31,R17
004B F021 BEQ 0x0050
004C 95C8 LPM
004D 9631 ADIW R30,1
004E 920D ST R0,X+
004F CFF9 RJMP 0x0049
0050 940E00DA CALL _main
_exit:
0052 CFFF RJMP _exit
_speaData:
y --> Y+4
j --> Y+0
i --> R10
len --> R12
dat --> Y+16
0053 940E00FE CALL push_arg4
0055 940E01C6 CALL push_gset4
0057 9728 SBIW R28,0x8
0058 88CC LDD R12,Y+20
FILE: E:\ICC_H\SoftExt.H
(0001) /*********************************************************************
(0002) 微 雪 电 子 WaveShare http://www.waveShare.net
(0003)
(0004) 目 的: 建立AVR的软件提取库函数,增加各类补丁,方便系统程序移植
(0005)
(0006) 目标系统: 基于AVR
(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)
(0034) ----------------------------------------------------------------------
(0035) 对外函数说明:
(0036)
(0037) ----------------------------------------------------------------------
(0038) 10101010101010101010101010101010101010101010101010101010101010101010*/
(0039)
(0040) #ifndef SoftExt_H
(0041) #define SoftExt_H
(0042)
(0043) #include <math.h>
(0044) #include <string.h>
(0045)
(0046) /* 兼容一般程序员的常用写法 */
(0047) typedef unsigned char uchar;
(0048) typedef unsigned int uint;
(0049) typedef unsigned long ulong;
(0050) typedef signed char schar;
(0051) typedef signed int sint;
(0052) typedef signed long slong;
(0053)
(0054) /* 为方便移植,建议使用下面写法 */
(0055) typedef unsigned char bool;
(0056) typedef unsigned char uint8;
(0057) typedef unsigned int uint16;
(0058) typedef unsigned long uint32;
(0059) typedef signed char sint8;
(0060) typedef signed int sint16;
(0061) typedef signed long sint32;
(0062) typedef signed char int8;
(0063) typedef signed int int16;
(0064) typedef signed long int32;
(0065)
(0066) /* 下面写法一般不推荐 */
(0067) //typedef unsigned char ubyte;
(0068) //typedef unsigned int uword;
(0069) //typedef unsigned long udword;
(0070) //typedef signed char sbyte;
(0071) //typedef signed int sword;
(0072) //typedef signed long sdword;
(0073)
(0074) /* 一般程序定义的默认值 */
(0075) //#define NULL 0
(0076) //#define EOF -1
(0077) //#define TRUE 1
(0078) //#define FALSE 0
(0079) //#define YES 1
(0080) //#define NO 0
(0081) //#define ON 1
(0082) //#define OFF 0
(0083) //#define ENABLE 1
(0084) //#define DISABLE 0
(0085) //#define CRR 1
(0086) //#define ERR 0
(0087) //#define RIGHT 1
(0088) //#define WRONG 0
(0089) //#define SUCCESS 1
(0090) //#define FAILURE 0
(0091) //#define PI 3.1415926 //3.1415926535897932
(0092)
(0093) /* 如果你手头上的RAM实在很紧,可考虑下面的define哦~ */
(0094) //#define _CALLOC(a) ( (a *)calloc(n,sizeof(a)) )
(0095) //#define _MALLOC(a) ( (a *)malloc(sizeof(a)) )
(0096) //#define _MIN(a,b) ( (a) < (b) ? (a) : (b) )
(0097) //#define _MAX(a,b) ( (a) > (b) ? (a) : (b) )
(0098) //#define _EXCHANGE(a,b) { int t; t=a; a=b; b=t; }
(0099) //#define _TOLOWER(c) ( (c)+32 )
(0100) //#define _TOUPPER(c) ( (c)-32 )
(0101)
(0102) //#ifndef BIT
(0103) //#define BIT(x) ( 1<<(x) )
(0104) //#endif
(0105)
(0106) /*--------------------------------------------------------------------
(0107) 函数全称:数据拆字
(0108) 函数功能:自己看~
(0109) 注意事项:D<=999999,C<=6
(0110) 提示说明:调用speaData(12,2),得到dataElem[0]=2,dataElem[1]=1
(0111) 输 入:
(0112) 返 回:无
(0113) --------------------------------------------------------------------*/
(0114) uint8 dataElem[6];
(0115) void speaData(uint32 dat,sint8 len)
(0116) {
(0117) uint8 i;
(0118) uint32 j,y;
(0119) for(i=0,j=1;i<len;i++)
0059 24AA CLR R10
005A E041 LDI R20,1
005B E050 LDI R21,0
005C E060 LDI R22,0
005D E070 LDI R23,0
005E 01FE MOVW R30,R28
005F 8340 STD Z+0,R20
0060 8351 STD Z+1,R21
0061 8362 STD Z+2,R22
0062 8373 STD Z+3,R23
0063 C046 RJMP 0x00AA
(0120) {
(0121) y=dat/j;
0064 01FE MOVW R30,R28
0065 8020 LDD R2,Z+0
0066 8031 LDD R3,Z+1
0067 8042 LDD R4,Z+2
0068 8053 LDD R5,Z+3
0069 01FE MOVW R30,R28
006A 8860 LDD R6,Z+16
006B 8871 LDD R7,Z+17
006C 8882 LDD R8,Z+18
006D 8893 LDD R9,Z+19
006E 925A ST R5,-Y
006F 924A ST R4,-Y
0070 923A ST R3,-Y
0071 922A ST R2,-Y
0072 0183 MOVW R16,R6
0073 0194 MOVW R18,R8
0074 940E0103 CALL div32u
0076 01FE MOVW R30,R28
0077 8304 STD Z+4,R16
0078 8315 STD Z+5,R17
0079 8326 STD Z+6,R18
007A 8337 STD Z+7,R19
(0122) dataElem[i]=y%10;
007B E04A LDI R20,0xA
007C E050 LDI R21,0
007D E060 LDI R22,0
007E E070 LDI R23,0
007F 01FE MOVW R30,R28
0080 8024 LDD R2,Z+4
0081 8035 LDD R3,Z+5
0082 8046 LDD R4,Z+6
0083 8057 LDD R5,Z+7
0084 937A ST R23,-Y
0085 936A ST R22,-Y
0086 935A ST R21,-Y
0087 934A ST R20,-Y
0088 0181 MOVW R16,R2
0089 0192 MOVW R18,R4
008A 940E0105 CALL mod32u
008C E680 LDI R24,0x60
008D E090 LDI R25,0
008E 2DEA MOV R30,R10
008F 27FF CLR R31
0090 0FE8 ADD R30,R24
0091 1FF9 ADC R31,R25
0092 8300 STD Z+0,R16
(0123) j*=10;
0093 01FE MOVW R30,R28
0094 8020 LDD R2,Z+0
0095 8031 LDD R3,Z+1
0096 8042 LDD R4,Z+2
0097 8053 LDD R5,Z+3
0098 E04A LDI R20,0xA
0099 E050 LDI R21,0
009A E060 LDI R22,0
009B E070 LDI R23,0
009C 925A ST R5,-Y
009D 924A ST R4,-Y
009E 923A ST R3,-Y
009F 922A ST R2,-Y
00A0 018A MOVW R16,R20
00A1 019B MOVW R18,R22
00A2 940E0174 CALL empy32s
00A4 01FE MOVW R30,R28
00A5 8300 STD Z+0,R16
00A6 8311 STD Z+1,R17
00A7 8322 STD Z+2,R18
00A8 8333 STD Z+3,R19
00A9 94A3 INC R10
00AA 14AC CP R10,R12
00AB F408 BCC 0x00AD
00AC CFB7 RJMP 0x0064
(0124) }
(0125) }
00AD 9628 ADIW R28,0x8
00AE 940E01A4 CALL pop_gset4
00B0 9624 ADIW R28,4
00B1 9508 RET
_delay50us:
j --> R20
t --> R16
00B2 940E01A7 CALL push_gset1
FILE: E:\ICC_H\HardExt.H
(0001) /*********************************************************************
(0002) 微 雪 电 子 WaveShare http://www.waveShare.net
(0003)
(0004) 目 的: 建立AVR的硬件提取库函数,增加各类补丁,方便移植
(0005)
(0006) 目标系统: 基于AVR
(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)
(0034) ----------------------------------------------------------------------
(0035) 对外函数说明:
(0036)
(0037) ----------------------------------------------------------------------
(0038) 10101010101010101010101010101010101010101010101010101010101010101010*/
(0039)
(0040) #ifndef HardExt_H
(0041) #define HardExt_H
(0042)
(0043) #include <math.h>
(0044) #include <string.h>
(0045) #include <stdio.h>
(0046) #include <macros.h>
(0047) #include <eeprom.h>
(0048) //#include <wdt.h>
(0049) #include "E:\ICC_H\I2C.H" //i2c即AVR的"twi"
(0050)
(0051) /* hard configs */
(0052) #ifndef flash
(0053) #define flash const
(0054) #endif
(0055)
(0056) #ifndef code
(0057) #define code const
(0058) #endif
(0059)
(0060) #ifndef NOP
(0061) #define NOP() asm("nop")
(0062) #endif
(0063)
(0064) /* io configs */
(0065) #define sbi(io,bit) ( io |= (1<<bit) ) //example: sbi(PORTA,0);sbi(DDRA,0);
(0066) #define cbi(io,bit) ( io &= ~(1<<bit) ) //example: cbi(PORTA,0);cbi(DDRA,0);
(0067) #define gbi(pin ,bit) ( pin & (1<<bit) ) //example: gbi(PINA,0);
(0068)
(0069) /* interrupt configs */
(0070) #define DIS_INT asm("sei")
(0071) #define EN_INT asm("cli")
(0072)
(0073) /* wdt configs */
(0074) #define WDT() asm("wdr")
(0075)
(0076) /* bit operation */
(0077) //#ifndef BIT
(0078) //#define BIT(x) ( 1<<(x) )
(0079) //#endif
(0080)
(0081) /* USART configs for 4 Mhz crystal */
(0082) //#define BAUD9600 25
(0083) //#define BAUD19000 12
(0084) //#define UART_TRAN_ON() UCR |= 0x08
(0085) //#define UART_TRAN_OFF() UCR &= ~0x08
(0086) //#define UART_RCV_ON() UCR |= 0x10
(0087) //#define UART_RCV_OFF() UCR &= ~0x10
(0088)
(0089) /*--------------------------------------------------------------------
(0090) 函数全称:50us 延时
(0091) 函数功能:当然是 50us延时 啦
(0092) 注意事项:基于7.3728M晶振,稍微有点误差
(0093) 提示说明:调用Delay50us(20),得到1ms延时
(0094) 输 入:
(0095) 返 回:无
(0096) --------------------------------------------------------------------*/
(0097) void delay50us(sint16 t)
(0098) {
(0099) uint8 j;
(0100) for(;t>0;t--)
00B4 C007 RJMP 0x00BC
(0101) for(j=0;j<70;j++)
00B5 2744 CLR R20
00B6 C001 RJMP 0x00B8
00B7 9543 INC R20
00B8 3446 CPI R20,0x46
00B9 F3E8 BCS 0x00B7
00BA 5001 SUBI R16,1
00BB 4010 SBCI R17,0
00BC 2422 CLR R2
00BD 2433 CLR R3
00BE 1620 CP R2,R16
00BF 0631 CPC R3,R17
00C0 F3A4 BLT 0x00B5
(0102) ;
(0103) }
00C1 940E01AA CALL pop_gset1
00C3 9508 RET
_delay50ms:
i --> R20
t --> R16
00C4 940E01A7 CALL push_gset1
(0104) /*--------------------------------------------------------------------
(0105) 函数全称:50ms 延时
(0106) 函数功能:当然是 50ms延时 啦
(0107) 注意事项:基于7.3728M晶振,稍微有点误差
(0108) 提示说明:调用delay50ms(20),得到1s延时
(0109) 输 入:
(0110) 返 回:无
(0111) --------------------------------------------------------------------*/
(0112) void delay50ms(sint16 t)
(0113) {
(0114) uint16 i;
(0115) for(;t>0;t--)
00C6 C00B RJMP 0x00D2
(0116) for(i=0;i<52642;i++)
00C7 2744 CLR R20
00C8 2755 CLR R21
00C9 C002 RJMP 0x00CC
00CA 5F4F SUBI R20,0xFF
00CB 4F5F SBCI R21,0xFF
00CC 3A42 CPI R20,0xA2
00CD ECED LDI R30,0xCD
00CE 075E CPC R21,R30
00CF F3D0 BCS 0x00CA
00D0 5001 SUBI R16,1
00D1 4010 SBCI R17,0
00D2 2422 CLR R2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -