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

📄 2402.src

📁 51单片机实验例程
💻 SRC
字号:
; 2402.SRC generated from: 2402.c
; COMPILER INVOKED BY:
;        C:\Keil\C51\BIN\C51.EXE 2402.c BROWSE DEBUG OBJECTEXTEND


NAME	_2402

?PR?_ISendStr?2402   SEGMENT CODE 
?DT?_ISendStr?2402   SEGMENT DATA OVERLAYABLE 
?PR?_IRcvStr?2402    SEGMENT CODE 
?DT?_IRcvStr?2402    SEGMENT DATA OVERLAYABLE 
	EXTRN	CODE (_SendByte)
	EXTRN	BIT (ack)
	EXTRN	CODE (RcvByte)
	EXTRN	CODE (Ack_I2c)
	EXTRN	BIT (?Ack_I2c?BIT)
	EXTRN	CODE (Start_I2c)
	EXTRN	CODE (Stop_I2c)
	EXTRN	CODE (?C?CLDPTR)
	EXTRN	CODE (?C?CSTPTR)
	PUBLIC	?_IRcvStr?BYTE
	PUBLIC	_IRcvStr
	PUBLIC	?_ISendStr?BYTE
	PUBLIC	_ISendStr

	RSEG  ?DT?_IRcvStr?2402
?_IRcvStr?BYTE:
        sla?145:   DS   1
       suba?146:   DS   1
          s?147:   DS   3
         no?148:   DS   1
	ORG  6
          i?149:   DS   1

	RSEG  ?DT?_ISendStr?2402
?_ISendStr?BYTE:
        sla?040:   DS   1
       suba?041:   DS   1
          s?042:   DS   3
         no?043:   DS   1
	ORG  6
          i?044:   DS   1
;  
;  /*************************此部分为AT2402的驱动程序使用I2C总线连接*************************************/

; #include<Function.h>
; 
; //AT2402的功能函数
; /*******************************************************************
;                     向有子地址器件发送多字节数据函数               
; 函数原型: bit  ISendStr(UCHAR sla,UCHAR suba,ucahr *s,UCHAR no);  
; 功能:     从启动总线到发送地址,子地址,数据,结束总线的全过程,从器件
;           地址sla,子地址suba,发送内容是s指向的内容,发送no个字节。
;           如果返回1表示操作成功,否则操作有误。
; 注意:    使用前必须已结束总线。
; ********************************************************************/
; bit ISendStr(unsigned char  sla,unsigned char  suba,unsigned char  *s,unsigned char  no)

	RSEG  ?PR?_ISendStr?2402
_ISendStr:
	USING	0
			; SOURCE LINE # 15
	MOV  	sla?040,R7
	MOV  	suba?041,R5
	MOV  	s?042,R3
	MOV  	s?042+01H,R2
	MOV  	s?042+02H,R1
; {
			; SOURCE LINE # 16
;    unsigned char i;
; 
;    Start_I2c();               /*启动总线*/
			; SOURCE LINE # 19
	LCALL	Start_I2c
;    SendByte(sla);             /*发送器件地址*/
			; SOURCE LINE # 20
	MOV  	R7,sla?040
	LCALL	_SendByte
;    if(ack==0)return(0);
			; SOURCE LINE # 21
	JB   	ack,?C0001
	CLR  	C
	RET  	
?C0001:
;    SendByte(suba);            /*发送器件子地址*/
			; SOURCE LINE # 22
	MOV  	R7,suba?041
	LCALL	_SendByte
;    if(ack==0)return(0);
			; SOURCE LINE # 23
	JB   	ack,?C0003
	CLR  	C
	RET  	
?C0003:
; 
;    for(i=0;i<no;i++)
			; SOURCE LINE # 25
	CLR  	A
	MOV  	i?044,A
?C0004:
	MOV  	A,i?044
	CLR  	C
	SUBB 	A,no?043
	JNC  	?C0005
;    {   
			; SOURCE LINE # 26
;      SendByte(*s);            /*发送数据*/
			; SOURCE LINE # 27
	MOV  	R3,s?042
	MOV  	R2,s?042+01H
	MOV  	R1,s?042+02H
	LCALL	?C?CLDPTR
	MOV  	R7,A
	LCALL	_SendByte
;      if(ack==0)return(0);
			; SOURCE LINE # 28
	JB   	ack,?C0007
	CLR  	C
	RET  	
?C0007:
;      s++;
			; SOURCE LINE # 29
	MOV  	A,#01H
	ADD  	A,s?042+02H
	MOV  	s?042+02H,A
	CLR  	A
	ADDC 	A,s?042+01H
	MOV  	s?042+01H,A
;    } 
			; SOURCE LINE # 30
	INC  	i?044
	SJMP 	?C0004
?C0005:
;    Stop_I2c();                /*结束总线*/ 
			; SOURCE LINE # 31
	LCALL	Stop_I2c
; 
;    return(1);
			; SOURCE LINE # 33
	SETB 	C
; }
			; SOURCE LINE # 34
?C0002:
	RET  	
; END OF _ISendStr

; 
; /*******************************************************************
;                     向有子地址器件读取多字节数据函数               
; 函数原型: bit  RecndStr(UCHAR sla,UCHAR suba,ucahr *s,UCHAR no);  
; 功能:     从启动总线到发送地址,子地址,读数据,结束总线的全过程,从器件
;           地址sla,子地址suba,读出的内容放入s指向的存储区,读no个字节。
;            如果返回1表示操作成功,否则操作有误。
; 注意:    使用前必须已结束总线。
; ********************************************************************/
; bit IRcvStr(unsigned char  sla,unsigned char  suba,unsigned char  *s,unsigned char  no)

	RSEG  ?PR?_IRcvStr?2402
_IRcvStr:
	USING	0
			; SOURCE LINE # 44
	MOV  	sla?145,R7
	MOV  	suba?146,R5
	MOV  	s?147,R3
	MOV  	s?147+01H,R2
	MOV  	s?147+02H,R1
; {
			; SOURCE LINE # 45
;    unsigned char i;
; 
;    Start_I2c();                  /*启动总线*/
			; SOURCE LINE # 48
	LCALL	Start_I2c
;    SendByte(sla);                /*发送器件地址*/
			; SOURCE LINE # 49
	MOV  	R7,sla?145
	LCALL	_SendByte
;    if(ack==0)return(0);
			; SOURCE LINE # 50
	JB   	ack,?C0008
	CLR  	C
	RET  	
?C0008:
;    SendByte(suba);               /*发送器件子地址*/
			; SOURCE LINE # 51
	MOV  	R7,suba?146
	LCALL	_SendByte
;    if(ack==0)return(0);
			; SOURCE LINE # 52
	JB   	ack,?C0010
	CLR  	C
	RET  	
?C0010:
; 
;    Start_I2c();                 /*重新启动总线*/
			; SOURCE LINE # 54
	LCALL	Start_I2c
;    SendByte(sla+1);
			; SOURCE LINE # 55
	MOV  	A,sla?145
	INC  	A
	MOV  	R7,A
	LCALL	_SendByte
;    if(ack==0)return(0);
			; SOURCE LINE # 56
	JB   	ack,?C0011
	CLR  	C
	RET  	
?C0011:
;    for(i=0;i<no-1;i++)
			; SOURCE LINE # 57
	CLR  	A
	MOV  	i?149,A
?C0012:
	MOV  	A,no?148
	DEC  	A
	MOV  	R7,A
	MOV  	A,i?149
	CLR  	C
	SUBB 	A,R7
	JNC  	?C0013
;    {   
			; SOURCE LINE # 58
;      *s=RcvByte();               /*发送数据*/
			; SOURCE LINE # 59
	LCALL	RcvByte
	MOV  	R3,s?147
	MOV  	R2,s?147+01H
	MOV  	R1,s?147+02H
	MOV  	A,R7
	LCALL	?C?CSTPTR
;       Ack_I2c(0);                /*发送就答位*/  
			; SOURCE LINE # 60
	CLR  	?Ack_I2c?BIT
	LCALL	Ack_I2c
;      s++;
			; SOURCE LINE # 61
	MOV  	A,#01H
	ADD  	A,s?147+02H
	MOV  	s?147+02H,A
	CLR  	A
	ADDC 	A,s?147+01H
	MOV  	s?147+01H,A
;    } 
			; SOURCE LINE # 62
	INC  	i?149
	SJMP 	?C0012
?C0013:
;    *s=RcvByte();
			; SOURCE LINE # 63
	LCALL	RcvByte
	MOV  	R3,s?147
	MOV  	R2,s?147+01H
	MOV  	R1,s?147+02H
	MOV  	A,R7
	LCALL	?C?CSTPTR
;    Ack_I2c(1);                   /*发送非应位*/
			; SOURCE LINE # 64
	SETB 	?Ack_I2c?BIT
	LCALL	Ack_I2c
;    Stop_I2c();                   /*结束总线*/ 
			; SOURCE LINE # 65
	LCALL	Stop_I2c
;    return(1);
			; SOURCE LINE # 66
	SETB 	C
; }
			; SOURCE LINE # 67
?C0009:
	RET  	
; END OF _IRcvStr

	END

⌨️ 快捷键说明

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