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

📄 i2c.asm

📁 T108 LCD屏的DEMO源代码!需要的就下吧
💻 ASM
字号:
;---------------------------------------------------------------------------
; Terawins Inc. Company Confidential Strictly Private
;
; $Archive: $
; $Revision: 0.9 $
; $Author: Bruce $
; $Date: 2007/02/084 22:34:39 $
;
; --------------------------------------------------------------------------
; >>>>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; --------------------------------------------------------------------------
; Copyright 2007 (c) Terawins Inc.
;
; Functions:
;	void StartCondition(void)
;	void StopCondition(void)
;	uCHAR Send_Byte(uCHAR cData)
;	uCHAR Read_Byte(uCHAR cNum)
;	void twdWr_Burst_D(uCHAR cData)
;

$NOMOD51

NAME	I2C

bSDA_MSB	BIT	0E0H.7
P0	DATA	080H
P1	DATA	090H
P2	DATA	0A0H
P3	DATA	0B0H
AC	BIT	0D0H.6
T0	BIT	0B0H.4
T1	BIT	0B0H.5
EA	BIT	0A8H.7
IE	DATA	0A8H
RD	BIT	0B0H.7
ES	BIT	0A8H.4
IP	DATA	0B8H
RI	BIT	098H.0
CY	BIT	0D0H.7
INT0	BIT	0B0H.2
INT1	BIT	0B0H.3
TI	BIT	098H.1
PS	BIT	0B8H.4
SP	DATA	081H
OV	BIT	0D0H.2
WR	BIT	0B0H.6
SBUF	DATA	099H
PCON	DATA	087H
SCON	DATA	098H
TMOD	DATA	089H
IE0	BIT	088H.1
IE1	BIT	088H.3
B	DATA	0F0H
ACC	DATA	0E0H
ET0	BIT	0A8H.1
ET1	BIT	0A8H.3
TF0	BIT	088H.5
TF1	BIT	088H.7
RB8	BIT	098H.2
TH0	DATA	08CH
EX0	BIT	0A8H.0
IT0	BIT	088H.0
TH1	DATA	08DH
EX1	BIT	0A8H.2
TB8	BIT	098H.3
IT1	BIT	088H.2
P	BIT	0D0H.0
SM0	BIT	098H.7
TL0	DATA	08AH
SM1	BIT	098H.6
TL1	DATA	08BH
SM2	BIT	098H.5
PT0	BIT	0B8H.1
RS0	BIT	0D0H.3
PT1	BIT	0B8H.3
RS1	BIT	0D0H.4
TR0	BIT	088H.4
TR1	BIT	088H.6
SDA	BIT	090H.7
PX0	BIT	0B8H.0
PX1	BIT	0B8H.2
DPH	DATA	083H
DPL	DATA	082H
SCL	BIT	090H.6
REN	BIT	098H.4
RXD	BIT	0B0H.0
TXD	BIT	0B0H.1
F0	BIT	0D0H.5
PSW	DATA	0D0H
?PR?StartCondition?I2C                   SEGMENT CODE 
?PR?StopCondition?I2C                    SEGMENT CODE 
?PR?_Send_Byte?I2C   SEGMENT CODE 
?PR?_Read_Byte?I2C   SEGMENT CODE 
?PR?_twdWr_Burst_D?I2C                   SEGMENT CODE 
	PUBLIC	_twdWr_Burst_D
	PUBLIC	_Read_Byte
	PUBLIC	_Send_Byte
	PUBLIC	StopCondition
	PUBLIC	StartCondition
; #pragma SRC
; #include "reg51.h"
; #include "i2c.h"
; 
; 
; //----------------------------------------
; // Start_Condition for TWD protocol
; //----------------------------------------
; 
; void StartCondition(void)

	RSEG  ?PR?StartCondition?I2C
StartCondition:
	USING	0
;     uCHAR cTWtrytime=0;
	CLR  	A
	MOV  	R7,A
;     EA=0;
	CLR  	EA
?C0001:
;     while(++cTWtrytime) {
	INC  	R7
	MOV  	A,R7
	JZ   	?C0004
	SETB 	SDA
	SETB 	SDA
	SETB 	SCL
	SETB 	SCL
	CLR  	SDA
	CLR  	SDA
	JNB  	SCL,?C0001
	JB   	SDA,?C0001
;     }
?C0004:
	RET  	
; END OF StartCondition

; 
; //----------------------------------------
; // Stop_Condition for TWD protocol
; //----------------------------------------
; void StopCondition(void)

	RSEG  ?PR?StopCondition?I2C
StopCondition:
	USING	0
;     uCHAR cTWtrytime=0;
	CLR  	A
	MOV  	R7,A
;     Set_SDA_Low;
	CLR  	SDA
	CLR  	SDA
;     Set_SCL_High;
	SETB 	SCL
	SETB 	SCL
?C0005:
;     while(SCL_Low && ++cTWtrytime) {};
	JB   	SCL,?C0006
	INC  	R7
	MOV  	A,R7
	JNZ  	?C0005
?C0006:
;     Set_SDA_High;
	SETB 	SDA
	SETB 	SDA
; 	EA=1;
	SETB 	EA
	RET  	
; END OF StopCondition

; 
; //--------------------------------------------------
; // Send_Byte
; //    Send a byte to master with a acknowledge bit
; //--------------------------------------------------
; uCHAR Send_Byte(uCHAR cData)

	RSEG  ?PR?_Send_Byte?I2C
_Send_Byte:
	USING	0
;     cAcknowledge = 0;
;	CLR  	A
	MOV  	R6,#0
; 	ACC=cData;
	MOV  	A,R7
;     for(ix = 0; ix < 8; ix++)
	MOV  	R7,#0
?C0008:
;     {
;         Set_SCL_Low;
	CLR  	SCL
	CLR  	SCL
;	  Setting SDA
	RLC	A
	MOV  	SDA,C
	MOV  	SDA,C
;         Set_SCL_High;
	SETB 	SCL
	SETB 	SCL
;     }
			; SOURCE LINE # 75
	INC  	R7
	CJNE 	R7,#08H,?C0008
?C0009:
;     Set_SCL_Low;
	CLR  	SCL
	CLR  	SCL
;     Set_SDA_High;                /* release data line for acknowledge */
	SETB 	SDA
	SETB 	SDA
;     Set_SCL_High;                /* Send a clock for Acknowledge */
	SETB 	SCL
	SETB 	SCL
?C0011:
;     while(SCL_Low)   { };
	JNB  	SCL,?C0011
?C0012:
; 
;     if(SDA_High) cAcknowledge = 1; /* No Acknowledge */
	JNB  	SDA,?C0013
	MOV  	R6,#01H
?C0013:
;     Set_SCL_Low;                   /* Finish Acknoledge */
	CLR  	SCL
	CLR  	SCL
;     return(cAcknowledge);
	MOV  	R7,AR6
; }
?C0014:
	RET  	
; END OF _Send_Byte

; 
; 
; 
; //--------------------------------------------------
; // Read_Byte
; //    Read a byte from master with a acknowledge bit
; //--------------------------------------------------
; uCHAR Read_Byte(uCHAR cNum)

	RSEG  ?PR?_Read_Byte?I2C
_Read_Byte:
	USING	0
; cNum -> 'R1'
	MOV  	R1,AR7
; {
;     uCHAR ix; 'R4'
;     uCHAR cRetval=0; 'R5'
	CLR  	A
	MOV  	R5,A
; 
;     for(ix=0;ix<8;ix++){
	MOV  	R4,A
?C0015:
;           Set_SCL_High;
	SETB 	SCL
	SETB 	SCL
?C0018:
;           while(SCL_Low){};
	JNB  	SCL,?C0018
?C0019:
;           cRetval = (SDA_High)? (cRetval|(1<<(7-ix))):cRetval ;  /* MSB First */
	JNB  	SDA,?C0020
	CLR  	C
	MOV  	A,#07H
	SUBB 	A,R4
	MOV  	R7,A
	MOV  	A,#01H
	MOV  	R6,#00H
	MOV  	R0,AR7
	INC  	R0
	SJMP 	?C0032
?C0031:
	CLR  	C
	RLC  	A
	XCH  	A,R6
	RLC  	A
	XCH  	A,R6
?C0032:
	DJNZ 	R0,?C0031
	MOV  	R7,A
	MOV  	A,R5
	MOV  	R3,A
	MOV  	A,R7
	ORL  	A,R3
	MOV  	R7,A
	SJMP 	?C0021
?C0020:
	MOV  	A,R5
	MOV  	R7,A
?C0021:
	MOV  	R5,AR7
; 	  Set_SCL_Low;
	CLR  	SCL
	CLR  	SCL
;      }
	INC  	R4
	MOV  	A,R4
	CJNE 	A,#08H,?C0015
?C0016:
; 
;      if(cNum==1)
	MOV  	A,R1
	CJNE 	A,#01H,?C0022
;      	Set_SDA_High;
	SETB 	SDA
	SETB 	SDA
	SJMP 	?C0023
?C0022:
;      else
; 		Set_SDA_Low;
	CLR  	SDA
	CLR  	SDA
?C0023:
;      Set_SCL_High;
	SETB 	SCL
	SETB 	SCL
?C0024:
;      while(SCL_Low){};
	JNB  	SCL,?C0024
?C0025:
;     Set_SCL_Low;
	CLR  	SCL
	CLR  	SCL
;     Set_SDA_High;
	SETB 	SDA
	SETB 	SDA
;     return cRetval;
	MOV  	R7,AR5
; }
?C0026:
	RET  	
; END OF _Read_Byte

; 
; =============================================================================
; void twdWr_Burst_D(uCHAR cData)
; =============================================================================

	RSEG  ?PR?_twdWr_Burst_D?I2C
_twdWr_Burst_D:
	USING	0
; {
; 	ACC=cData;
	MOV  	A,R7
?C0027:
;     {  send 8bit from MSB to LSB
;         Set_SCL2Low;
	CLR  	SCL
	; Setting SDA (Data bit-7)
	RLC	A
	MOV	SDA,C
	NOP
;         Setup SCL to high
	SETB  	SCL
	; Bit-6
	RLC	A
	CLR	SCL
	MOV	SDA,C
	SETB  	SCL
	NOP
	; Bit-5
	RLC	A
	CLR	SCL
	MOV	SDA,C
	SETB  	SCL
	NOP
	; Bit-4
	RLC	A
	CLR	SCL
	MOV	SDA,C
	SETB  	SCL
	NOP
	; Bit-3
	RLC	A
	CLR	SCL
	MOV	SDA,C
	SETB  	SCL
	NOP
	; Bit-2
	RLC	A
	CLR	SCL
	MOV	SDA,C
	SETB  	SCL
	NOP
	; Bit-1
	RLC	A
	CLR	SCL
	MOV	SDA,C
	SETB  	SCL
	NOP
	; Bit-0
	RLC	A
	CLR	SCL
	MOV	SDA,C
	SETB  	SCL
	NOP
;     }
?C0028:
;     Set_SCL2Low;
	NOP
	CLR  	SCL
	NOP
	NOP
;     Set_SDA2High;                /* release data line for acknowledge */
	SETB 	SDA
	NOP
	NOP
;     Set_SCL2High;                /* Send a clock for Acknowledge */
	SETB 	SCL
	NOP
	NOP
;     Set_SCL2Low;                   /* Finish Acknoledge */
	CLR  	SCL
	NOP
; }
	RET  	
; END OF _twdWr_Burst_D

	END

⌨️ 快捷键说明

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