📄 lcd1602.lst
字号:
__start:
__text_start:
008F E5CF LDI R28,0x5F
0090 E0D4 LDI R29,4
0091 BFCD OUT 0x3D,R28
0092 BFDE OUT 0x3E,R29
0093 51C0 SUBI R28,0x10
0094 40D0 SBCI R29,0
0095 EA0A LDI R16,0xAA
0096 8308 STD Y+0,R16
0097 2400 CLR R0
0098 E1E1 LDI R30,0x11
0099 E0F1 LDI R31,1
009A E011 LDI R17,1
009B 31E8 CPI R30,0x18
009C 07F1 CPC R31,R17
009D F011 BEQ 0x00A0
009E 9201 ST R0,Z+
009F CFFB RJMP 0x009B
00A0 8300 STD Z+0,R16
00A1 E6EC LDI R30,0x6C
00A2 E0F0 LDI R31,0
00A3 E6A0 LDI R26,0x60
00A4 E0B0 LDI R27,0
00A5 E011 LDI R17,1
00A6 31ED CPI R30,0x1D
00A7 07F1 CPC R31,R17
00A8 F021 BEQ 0x00AD
00A9 95C8 LPM
00AA 9631 ADIW R30,1
00AB 920D ST R0,X+
00AC CFF9 RJMP 0x00A6
00AD 940E06BE CALL _main
_exit:
00AF CFFF RJMP _exit
_speaData:
y --> Y+4
j --> Y+0
i --> R10
len --> R12
dat --> Y+16
00B0 940E0768 CALL push_arg4
00B2 940E0836 CALL push_gset4
00B4 9728 SBIW R28,0x8
00B5 88CC LDD R12,Y+20
FILE: D:\ICC_H\Software.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 Software_H
(0041) #define Software_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++)
00B6 24AA CLR R10
00B7 E041 LDI R20,1
00B8 E050 LDI R21,0
00B9 E060 LDI R22,0
00BA E070 LDI R23,0
00BB 01FE MOVW R30,R28
00BC 8340 STD Z+0,R20
00BD 8351 STD Z+1,R21
00BE 8362 STD Z+2,R22
00BF 8373 STD Z+3,R23
00C0 C046 RJMP 0x0107
(0120) {
(0121) y=dat/j;
00C1 01FE MOVW R30,R28
00C2 8020 LDD R2,Z+0
00C3 8031 LDD R3,Z+1
00C4 8042 LDD R4,Z+2
00C5 8053 LDD R5,Z+3
00C6 01FE MOVW R30,R28
00C7 8860 LDD R6,Z+16
00C8 8871 LDD R7,Z+17
00C9 8882 LDD R8,Z+18
00CA 8893 LDD R9,Z+19
00CB 925A ST R5,-Y
00CC 924A ST R4,-Y
00CD 923A ST R3,-Y
00CE 922A ST R2,-Y
00CF 0183 MOVW R16,R6
00D0 0194 MOVW R18,R8
00D1 940E076D CALL div32u
00D3 01FE MOVW R30,R28
00D4 8304 STD Z+4,R16
00D5 8315 STD Z+5,R17
00D6 8326 STD Z+6,R18
00D7 8337 STD Z+7,R19
(0122) dataElem[i]=y%10;
00D8 E04A LDI R20,0xA
00D9 E050 LDI R21,0
00DA E060 LDI R22,0
00DB E070 LDI R23,0
00DC 01FE MOVW R30,R28
00DD 8024 LDD R2,Z+4
00DE 8035 LDD R3,Z+5
00DF 8046 LDD R4,Z+6
00E0 8057 LDD R5,Z+7
00E1 937A ST R23,-Y
00E2 936A ST R22,-Y
00E3 935A ST R21,-Y
00E4 934A ST R20,-Y
00E5 0181 MOVW R16,R2
00E6 0192 MOVW R18,R4
00E7 940E076F CALL mod32u
00E9 E182 LDI R24,0x12
00EA E091 LDI R25,1
00EB 2DEA MOV R30,R10
00EC 27FF CLR R31
00ED 0FE8 ADD R30,R24
00EE 1FF9 ADC R31,R25
00EF 8300 STD Z+0,R16
(0123) j*=10;
00F0 01FE MOVW R30,R28
00F1 8020 LDD R2,Z+0
00F2 8031 LDD R3,Z+1
00F3 8042 LDD R4,Z+2
00F4 8053 LDD R5,Z+3
00F5 E04A LDI R20,0xA
00F6 E050 LDI R21,0
00F7 E060 LDI R22,0
00F8 E070 LDI R23,0
00F9 925A ST R5,-Y
00FA 924A ST R4,-Y
00FB 923A ST R3,-Y
00FC 922A ST R2,-Y
00FD 018A MOVW R16,R20
00FE 019B MOVW R18,R22
00FF 940E07DE CALL empy32u
0101 01FE MOVW R30,R28
0102 8300 STD Z+0,R16
0103 8311 STD Z+1,R17
0104 8322 STD Z+2,R18
0105 8333 STD Z+3,R19
0106 94A3 INC R10
0107 14AC CP R10,R12
0108 F408 BCC 0x010A
0109 CFB7 RJMP 0x00C1
(0124) }
(0125) }
010A 9628 ADIW R28,0x8
010B 940E0811 CALL pop_gset4
010D 9624 ADIW R28,4
010E 9508 RET
FILE: D:\ICC_H\I2C.H
(0001) /*********************************************************************
(0002) 微 雪 电 子 WaveShare http://www.waveShare.net
(0003)
(0004) 目 的: 建立I2C操作库
(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 I2C_H
(0041) #define I2C_H
(0042)
(0043) /* TWSR values (not bits) */
(0044) /* Master */
(0045) #define I2C_START 0x08
(0046) #define I2C_RESTART 0x10
(0047)
(0048) /* Master Transmitter */
(0049) #define I2C_MT_SLA_ACK 0x18
(0050) #define I2C_MT_SLA_NACK 0x20
(0051) #define I2C_MT_DATA_ACK 0x28
(0052) #define I2C_MT_DATA_NACK 0x30
(0053) #define I2C_MT_ARB_LOST 0x38
(0054)
(0055) /* Master Receiver */
(0056) #define I2C_MR_ARB_LOST 0x38
(0057) #define I2C_MR_SLA_ACK 0x40
(0058) #define I2C_MR_SLA_NACK 0x48
(0059) #define I2C_MR_DATA_ACK 0x50
(0060) #define I2C_MR_DATA_NACK 0x58
(0061)
(0062) /* Slave Transmitter */
(0063) #define I2C_ST_SLA_ACK 0xA8
(0064) #define I2C_ST_ARB_LOST_SLA_ACK 0xB0
(0065) #define I2C_ST_DATA_ACK 0xB8
(0066) #define I2C_ST_DATA_NACK 0xC0
(0067) #define I2C_ST_LAST_DATA 0xC8
(0068)
(0069) /* Slave Receiver */
(0070) #define I2C_SR_SLA_ACK 0x60
(0071) #define I2C_SR_ARB_LOST_SLA_ACK 0x68
(0072) #define I2C_SR_GCALL_ACK 0x70
(0073) #define I2C_SR_ARB_LOST_GCALL_ACK 0x78
(0074) #define I2C_SR_DATA_ACK 0x80
(0075) #define I2C_SR_DATA_NACK 0x88
(0076) #define I2C_SR_GCALL_DATA_ACK 0x90
(0077) #define I2C_SR_GCALL_DATA_NACK 0x98
(0078) #define I2C_SR_STOP 0xA0
(0079)
(0080) /* Misc */
(0081) #define I2C_NO_INFO 0xF8
(0082) #define I2C_BUS_ERROR 0x00
(0083)
(0084) /*
(0085) * The lower 3 bits of TWSR are reserved on the ATmega163.
(0086) * The 2 LSB carry the prescaler bits on the newer ATmegas.
(0087) */
(0088) #define I2C_STATUS_MASK (_BV(TWS7)|_BV(TWS6)|_BV(TWS5)|_BV(TWS4)|_BV(TWS3))
(0089) #define I2C_STATUS (TWSR & I2C_STATUS_MASK)
(0090)
(0091) /*
(0092) * R/~W bit in SLA+R/W address field.
(0093) */
(0094) #define I2C_READ 1
(0095) #define I2C_WRITE 0
(0096)
(0097) #define I2CStart() (TWCR=(1<<TWINT)|(1<<TWSTA)|(1<<TWEN))
(0098) #define I2CStop() (TWCR=(1<<TWINT)|(1<<TWSTO)|(1<<TWEN))
(0099) #define I2CWaitAck() {while(!(TWCR&(1<<TWINT)));}
(0100) #define I2CChkAck() (TWSR&0xf8) //check ack
(0101) #define I2CSendAck() (TWCR|=(1<<TWEA))
(0102) #define I2CSendNoAck() (TWCR&=~(1<<TWEA))
(0103) #define I2CSendByte(x) {TWDR=(x);TWCR=(1<<TWINT)|(1<<TWEN);}
(0104) #define I2CRcvNckByte() (TWCR=(1<<TWINT)|(1<<TWEN))
(0105) #define I2CRcvAckByte() (TWCR=(1<<TWINT)|(1<<TWEN)|(1<<TWEA))
(0106)
(0107) /* For Program */
(0108) #define I2C_Stop() I2CStop()
(0109) #define I2C_SendAck() I2CSendAck()
(0110) #define I2C_SendNoAck() I2CSendNoAck()
(0111) #define I2C_WaitAck() I2CWaitAck()
(0112)
(0113) /* I2C Config */
(0114) #define I2C_ERR 0
(0115) #define I2C_CRR 1
(0116)
(0117) /*--------------------------------------------------------------------
(0118) 函数名称:I2C Start
(0119) 函数功能:
(0120) 注意事项:
(0121) 提示说明:
(0122) 输 入:
(0123) 返 回:
(0124) --------------------------------------------------------------------*/
(0125) bool I2C_Start()
(0126) {
(0127) I2CStart();
_I2C_Start:
010F EA84 LDI R24,0xA4
0110 BF86 OUT 0x36,R24
(0128) I2CWaitAck();
0111 B626 IN R2,0x36
0112 FE27 SBRS R2,7
0113 CFFD RJMP 0x0111
(0129) if( I2CChkAck()!=I2C_START )
0114 B181 IN R24,0x01
0115 7F88 ANDI R24,0xF8
0116 3088 CPI R24,0x8
0117 F011 BEQ 0x011A
(0130) return I2C_ERR;
0118 2700 CLR R16
0119 C001 RJMP 0x011B
(0131) return I2C_CRR;
011A E001 LDI R16,1
011B 9508 RET
(0132) }
(0133) /*--------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -