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

📄 ex7-4.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:	EX7-4.ASM
	Object File:	EX7-4.HEX
	List File:	EX7-4.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	 97	SDA		BIT	P1.7
    6:		B	 96	SCL		BIT	P1.6		;I2C总线定义
    7:		N      0030	MTD		EQU	30H		;发送数据缓存区首地址(30H-3FH)
    8:		N      0040	MRD		EQU	40H		;接收数据缓存区首地址(40H-4FH)
    9:		N      0000			ORG 	0000H
   10:	  0000	21 30				AJMP	MAIN
   11:		N      0030			ORG	0030H
   12:				;*********************************************************************
   13:				;名称:IWRNBYTE
   14:				;描述:向器件指定子地址写N个数据
   15:				;入口参数:器件地址字SLA,子地址SUBA,发送数据缓冲区MTD,发送字节数NUMBYTE
   16:				;*********************************************************************
   17:	  0030	AB 52		IWRNBYTE:	MOV	R3,NUMBYTE
   18:	  0032	12 00 97			LCALL	START		;启动总线
   19:	  0035	E5 50				MOV	A,SLA
   20:	  0037	12 00 F3			LCALL	WRBYTE		;发送器件地址字
   21:	  003A	12 00 DE			LCALL	CACK
   22:	  003D	30 10 17			JNB	ACK,RETWRN	;无应答则退出
   23:	  0040	E5 51				MOV	A,SUBA		;指定子地址
   24:	  0042	12 00 F3			LCALL	WRBYTE
   25:	  0045	12 00 DE			LCALL	CACK
   26:	  0048	79 30				MOV	R1,#MTD
   27:	  004A	E7		WRDA:		MOV	A,@R1
   28:	  004B	12 00 F3			LCALL	WRBYTE		;开始写入数据
   29:	  004E	12 00 DE			LCALL	CACK
   30:	  0051	30 10 DC			JNB	ACK,IWRNBYTE
   31:	  0054	09				INC	R1
   32:	  0055	DB F3				DJNZ	R3,WRDA		;判断是否写完
   33:	  0057	12 00 AB	RETWRN:	LCALL	STOP
   34:	  005A	22				RET
   35:				;*********************************************************************
   36:				;名称:IRDNBYTE
   37:				;描述:从器件指定子地址读取N个数据
   38:				;入口参数:器件地址字SLA,子地址SUBA,接收数据缓存区MRD,接收字节数NUMBYTE
   39:				;*********************************************************************
   40:	  005B	AB 52		IRDNBYTE:	MOV	R3,NUMBYTE
   41:	  005D	12 00 97			LCALL	START
   42:	  0060	E5 50				MOV	A,SLA
   43:	  0062	12 00 F3			LCALL	WRBYTE		;发送器件地址字

ASEM-51 V1.2                                         Copyright (c) 1996 by W.W. Heinz                                         PAGE 2



 Line  I  Addr  Code            Source

   44:	  0065	12 00 DE			LCALL	CACK
   45:	  0068	30 10 22			JNB	ACK,RETRDN
   46:	  006B	E5 51				MOV	A,SUBA		;指定子地址
   47:	  006D	12 00 F3			LCALL	WRBYTE
   48:	  0070	12 00 DE			LCALL	CACK
   49:	  0073	12 00 97			LCALL	START		;重新启动总线
   50:	  0076	E5 50				MOV	A,SLA
   51:	  0078	04				INC	A		;准备进行读操作
   52:	  0079	12 00 F3			LCALL	WRBYTE
   53:	  007C	12 00 DE			LCALL	CACK
   54:	  007F	30 10 D9			JNB	ACK,IRDNBYTE
   55:	  0082	79 40				MOV	R1,#MRD
   56:	  0084	12 01 1A	RON1:		LCALL	RDBYTE		;读操作开始
   57:	  0087	F7				MOV	@R1,A
   58:	  0088	DB 07				DJNZ	R3,SACK
   59:	  008A	12 00 CE			LCALL	MNACK		;最后一字节发非应答位
   60:	  008D	12 00 AB	RETRDN:		LCALL	STOP
   61:	  0090	22				RET
   62:	  0091	12 00 BE	SACK:		LCALL	MACK
   63:	  0094	09				INC	R1
   64:	  0095	80 ED				SJMP	RON1
   65:				;*********************************************************************
   66:				;名称:STRRT
   67:				;描述:启动I2C总线子程序—发送I2C总线起始条件
   68:				;*********************************************************************
   69:	  0097	D2 97		START:		SETB	SDA		;发送起始条件数据信号
   70:	  0099	00				NOP			;起始条件建立时间大于4.7us
   71:	  009A	D2 96		   		SETB	SCL		;发送起始条件的时钟信号
   72:	  009C	00				NOP
   73:	  009D	00				NOP
   74:	  009E	00				NOP
   75:	  009F	00				NOP
   76:	  00A0	00				NOP			;起始条件锁定时间大于4.7us
   77:	  00A1	C2 97		   		CLR  	SDA		;发送起始信号
   78:	  00A3	00				NOP
   79:	  00A4	00				NOP
   80:	  00A5	00				NOP
   81:	  00A6	00				NOP			;起始条件锁定时间大于4.7us
   82:	  00A7	C2 96		   		CLR	SCL		;钳住I2C总线,准备发送或接收数据
   83:	  00A9	00		   		NOP
   84:	  00AA	22		   		RET
   85:				;*********************************************************************
   86:				;名称:STOP
   87:				;描述:停止I2C总线子程序—发送I2C总线停止条件
   88:				;*********************************************************************
   89:	  00AB	C2 97		STOP:		CLR  	SDA 		;发送停止条件的数据信号
   90:	  00AD	00				NOP
   91:	  00AE	00				NOP
   92:	  00AF	D2 96				SETB  	SCL 		;发送停止条件的时钟信号
   93:	  00B1	00				NOP
   94:	  00B2	00				NOP
   95:	  00B3	00				NOP
   96:	  00B4	00				NOP
   97:	  00B5	00				NOP			;起始条件建立时间大于4.7us
   98:	  00B6	D2 97				SETB 	SDA 		;发送I2C总线停止信号
   99:	  00B8	00				NOP

ASEM-51 V1.2                                         Copyright (c) 1996 by W.W. Heinz                                         PAGE 3



 Line  I  Addr  Code            Source

  100:	  00B9	00				NOP
  101:	  00BA	00				NOP
  102:	  00BB	00				NOP
  103:	  00BC	00				NOP			;延迟时间大于4.7us
  104:	  00BD	22				RET
  105:				;*********************************************************************
  106:				;名称:MACK
  107:				;描述:发送应答信号子程序
  108:				;*********************************************************************
  109:	  00BE	C2 97		MACK:		CLR	SDA		;将SDA置0
  110:	  00C0	00				NOP
  111:	  00C1	00				NOP
  112:	  00C2	D2 96				SETB	SCL
  113:	  00C4	00				NOP
  114:	  00C5	00				NOP
  115:	  00C6	00				NOP
  116:	  00C7	00				NOP
  117:	  00C8	00				NOP			;保持数据时间,大于4.7us
  118:	  00C9	C2 96				CLR	SCL
  119:	  00CB	00				NOP
  120:	  00CC	00				NOP
  121:	  00CD	22				RET
  122:				;*********************************************************************
  123:				;名称:MNACK
  124:				;描述:发送非应答信号子程序
  125:				;*********************************************************************
  126:	  00CE	D2 97		MNACK:		SETB	SDA		;将SDA置1
  127:	  00D0	00				NOP
  128:	  00D1	00				NOP
  129:	  00D2	D2 96				SETB	SCL
  130:	  00D4	00				NOP
  131:	  00D5	00				NOP
  132:	  00D6	00				NOP
  133:	  00D7	00				NOP
  134:	  00D8	00				NOP
  135:	  00D9	C2 96				CLR	SCL		;保持数据时间,大于4.7us
  136:	  00DB	00				NOP
  137:	  00DC	00				NOP
  138:	  00DD	22				RET
  139:				;*********************************************************************
  140:				;名称:CACK
  141:				;描述:检查应答位子程序,返回值:ACK=1时表示有应答
  142:				;*********************************************************************
  143:	  00DE	D2 97		CACK:		SETB	SDA
  144:	  00E0	00				NOP
  145:	  00E1	00				NOP
  146:	  00E2	D2 96				SETB	SCL
  147:	  00E4	C2 10				CLR	ACK
  148:	  00E6	00				NOP
  149:	  00E7	00				NOP
  150:	  00E8	A2 97				MOV	C,SDA
  151:	  00EA	40 02				JC	CEND
  152:	  00EC	D2 10				SETB	ACK		;判断应答位
  153:	  00EE	00		CEND:		NOP
  154:	  00EF	C2 96				CLR	SCL
  155:	  00F1	00				NOP

ASEM-51 V1.2                                         Copyright (c) 1996 by W.W. Heinz                                         PAGE 4



 Line  I  Addr  Code            Source

  156:	  00F2	22				RET
  157:				;*********************************************************************
  158:				;名称:WRBYTE
  159:				;描述:发送字节子程序,字节数据放入ACC
  160:				;*********************************************************************
  161:	  00F3	78 08		WRBYTE:		MOV	R0,#08H
  162:	  00F5	33		WLP:		RLC	A		;取数据位
  163:	  00F6	40 06				JC	WRI
  164:	  00F8	80 12				SJMP	WRO		;判断数据位
  165:	  00FA	D8 F9		WLP1:		DJNZ	R0,WLP
  166:	  00FC	00				NOP
  167:	  00FD	22				RET
  168:	  00FE	D2 97		WRI:		SETB	SDA		;发送1
  169:	  0100	00				NOP
  170:	  0101	D2 96				SETB	SCL
  171:	  0103	00				NOP
  172:	  0104	00				NOP
  173:	  0105	00				NOP
  174:	  0106	00				NOP
  175:	  0107	00				NOP
  176:	  0108	C2 96				CLR	SCL
  177:	  010A	80 EE				SJMP	WLP1
  178:	  010C	C2 97		WRO:		CLR	SDA		;发送0
  179:	  010E	00				NOP
  180:	  010F	D2 96				SETB	SCL
  181:	  0111	00				NOP
  182:	  0112	00				NOP
  183:	  0113	00				NOP
  184:	  0114	00				NOP
  185:	  0115	00				NOP
  186:	  0116	C2 96				CLR	SCL
  187:	  0118	80 E0				SJMP	WLP1
  188:				;*********************************************************************
  189:				;名称:RDBYTE
  190:				;描述:读取字节子程序,读出的数据存放在ACC
  191:				;*********************************************************************
  192:	  011A	78 08		RDBYTE:		MOV	R0,#08H
  193:	  011C	D2 97		RLP:		SETB	SDA
  194:	  011E	00				NOP
  195:	  011F	D2 96				SETB	SCL		;时钟线为高,接收数据位
  196:	  0121	00				NOP
  197:	  0122	00				NOP
  198:	  0123	A2 97				MOV	C,SDA		;读取数据位
  199:	  0125	EA				MOV	A,R2
  200:	  0126	C2 96				CLR	SCL		;将SCL拉低,时间大于4.7us
  201:	  0128	33				RLC	A		;进行数据位的处理
  202:	  0129	FA				MOV	R2,A
  203:	  012A	00				NOP
  204:	  012B	00				NOP
  205:	  012C	00				NOP
  206:	  012D	D8 ED				DJNZ	R0,RLP		;未够8位,继续读入
  207:	  012F	22				RET
  208:
  209:	  0130	7C F0		MAIN:		MOV	R4,#0F0H	;延时,等待其它芯片复位完成
  210:	  0132	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:	  0134	74 00				MOV	A,#00H
  213:	  0136	78 30				MOV	R0,#30H
  214:	  0138	F6		S1:		MOV	@R0,A
  215:	  0139	08				INC	R0
  216:	  013A	04				INC	A
  217:	  013B	B8 40 FA			CJNE	R0,#40H,S1
  218:				;向24C02C中写数据,数据存放在24C02C中50H开始的16个字节中
  219:	  013E	75 50 A0			MOV	SLA,#0A0H	;24C02C地址字,写操作
  220:	  0141	75 51 50			MOV	SUBA,#50H	;目标地址
  221:	  0144	75 52 10			MOV	NUMBYTE,#16	;字节数
  222:	  0147	12 00 30			LCALL	IWRNBYTE	;写数据
  223:	  014A	7D 14		DELAY:		MOV	R5,#20
  224:	  014C	7E F8		D1:		MOV	R6,#248
  225:	  014E	7F F8		D2:		MOV	R7,#248
  226:	  0150	DF FE				DJNZ	R7,$
  227:	  0152	DE FA				DJNZ	R6,D2
  228:	  0154	DD F6				DJNZ	R5,D1
  229:				;从24C04C中读数据,数据送AT89C51中40H开始的16个字节中
  230:	  0156	75 50 A0			MOV	SLA,#0A0H	;24C02C地址字,伪写入操作
  231:	  0159	75 51 50			MOV	SUBA,#50H	;目标地址
  232:	  015C	75 52 10			MOV	NUMBYTE,#16	;字节数
  233:	  015F	12 00 5B			LCALL	IRDNBYTE	;读数据
  234:	  0162	80 FE				SJMP 	$
  235:						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	    00DE	 143
CEND				  CODE	    00EE	 153
CY				  BIT	      D7
D1				  CODE	    014C	 224
D2				  CODE	    014E	 225
DELAY				  CODE	    014A	 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	    005B	  40
IT0				  BIT	      88
IT1				  BIT	      8A
IWRNBYTE			  CODE	    0030	  17
MACK				  CODE	    00BE	 109
MAIN				  CODE	    0130	 209
MNACK				  CODE	    00CE	 126
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	    011A	 192
REN				  BIT	      9C
RESET				  CODE	    0000
RETRDN				  CODE	    008D	  60
RETWRN				  CODE	    0057	  33
RI				  BIT	      98
RLP				  CODE	    011C	 193
RON1				  CODE	    0084	  56
RS0				  BIT	      D3
RS1				  BIT	      D4
RXD				  BIT	      B0
S1				  CODE	    0138	 214
SACK				  CODE	    0091	  62
SBUF				  DATA	      99
SCL				  BIT	      96	   6
SCON				  DATA	      98
SDA				  BIT	      97	   5
SINT				  CODE	    0023
SLA				  DATA	      50	   2
SM0				  BIT	      9F
SM1				  BIT	      9E
SM2				  BIT	      9D
SP				  DATA	      81
START				  CODE	    0097	  69
STOP				  CODE	    00AB	  89
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	    00F5	 162
WLP1				  CODE	    00FA	 165
WR				  BIT	      B6
WRBYTE				  CODE	    00F3	 161
WRDA				  CODE	    004A	  27
WRI				  CODE	    00FE	 168
WRO				  CODE	    010C	 178

⌨️ 快捷键说明

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