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

📄 i2c.lst

📁 proteus实例集锦
💻 LST
字号:

ASEM-51 V1.2                                         Copyright (c) 1996 by W.W. Heinz                                         PAGE 1





       MCS-51 Family Cross Assembler   A S E M - 5 1   V 1.2
       =====================================================



	Source File:	I2C.ASM
	Object File:	I2C.HEX
	List File:	I2C.LST



 Line  I  Addr  Code            Source

    1:		N	 10	ACK		BIT		10H			;应答标志位
    2:		N	 50	SLA		DATA	50H			;器件地址字
    3:		N	 51	SUBA	DATA	51H			;器件子地址
    4:		N	 52	NUMBYTE	DATA	52H			;读/写字节数
    5:		B	 95	SDA		BIT		P1.5
    6:		B	 94	SCL		BIT		P1.4		;I2C总线定义
    7:		N      0030	MTD		EQU		30H			;发送数据缓存区首地址(30H-3FH)
    8:		N      0040	MRD		EQU		40H			;接收数据缓存区首地址(40H-4FH)
    9:	  0000	21 80				AJMP	MAIN
   10:		N      0080			ORG		80H
   11:				;*********************************************************************
   12:				;名称:IWRNBYTE
   13:				;描述:向器件指定子地址写N个数据
   14:				;入口参数:器件地址字SLA,子地址SUBA,发送数据缓冲区MTD,发送字节数NUMBYTE
   15:				;*********************************************************************
   16:	  0080			IWRNBYTE:
   17:	  0080	AB 52				MOV		R3,NUMBYTE
   18:	  0082	12 00 E7			LCALL	START		;启动总线
   19:	  0085	E5 50				MOV		A,SLA
   20:	  0087	12 01 43			LCALL	WRBYTE		;发送器件地址字
   21:	  008A	12 01 2E			LCALL	CACK
   22:	  008D	30 10 17			JNB		ACK,RETWRN	;无应答则退出
   23:	  0090	E5 51				MOV		A,SUBA		;指定子地址
   24:	  0092	12 01 43			LCALL	WRBYTE
   25:	  0095	12 01 2E			LCALL	CACK
   26:	  0098	79 30				MOV		R1,#MTD
   27:	  009A	E7		WRDA:	MOV		A,@R1
   28:	  009B	12 01 43			LCALL	WRBYTE		;开始写入数据
   29:	  009E	12 01 2E			LCALL	CACK
   30:	  00A1	30 10 DC			JNB		ACK,IWRNBYTE
   31:	  00A4	09				INC		R1
   32:	  00A5	DB F3				DJNZ	R3,WRDA		;判断是否写完
   33:	  00A7	12 00 FB	RETWRN:	LCALL	STOP
   34:	  00AA	22				RET
   35:				;*********************************************************************
   36:				;名称:IRDNBYTE
   37:				;描述:从器件指定子地址读取N个数据
   38:				;入口参数:器件地址字SLA,子地址SUBA,接收数据缓存区MRD,接收字节数NUMBYTE
   39:				;*********************************************************************
   40:	  00AB			IRDNBYTE:
   41:	  00AB	AB 52				MOV		R3,NUMBYTE
   42:	  00AD	12 00 E7			LCALL	START
   43:	  00B0	E5 50				MOV		A,SLA

ASEM-51 V1.2                                         Copyright (c) 1996 by W.W. Heinz                                         PAGE 2



 Line  I  Addr  Code            Source

   44:	  00B2	12 01 43			LCALL	WRBYTE		;发送器件地址字
   45:	  00B5	12 01 2E			LCALL	CACK
   46:	  00B8	30 10 22			JNB		ACK,RETRDN
   47:	  00BB	E5 51				MOV		A,SUBA		;指定子地址
   48:	  00BD	12 01 43			LCALL	WRBYTE
   49:	  00C0	12 01 2E			LCALL	CACK
   50:	  00C3	12 00 E7			LCALL	START		;重新启动总线
   51:	  00C6	E5 50				MOV		A,SLA
   52:	  00C8	04				INC		A			;准备进行读操作
   53:	  00C9	12 01 43			LCALL	WRBYTE
   54:	  00CC	12 01 2E			LCALL	CACK
   55:	  00CF	30 10 D9			JNB		ACK,IRDNBYTE
   56:	  00D2	79 40				MOV		R1,#MRD
   57:	  00D4	12 01 6A	RON1:	LCALL	RDBYTE		;读操作开始
   58:	  00D7	F7				MOV		@R1,A
   59:	  00D8	DB 07				DJNZ	R3,SACK
   60:	  00DA	12 01 1E			LCALL	MNACK		;最后一字节发非应答位
   61:	  00DD	12 00 FB	RETRDN:	LCALL	STOP
   62:	  00E0	22				RET
   63:	  00E1	12 01 0E	SACK:	LCALL	MACK
   64:	  00E4	09				INC		R1
   65:	  00E5	80 ED				SJMP	RON1
   66:				;*********************************************************************
   67:				;名称:STRRT
   68:				;描述:启动I2C总线子程序—发送I2C总线起始条件
   69:				;*********************************************************************
   70:	  00E7	D2 95		START:	SETB	SDA			;发送起始条件数据信号
   71:	  00E9	00				NOP					;起始条件建立时间大于4.7us
   72:	  00EA	D2 94		   		SETB	SCL			;发送起始条件的时钟信号
   73:	  00EC	00				NOP
   74:	  00ED	00				NOP
   75:	  00EE	00				NOP
   76:	  00EF	00				NOP
   77:	  00F0	00				NOP					;起始条件锁定时间大于4.7us
   78:	  00F1	C2 95		   		CLR  	SDA			;发送起始信号
   79:	  00F3	00				NOP
   80:	  00F4	00				NOP
   81:	  00F5	00				NOP
   82:	  00F6	00				NOP					;起始条件锁定时间大于4.7us
   83:	  00F7	C2 94		   		CLR		SCL			;钳住I2C总线,准备发送或接收数据
   84:	  00F9	00		   		NOP
   85:	  00FA	22		   		RET
   86:				;*********************************************************************
   87:				;名称:STOP
   88:				;描述:停止I2C总线子程序—发送I2C总线停止条件
   89:				;*********************************************************************
   90:	  00FB	C2 95		STOP:	CLR  	SDA 		;发送停止条件的数据信号
   91:	  00FD	00				NOP
   92:	  00FE	00				NOP
   93:	  00FF	D2 94				SETB  	SCL 		;发送停止条件的时钟信号
   94:	  0101	00				NOP
   95:	  0102	00				NOP
   96:	  0103	00				NOP
   97:	  0104	00				NOP
   98:	  0105	00				NOP					;起始条件建立时间大于4.7us
   99:	  0106	D2 95				SETB 	SDA 		;发送I2C总线停止信号

ASEM-51 V1.2                                         Copyright (c) 1996 by W.W. Heinz                                         PAGE 3



 Line  I  Addr  Code            Source

  100:	  0108	00				NOP
  101:	  0109	00				NOP
  102:	  010A	00				NOP
  103:	  010B	00				NOP
  104:	  010C	00				NOP					;延迟时间大于4.7us
  105:	  010D	22				RET
  106:				;*********************************************************************
  107:				;名称:MACK
  108:				;描述:发送应答信号子程序
  109:				;*********************************************************************
  110:	  010E	C2 95		MACK:	CLR		SDA			;将SDA置0
  111:	  0110	00				NOP
  112:	  0111	00				NOP
  113:	  0112	D2 94				SETB	SCL
  114:	  0114	00				NOP
  115:	  0115	00				NOP
  116:	  0116	00				NOP
  117:	  0117	00				NOP
  118:	  0118	00				NOP					;保持数据时间,大于4.7us
  119:	  0119	C2 94				CLR		SCL
  120:	  011B	00				NOP
  121:	  011C	00				NOP
  122:	  011D	22				RET
  123:				;*********************************************************************
  124:				;名称:MNACK
  125:				;描述:发送非应答信号子程序
  126:				;*********************************************************************
  127:	  011E	D2 95		MNACK:	SETB	SDA			;将SDA置1
  128:	  0120	00				NOP
  129:	  0121	00				NOP
  130:	  0122	D2 94				SETB	SCL
  131:	  0124	00				NOP
  132:	  0125	00				NOP
  133:	  0126	00				NOP
  134:	  0127	00				NOP
  135:	  0128	00				NOP
  136:	  0129	C2 94				CLR		SCL			;保持数据时间,大于4.7us
  137:	  012B	00				NOP
  138:	  012C	00				NOP
  139:	  012D	22				RET
  140:				;*********************************************************************
  141:				;名称:CACK
  142:				;描述:检查应答位子程序,返回值:ACK=1时表示有应答
  143:				;*********************************************************************
  144:	  012E	D2 95		CACK:	SETB	SDA
  145:	  0130	00				NOP
  146:	  0131	00				NOP
  147:	  0132	D2 94				SETB	SCL
  148:	  0134	C2 10				CLR		ACK
  149:	  0136	00				NOP
  150:	  0137	00				NOP
  151:	  0138	A2 95				MOV		C,SDA
  152:	  013A	40 02				JC		CEND
  153:	  013C	D2 10				SETB	ACK			;判断应答位
  154:	  013E	00		CEND:	NOP
  155:	  013F	C2 94				CLR		SCL

ASEM-51 V1.2                                         Copyright (c) 1996 by W.W. Heinz                                         PAGE 4



 Line  I  Addr  Code            Source

  156:	  0141	00				NOP
  157:	  0142	22				RET
  158:				;*********************************************************************
  159:				;名称:WRBYTE
  160:				;描述:发送字节子程序,字节数据放入ACC
  161:				;*********************************************************************
  162:	  0143	78 08		WRBYTE:	MOV		R0,#08H
  163:	  0145	33		WLP:	RLC		A			;取数据位
  164:	  0146	40 06				JC		WRI
  165:	  0148	80 12				SJMP	WRO			;判断数据位
  166:	  014A	D8 F9		WLP1:	DJNZ	R0,WLP
  167:	  014C	00				NOP
  168:	  014D	22				RET
  169:	  014E	D2 95		WRI:	SETB	SDA			;发送1
  170:	  0150	00				NOP
  171:	  0151	D2 94				SETB	SCL
  172:	  0153	00				NOP
  173:	  0154	00				NOP
  174:	  0155	00				NOP
  175:	  0156	00				NOP
  176:	  0157	00				NOP
  177:	  0158	C2 94				CLR		SCL
  178:	  015A	80 EE				SJMP	WLP1
  179:	  015C	C2 95		WRO:	CLR		SDA			;发送0
  180:	  015E	00				NOP
  181:	  015F	D2 94				SETB	SCL
  182:	  0161	00				NOP
  183:	  0162	00				NOP
  184:	  0163	00				NOP
  185:	  0164	00				NOP
  186:	  0165	00				NOP
  187:	  0166	C2 94				CLR		SCL
  188:	  0168	80 E0				SJMP	WLP1
  189:				;*********************************************************************
  190:				;名称:RDBYTE
  191:				;描述:读取字节子程序,读出的数据存放在ACC
  192:				;*********************************************************************
  193:	  016A	78 08		RDBYTE:	MOV		R0,#08H
  194:	  016C	D2 95		RLP:	SETB	SDA
  195:	  016E	00				NOP
  196:	  016F	D2 94				SETB	SCL			;时钟线为高,接收数据位
  197:	  0171	00				NOP
  198:	  0172	00				NOP
  199:	  0173	A2 95				MOV		C,SDA		;读取数据位
  200:	  0175	EA				MOV		A,R2
  201:	  0176	C2 94				CLR		SCL			;将SCL拉低,时间大于4.7us
  202:	  0178	33				RLC		A			;进行数据位的处理
  203:	  0179	FA				MOV		R2,A
  204:	  017A	00				NOP
  205:	  017B	00				NOP
  206:	  017C	00				NOP
  207:	  017D	D8 ED				DJNZ	R0,RLP		;未够8位,继续读入
  208:	  017F	22				RET
  209:	  0180	7C F0		MAIN:	MOV		R4,#0F0H	;延时,等待其它芯片复位完成
  210:	  0182	DC FE				DJNZ	R4,$
  211:				;发送数据缓存区初始化,将16个连续字节分别赋值为00H到0FH

ASEM-51 V1.2                                         Copyright (c) 1996 by W.W. Heinz                                         PAGE 5



 Line  I  Addr  Code            Source

  212:	  0184	74 00				MOV		A,#0
  213:	  0186	78 30				MOV		R0,#30H
  214:	  0188	F6		S1:		MOV		@R0,A
  215:	  0189	08				INC		R0
  216:	  018A	04				INC		A
  217:	  018B	B8 40 FA			CJNE	R0,#40H,S1
  218:				;向24C01C中写数据,数据存放在24C01C中30H开始的16个字节中
  219:	  018E	75 50 A0			MOV		SLA,#0A0H	;24C01C地址字,写操作
  220:	  0191	75 51 30			MOV		SUBA,#30H	;目标地址
  221:	  0194	75 52 10			MOV		NUMBYTE,#16	;字节数
  222:	  0197	12 00 80			LCALL	IWRNBYTE	;写数据
  223:	  019A	7D 14		DELAY:	MOV		R5,#20
  224:	  019C	7E F8		D1:		MOV		R6,#248
  225:	  019E	7F F8		D2:		MOV		R7,#248
  226:	  01A0	DF FE				DJNZ	R7,$
  227:	  01A2	DE FA				DJNZ	R6,D2
  228:	  01A4	DD F6				DJNZ	R5,D1
  229:				;从24C01C中读数据,数据送AT89C51中40H开始的16个字节中
  230:	  01A6	75 50 A0			MOV		SLA,#0A0H	;24C01C地址字,伪写入操作
  231:	  01A9	75 51 30			MOV		SUBA,#30H	;目标地址
  232:	  01AC	75 52 10			MOV		NUMBYTE,#16	;字节数
  233:	  01AF	12 00 AB			LCALL	IRDNBYTE	;写数据
  234:						END





                     register banks used:  ---

                     no errors




ASEM-51 V1.2                                         Copyright (c) 1996 by W.W. Heinz                                         PAGE 6





	       L I S T   O F   S Y M B O L S
	       =============================


SYMBOL				  TYPE     VALUE	LINE
------------------------------------------------------------
AC				  BIT	      D6
ACC				  DATA	      E0
ACK				  BIT	      10	   1
B				  DATA	      F0
CACK				  CODE	    012E	 144
CEND				  CODE	    013E	 154
CY				  BIT	      D7
D1				  CODE	    019C	 224
D2				  CODE	    019E	 225
DELAY				  CODE	    019A	 223
DPH				  DATA	      83
DPL				  DATA	      82
EA				  BIT	      AF
ES				  BIT	      AC
ET0				  BIT	      A9
ET1				  BIT	      AB
EX0				  BIT	      A8
EX1				  BIT	      AA
EXTI0				  CODE	    0003
EXTI1				  CODE	    0013
F0				  BIT	      D5
IE				  DATA	      A8
IE0				  BIT	      89
IE1				  BIT	      8B
INT0				  BIT	      B2
INT1				  BIT	      B3
IP				  DATA	      B8
IRDNBYTE			  CODE	    00AB	  40
IT0				  BIT	      88
IT1				  BIT	      8A
IWRNBYTE			  CODE	    0080	  16
MACK				  CODE	    010E	 110
MAIN				  CODE	    0180	 209
MNACK				  CODE	    011E	 127
MRD				  NUMBER    0040	   8
MTD				  NUMBER    0030	   7
NUMBYTE				  DATA	      52	   4
OV				  BIT	      D2
P				  BIT	      D0
P0				  DATA	      80
P1				  DATA	      90
P2				  DATA	      A0
P3				  DATA	      B0
PCON				  DATA	      87
PS				  BIT	      BC
PSW				  DATA	      D0
PT0				  BIT	      B9
PT1				  BIT	      BB
PX0				  BIT	      B8
PX1				  BIT	      BA

ASEM-51 V1.2                                         Copyright (c) 1996 by W.W. Heinz                                         PAGE 7



SYMBOL				  TYPE     VALUE	LINE
------------------------------------------------------------
RB8				  BIT	      9A
RD				  BIT	      B7
RDBYTE				  CODE	    016A	 193
REN				  BIT	      9C
RESET				  CODE	    0000
RETRDN				  CODE	    00DD	  61
RETWRN				  CODE	    00A7	  33
RI				  BIT	      98
RLP				  CODE	    016C	 194
RON1				  CODE	    00D4	  57
RS0				  BIT	      D3
RS1				  BIT	      D4
RXD				  BIT	      B0
S1				  CODE	    0188	 214
SACK				  CODE	    00E1	  63
SBUF				  DATA	      99
SCL				  BIT	      94	   6
SCON				  DATA	      98
SDA				  BIT	      95	   5
SINT				  CODE	    0023
SLA				  DATA	      50	   2
SM0				  BIT	      9F
SM1				  BIT	      9E
SM2				  BIT	      9D
SP				  DATA	      81
START				  CODE	    00E7	  70
STOP				  CODE	    00FB	  90
SUBA				  DATA	      51	   3
T0				  BIT	      B4
T1				  BIT	      B5
TB8				  BIT	      9B
TCON				  DATA	      88
TF0				  BIT	      8D
TF1				  BIT	      8F
TH0				  DATA	      8C
TH1				  DATA	      8D
TI				  BIT	      99
TIMER0				  CODE	    000B
TIMER1				  CODE	    001B
TL0				  DATA	      8A
TL1				  DATA	      8B
TMOD				  DATA	      89
TR0				  BIT	      8C
TR1				  BIT	      8E
TXD				  BIT	      B1
WLP				  CODE	    0145	 163
WLP1				  CODE	    014A	 166
WR				  BIT	      B6
WRBYTE				  CODE	    0143	 162
WRDA				  CODE	    009A	  27
WRI				  CODE	    014E	 169
WRO				  CODE	    015C	 179

⌨️ 快捷键说明

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