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

📄 iicrount.asm

📁 一个温度采集系统的单片机程序与WINDOWS 串口通信程序
💻 ASM
字号:
;晶振为12Mhz,相应机器周期为1us,应修改相应NOP指令个数 

NAME IICRount
SCL	BIT	P1.3
SDA	BIT	P1.4

?PR?STA?IICRount        SEGMENT CODE
?PR?STOP?IICRount 	SEGMENT CODE
?PR?CACK?IICRount 	SEGMENT CODE
?PR?MACK?IICRount 	SEGMENT CODE
?PR?MNACK?IICRount 	SEGMENT CODE

?PR?WRBYT?IICRount 	SEGMENT CODE
?PR?RDBYT?IICRount 	SEGMENT CODE
;?PR?_WRNBYT?IICRount 	SEGMENT CODE
?PR?_RDNBYT?IICRount 	SEGMENT CODE
?PR?_WRADR?IICRount  	SEGMENT CODE
?PR?_RDADR?IICRount  	SEGMENT CODE

?DT?_WRADR?IICRount	SEGMENT DATA 	OVERLAYABLE                  ;定义可覆盖局部数据段
?DT?_RDADR?IICRount	SEGMENT DATA	OVERLAYABLE	

PUBLIC STA,STOP,CACK,MACK,MNACK,WRBYT,RDBYT,_RDADR,_WRADR,_RDNBYT ;,_WRNBYT
PUBLIC	?_WRADR?BYTE
PUBLIC	?_RDADR?BYTE

RSEG	?DT?_WRADR?IICRount
?_WRADR?BYTE:	
ORG	4	
	subadr_w?00: DS  1


RSEG	?DT?_RDADR?IICRount
?_RDADR?BYTE:	
ORG	4
	subadr_r?00: DS  1

;-------------------------------------------
RSEG	?PR?STA?IICRount 
STA:	SETB	SDA
	SETB	SCL
	NOP
	NOP
	NOP
	NOP
	CLR	SDA
	NOP
	NOP
	NOP
	NOP
	CLR	SCL
	RET
;-------------------------------------------
RSEG	?PR?STOP?IICRount 
STOP:	CLR	SDA
	SETB	SCL
	NOP
	NOP
	NOP
	NOP
	SETB	SDA
	NOP
	NOP
	NOP
	NOP
	CLR	SCL
	RET
;--------------------------------------------
RSEG	?PR?MACK?IICRount 
MACK:	CLR	SDA
	SETB	SCL
	NOP
	NOP
	NOP
	NOP
	CLR	SCL
	SETB	SDA
	RET
;--------------------------------------------
RSEG	?PR?MNACK?IICRount 
MNACK:SETB	SDA
	SETB	SCL
	NOP
	NOP
	NOP
	NOP
	CLR	SCL
	CLR	SDA
	RET
;---------------------------------------------
RSEG	?PR?CACK?IICRount 
CACK:	SETB	SDA
	SETB	SCL
	CLR	F0
	MOV	A,P1
	JNB	ACC.4,CEND                  ;数据线SDA被器件拉低
	SETB	F0
CEND:	CLR	SCL
	NOP
	RET
;---------------------------------------------
RSEG	?PR?WRBYT?IICRount               
WRBYT:MOV	R3,#08H			    ;发送ACC中一字节数据
WLP:	RLC	A
	JC	WLR1
	JMP	WLR0
WLP1:	DJNZ	R3,WLP
	RET
WLR1:	SETB	SDA
	SETB	SCL
	NOP
	NOP
	NOP
	NOP
	CLR	SCL
	CLR	SDA
	AJMP	WLP1
WLR0:	CLR	SDA
	SETB	SCL
	NOP
	NOP
	NOP
	NOP
	CLR	SCL
	AJMP	WLP1
;----------------------------------------------
RSEG	?PR?RDBYT?IICRount 
RDBYT:MOV	R3,#08                           ;接收一字节,放ACC
RLP:	SETB	SDA
	SETB	SCL
	MOV	A,P1
	JNB	ACC.4,RD0
	AJMP	RD1
RLP1:	DJNZ	R3,RLP
	MOV	A,R2
	RET
RD0:	CLR	C
	MOV	A,R2
	RLC	A
	MOV	R2,A
	CLR	SCL
	AJMP	RLP1
RD1:	SETB	C
	MOV	A,R2
	RLC	A
	MOV	R2,A
	CLR	SCL
	AJMP	RLP1
;---------------------------------------------
;功能:发送数据到指定EEPROM地址
;入口:R7存放数据缓冲区首地址,
;      R5存放数据长度
;---------------------------------------------         
RSEG	?PR?_WRADR?IICRount              ;发送数据到指定EEPROM地址
_WRADR:PUSH	PSW			 ;发送数据缓冲区地址参数在R1<低字节>,R2<高>中	
	MOV	R7,subadr_w?00             ;长度参数在数据段中,EEPROM写地址参数在R5中
WADB:	LCALL	STA
	MOV	A,#0A0H
	LCALL	WRBYT
	LCALL	CACK
	JB	F0,WADB
	MOV	A,R5                      ;发送写EEPROM数据地址
	LCALL	WRBYT
	LCALL	CACK
	JB	F0,WADB
WADA:	MOV	A,@R1
	LCALL	WRBYT
	LCALL	CACK
	JB	F0,WADB        
	INC	R1
	DJNZ	R7,WADA            ;R5存放数据长度 
	LCALL	STOP
	POP	PSW
	RET   
     


;---------------------------------------------
;功能:发送数据到默认EEPROM地址
;入口:R7存放数据缓冲区首地址,
;      R5存放数据长度
;---------------------------------------------   

;RSEG	?PR?_WRNBYT?IICRount
;_WRNBYT:PUSH	PSW
;	MOV	A,R1               ;R1(低字节),R2(高字节)存放数据缓冲区首地址
;	MOV	DPL,A
;	MOV	A,R2
;	MOV	DPH,A
;	MOV	R3,#00
;WRDB:	LCALL	STA
;	MOV	A,#0A0H
;	LCALL	WRBYT
;	LCALL	CACK
;	JB	F0,WRDB
;WRDA:	MOV	A,R3
;	MOVC	A,@A+DPTR
;	LCALL	WRBYT
;	LCALL	CACK
;	JB	F0,WRDB        
;	INC	R3
;	DJNZ	R5,WRDA            ;R5存放数据长度 
;	LCALL	STOP
;	POP	PSW
;	RET
;---------------------------------------------
;功能:读取指定EEPROM地址数据
;入口:R7存放数据缓冲区首地址,
;      R5存放数据长度
;---------------------------------------------   
RSEG	?PR?_RDADR?IICRount
_RDADR:PUSH	PSW                      ;数据缓冲区地址参数在R1<低〉>,R2<高>中
	MOV	R7,subadr_r?00
RDN0:	LCALL	STA                      ;数据长度参数在R5中
	MOV	A,#0A0H
	LCALL	WRBYT
	LCALL	CACK
	JB	F0,RDN0
	MOV	A,R5                     ;发送读数据地址  
	LCALL	WRBYT
	LCALL	CACK
	JB	F0,RDN0
	LCALL	STA
	MOV	A,#0A1H
	LCALL	WRBYT
	LCALL	CACK
	JB	F0,RDN0
RDN1:	LCALL	RDBYT	
	MOV	@R1,A
	DJNZ	R7,RDN2
	LCALL	MNACK
	LCALL	STOP
	POP	PSW
	RET

RDN2:	LCALL	MACK
	INC	R1
	SJMP	RDN1
	
;---------------------------------------------
;功能:读取默认EEPROM地址数据
;入口:R7存放数据缓冲区首地址,
;      R5存放数据长度
;---------------------------------------------  	
RSEG	?PR?_RDNBYT?IICRount
_RDNBYT:PUSH PSW		           ;数据缓冲区地址参数在R1<低〉>,R2<高>中                    
RAN0:	LCALL	STA			   ;数据长度参数在R5中	
	MOV	A,#0A1H
	LCALL	WRBYT
	LCALL	CACK
	JB	F0,RAN0
RAN1:	LCALL	RDBYT
	MOV	@R1,A
	DJNZ	R5,RAN2
	LCALL	MNACK
	LCALL	STOP
	POP	PSW
	RET
	
RAN2:	LCALL	MACK
	INC	R1
	SJMP	RAN1
		
	END

⌨️ 快捷键说明

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