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

📄 bus.a51

📁 采用台湾MRT晶捷公司的MRT4方案的液晶电视的程序
💻 A51
字号:
; BUS.A51 generated from: BUS.C

$NOMOD51

NAME	BUS

P0	DATA	080H
P1	DATA	090H
SDAPin	BIT	090H.6
P2	DATA	0A0H
P3	DATA	0B0H
T0	BIT	0B0H.4
AC	BIT	0D0H.6
T1	BIT	0B0H.5
LED_G_Pin	BIT	080H.1
EA	BIT	0A8H.7
SCLPin	BIT	090H.7
LED_O_Pin	BIT	080H.0
IE	DATA	0A8H
RIGHT_BUT_PIN	BIT	090H.2
RD	BIT	0B0H.7
ES	BIT	0A8H.4
IP	DATA	0B8H
RI	BIT	098H.0
INT0	BIT	0B0H.2
CY	BIT	0D0H.7
TI	BIT	098H.1
INT1	BIT	0B0H.3
PS	BIT	0B8H.4
SP	DATA	081H
POWER_BUT_PIN	BIT	090H.4
OV	BIT	0D0H.2
WR	BIT	0B0H.6
ResetPin	BIT	0A0H.0
SBUF	DATA	099H
PCON	DATA	087H
SCON	DATA	098H
TMOD	DATA	089H
TCON	DATA	088H
IE0	BIT	088H.1
IE1	BIT	088H.3
LEFT_BUT_PIN	BIT	090H.3
B	DATA	0F0H
ACC	DATA	0E0H
BrightnessPin	BIT	0B0H.5
ET0	BIT	0A8H.1
ET1	BIT	0A8H.3
TF0	BIT	088H.5
MENU_BUT_PIN	BIT	090H.1
TF1	BIT	088H.7
RB8	BIT	098H.2
TH0	DATA	08CH
EX0	BIT	0A8H.0
IT0	BIT	088H.0
TH1	DATA	08DH
TB8	BIT	098H.3
EX1	BIT	0A8H.2
IT1	BIT	088H.2
AUTO_BUT_PIN	BIT	090H.0
P	BIT	0D0H.0
WPPin	BIT	090H.5
SM0	BIT	098H.7
TL0	DATA	08AH
SM1	BIT	098H.6
TL1	DATA	08BH
SM2	BIT	098H.5
PT0	BIT	0B8H.1
PT1	BIT	0B8H.3
RS0	BIT	0D0H.3
TR0	BIT	088H.4
RS1	BIT	0D0H.4
TR1	BIT	088H.6
PX0	BIT	0B8H.0
PX1	BIT	0B8H.2
DPH	DATA	083H
DPL	DATA	082H
REN	BIT	098H.4
VGA_CON_PIN	BIT	0A0H.5
RXD	BIT	0B0H.0
TXD	BIT	0B0H.1
PANEL_BKL_PIN	BIT	0A0H.3
F0	BIT	0D0H.5
PANEL_VCC_PIN	BIT	0A0H.2
PSW	DATA	0D0H
?PR?_GoI2CMaster?BUS SEGMENT CODE
?DT?_GoI2CMaster?BUS SEGMENT DATA OVERLAYABLE
?PR?_SendI2CByte?BUS SEGMENT CODE
?PR?_RcvI2CByte?BUS  SEGMENT CODE
?DT?_RcvI2CByte?BUS  SEGMENT DATA OVERLAYABLE
?PR?SendI2CStop?BUS  SEGMENT CODE
?PR?BitDly?BUS       SEGMENT CODE
?DT?BUS              SEGMENT DATA
	EXTRN	CODE (SendByte)
	EXTRN	BIT (BusFault)
	EXTRN	BIT (NoAck)
	EXTRN	BIT (BusBusy)
	PUBLIC	BitCnt
	PUBLIC	BitDly
	PUBLIC	SendI2CStop
	PUBLIC	_RcvI2CByte
	PUBLIC	_SendI2CByte
	PUBLIC	_GoI2CMaster

	RSEG  ?DT?_GoI2CMaster?BUS
?_GoI2CMaster?BYTE:
        adr?040:   DS   1

	RSEG  ?DT?_RcvI2CByte?BUS
?_RcvI2CByte?BYTE:
       bval?243:   DS   1

	RSEG  ?DT?BUS
         BitCnt:   DS   1
; /************************************************
; *                                               *
; * BUS.C:  BUS control routines.                 *
; *                                               *
; *************************************************/
; #include <reg51.h>
; #include <intrins.h>
; #include "mosaic.h"
; #include "BUSIO.h"
; #include "OSD.h"
; #include "global.h"
; 
; 
; 
; 
; 
; /*******************************************************************
; * Send SCL pin high and wait for any clock stretching peripherals  *
; ********************************************************************/
; #if 1
; #define SCLHigh(a) { SCLPin = 1; while(!SCLPin) {}; }
; #define SCLHigh2(a) { SCLPin2 = 1; while(!SCLPin2) {}; }
; #else
; void SCLHigh(void)
; {
;    SCLPin = 1; while(!SCLPin) {};
; }
; void SCLHigh2(void)
; {
;     SCLPin2 = 1; while(!SCLPin2) {};
; }
; #endif
; 
; 
; #if USE_I2CBUS
; /********************************************************
; * Grasp the I2C bus, send slave address and command     *
; *********************************************************/
; void GoI2CMaster(unsigned char adr)

	RSEG  ?PR?_GoI2CMaster?BUS
	USING	0
_GoI2CMaster:
	MOV  	adr?040,R7
			; SOURCE LINE # 39
; {
			; SOURCE LINE # 40
;     //Indicate that I2C frame is in progress.
; 	BusBusy = 1;
			; SOURCE LINE # 42
	SETB 	BusBusy
; 
; 	if (!SCLPin) SCLHigh();
			; SOURCE LINE # 44
	JB   	SCLPin,?C0001
	SETB 	SCLPin
?C0002:
	JNB  	SCLPin,?C0002
?C0001:
; 
;     //Clear error status flags.
;     NoAck = 0; BusFault = 0;
			; SOURCE LINE # 47
	CLR  	NoAck
	CLR  	BusFault
; 
;     if (SCLPin & SDAPin) {
			; SOURCE LINE # 49
	MOV  	C,SDAPin
	ANL  	C,SCLPin
	JNC  	?C0004
;         // begin I2C start.
;         SDAPin = 0; BitDly();
			; SOURCE LINE # 51
	CLR  	SDAPin
	LCALL	BitDly
;         SCLPin = 0; //BitDly();
			; SOURCE LINE # 52
	CLR  	SCLPin
;         _nop_(); _nop_();
			; SOURCE LINE # 53
	NOP  	
	NOP  	
;         // send slave address.
;         SendI2CByte(adr);
			; SOURCE LINE # 55
	MOV  	R7,adr?040
	LCALL	_SendI2CByte
;     } else
			; SOURCE LINE # 56
	RET  	
?C0004:
;         BusFault = 1;
			; SOURCE LINE # 57
	SETB 	BusFault
; }
			; SOURCE LINE # 58
?C0006:
	RET  	
; END OF _GoI2CMaster

; 
; 
; #if 1
; 
; unsigned char data BitCnt;
; void SendByte();
; 
; /*********************************************
; * Send one byte of data to an I2C device     *
; **********************************************/
; void SendI2CByte(unsigned char val)

	RSEG  ?PR?_SendI2CByte?BUS
	USING	0
_SendI2CByte:
;---- Variable 'val?141' assigned to Register 'R7' ----
			; SOURCE LINE # 69
; {
			; SOURCE LINE # 70
; 	ACC = val;
			; SOURCE LINE # 71
	MOV  	A,R7
; 	SendByte();
			; SOURCE LINE # 72
	LCALL	SendByte
; #pragma asm
; 	MOV ACC,#0
	  MOV ACC,#0
; 	
	  
; #pragma	endasm
; }         
			; SOURCE LINE # 77
	RET  	
; END OF _SendI2CByte

; 
; #else
; 
; /*********************************************
; * Send one byte of data to an I2C device     *
; **********************************************/
; void SendI2CByte(unsigned char val)
; {
; 	unsigned char bmsk = 0x80;
; 
;     while (bmsk) {
;         SDAPin = (val & bmsk) ? 0x01 : 0x00;
;         _nop_(); _nop_();
;         SCLHigh(); //BitDly();
;         _nop_(); _nop_();
;         bmsk >>= 1;
;         SCLPin = 0; //BitDly();
;         _nop_(); _nop_();
;     }
; 
;     //Release data line for acknowledge.
;     SDAPin = 1;
;     _nop_(); _nop_();
;     SCLHigh(); //BitDly();
; 	_nop_(); _nop_();
;     //Check for valid acknowledge bit.
;     if (SDAPin) NoAck = 1;
; 	_nop_(); _nop_();
;     SCLPin = 0; //BitDly();
;     _nop_(); _nop_();
; }         
; 
; #endif
; 
; /*********************************************
; * Receive byte of data from an I2C device    *
; **********************************************/
; unsigned char RcvI2CByte(unsigned char cnt)

	RSEG  ?PR?_RcvI2CByte?BUS
	USING	0
_RcvI2CByte:
;---- Variable 'cnt?242' assigned to Register 'R7' ----
			; SOURCE LINE # 115
; {
			; SOURCE LINE # 116
;     unsigned char bval = 0, b;
			; SOURCE LINE # 117
	CLR  	A
	MOV  	bval?243,A
; 
;     for(b=0; b < 8; b++) {
			; SOURCE LINE # 119
;---- Variable 'b?244' assigned to Register 'R6' ----
	MOV  	R6,A
?C0008:
;         SCLHigh(); //BitDly();
			; SOURCE LINE # 120
	SETB 	SCLPin
?C0011:
	JNB  	SCLPin,?C0011
?C0012:
;         _nop_(); _nop_();
			; SOURCE LINE # 121
	NOP  	
	NOP  	
;         bval <<= 1;
			; SOURCE LINE # 122
	MOV  	A,bval?243
	ADD  	A,ACC
	MOV  	bval?243,A
;         bval |= SDAPin;
			; SOURCE LINE # 123
	MOV  	C,SDAPin
	CLR  	A
	RLC  	A
	ORL  	bval?243,A
;         SCLPin = 0;	//BitDly();
			; SOURCE LINE # 124
	CLR  	SCLPin
;         _nop_(); _nop_();
			; SOURCE LINE # 125
	NOP  	
	NOP  	
; 	}
			; SOURCE LINE # 126
	INC  	R6
	CJNE 	R6,#08H,?C0008
?C0009:
; 
;     SDAPin = (cnt==1) ? 1 : 0;
			; SOURCE LINE # 128
	CJNE 	R7,#01H,?C0013
	SETB 	C
	SJMP 	?C0014
?C0013:
	CLR  	C
?C0014:
	MOV  	SDAPin,C
; 	_nop_(); _nop_();
			; SOURCE LINE # 129
	NOP  	
	NOP  	
;     SCLHigh();
			; SOURCE LINE # 130
	SETB 	SCLPin
?C0015:
	JNB  	SCLPin,?C0015
?C0016:
; ////M2
;     BitDly(); BitDly();
			; SOURCE LINE # 132
	LCALL	BitDly
	LCALL	BitDly
; ////M2
; 
;     SCLPin = 0;
			; SOURCE LINE # 135
	CLR  	SCLPin
;     _nop_(); _nop_();
			; SOURCE LINE # 136
	NOP  	
	NOP  	
;     SDAPin = 1;         //Clear acknowledge bit.
			; SOURCE LINE # 137
	SETB 	SDAPin
; ////M2
;     BitDly(); BitDly();
			; SOURCE LINE # 139
	LCALL	BitDly
	LCALL	BitDly
; ////M2
; 
;     return bval;
			; SOURCE LINE # 142
	MOV  	R7,bval?243
; }
			; SOURCE LINE # 143
?C0017:
	RET  	
; END OF _RcvI2CByte

; 
; /*************************************
; * Send I2C STOP, release bus         *
; **************************************/
; void SendI2CStop(void)

	RSEG  ?PR?SendI2CStop?BUS
	USING	0
SendI2CStop:
			; SOURCE LINE # 148
; {
			; SOURCE LINE # 149
;     SDAPin = 0; BitDly();
			; SOURCE LINE # 150
	CLR  	SDAPin
	LCALL	BitDly
;     SCLHigh(); BitDly();
			; SOURCE LINE # 151
	SETB 	SCLPin
?C0018:
	JNB  	SCLPin,?C0018
?C0019:
	LCALL	BitDly
;     SDAPin = 1; //BitDly();
			; SOURCE LINE # 152
	SETB 	SDAPin
; 	_nop_(); _nop_();
			; SOURCE LINE # 153
	NOP  	
	NOP  	
;     BusBusy = 0;
			; SOURCE LINE # 154
	CLR  	BusBusy
; }
			; SOURCE LINE # 155
	RET  	
; END OF SendI2CStop

; #endif //USE_I2CBUS
; 
; 
; #if USE_I2C_2
; 
; /********************************************************
; * Grasp the I2C bus, send slave address and command     *
; *********************************************************/
; void GoI2CMaster2(unsigned char adr)
; {
; 	//Indicate that I2C frame is in progress.
; 	BusBusy = 1;
; 
;     if (!SCLPin2) SCLHigh2();
; 
;     //Clear error status flags.
;     NoAck  = 0; BusFault = 0;
; 
;     if(SCLPin2 & SDAPin2) {
;         // Begin I2C start.
;         SDAPin2 = 0; BitDly();
;         SCLPin2 = 0; //BitDly();
;         //Get slave address.
;         SendI2CByte2(adr);
;     } else
;         BusFault = 1;
; }
; 
; /*********************************************
; * Send one byte of data to an I2C device     *
; **********************************************/
; void SendI2CByte2(unsigned char val)
; {
; 	unsigned char bmsk = 0x80;
; 
;     while (bmsk) {
;         SDAPin2 = (val & bmsk) ? 0x01 : 0x00;
;         SCLHigh2(); //BitDly();
;         bmsk >>= 1;
;         SCLPin2 = 0; //BitDly();
;     }
; 
;     //Release data line for acknowledge.
;     SDAPin2 = 1;
;     SCLHigh2(); //BitDly();
; 
;     //Check for valid acknowledge bit.
;     if (SDAPin2) NoAck = 1;
; 
;     SCLPin2 = 0; //BitDly();
; }         
; 
; /*********************************************
; * Receive byte of data from an I2C device    *
; **********************************************/
; unsigned char RcvI2CByte2(unsigned char cnt)
; {
;     unsigned char bval = 0, b;
; 
;     for(b=0; b < 8; b++) {
;         SCLHigh2(); //BitDly();
;         bval <<= 1;
;         bval |= SDAPin2;
;         SCLPin2 = 0;	//BitDly();
; 	}
; 
;     SDAPin2 = (cnt==1) ? 1 : 0;
; 
;     SCLHigh2(); //BitDly();
;     SCLPin2 = 0;
;     SDAPin2 = 1; //BitDly();   //Clear acknowledge bit.
; 
;     return bval;
; }
; 
; /*************************************
; * Send I2C STOP, release bus         *
; **************************************/
; void SendI2CStop2(void)
; {
; 	SDAPin2 = 0; BitDly();
;     SCLHigh2(); BitDly();
;     SDAPin2 = 1; //BitDly();
; 
;     BusBusy = 0;
; }
; 
; #endif //USE_I2C_2
; 
; 
; #if USE_SPIBUS
; /*********************************************
; * Send one byte of data to an SPI device     *
; **********************************************/
; void SendSPIByte(unsigned char val)
; {
; 	        OutByte = val;
; #pragma asm
;            MOV     BitCnt,#8      ;Set bit count.
;            MOV     A,OutByte			
; 
; SSPIBL:    RLC     A              ;Send one data bit.
;            MOV     SDAPin,C       ;Put data bit on pin.
;            ACALL   SCLHigh        ;Send clock.
;            ACALL   BitDly
;            CLR     SCLPin
;            ACALL   BitDly
;            DJNZ    BitCnt,SSPIBL  ;Repeat until all bits sent.
;            RET
; #pragma endasm
; }
; 
; /*********************************************
; * Receive byte of data from an SPI device    *
; **********************************************/
; unsigned char RcvSPIByte(void)
; {
; #pragma asm
;            MOV     BitCnt,#8      ;Set bit count.
; 
; RSPIBL:    ACALL   SCLHigh        ;Read one data bit.
;            ACALL   BitDly
;            MOV     C,SDAPin       ;Get data bit from pin.
;            RLC     A              ;Rotate bit into result byte.
;            CLR     SCLPin
;            ACALL   BitDly
;            DJNZ    BitCnt,RSPIBL  ;Repeat until all bits received.
; 
;            MOV     InByte,A       ;return received data
; #pragma endasm
; 
;            return(InByte);
; }
; 
; /****************************************************
; * Grasp the SPI bus, send phase bit and command     *
; *****************************************************/
; void SPIStart(unsigned char mode)
; {
; 	        PhaseBit = mode;
; #pragma asm
;            SETB    BusBusy        ;Indicate that SPI frame is in progress.
;            CLR     BusFault       ;
; 
;            JNB     SEPin,SPIFt    ;Check for bus clear.
;            JNB     SCLPin,SPIFt   ;
;            JNB     SDAPin,SPIFt   ;
; 
;            CLR     SEPin          ;Start SPI Bus.
;            NOP                    ;
; 
;            MOV     A,PhaseBit     ;Select process mode
;            CJNE    A,#1,SPIWR     ;
;            SETB    SDAPin         ;Read Mode.
;            SJMP    SPIMODE        ;
; SPIWR:     CLR     SDAPin         ;Write Mode.
; SPIMODE:   ACALL   BitDly         ;
;            CLR     SCLPin         ;Make a SCL pulse for Write mode.
;            ACALL   BitDly         ;
;            ACALL   SCLHigh        ;
;            ACALL   BitDly         ;
;            CLR     SCLPin         ;
;            RET                    ;
; 
; SPIFt:     SETB    BusFault       ;Set fault status
; #pragma endasm
; }
; 
; /****************************************************
; * Release the SPI bus                               *
; *****************************************************/
; void SPIStop(void)
; {
; #pragma asm
;            CLR     BusBusy        ;Indicate that SPI frame is released.
;            SETB    SEPin          ;Stop SPI Bus.
;            SETB    SCLPin         ;Stop SPI Bus.
;            SETB    SDAPin         ;Stop SPI Bus.
;            RET
; #pragma endasm
; }
; #endif
; 
; /***********************************************************
; * delay routine, delay timing may need to change later     *
; ************************************************************/
; #define BITDELAY   (2*CPUCLOCK/12)
; 
; void BitDly(void)

	RSEG  ?PR?BitDly?BUS
	USING	0
BitDly:
			; SOURCE LINE # 344
; {
			; SOURCE LINE # 345
;    int val = BITDELAY;
			; SOURCE LINE # 346
;---- Variable 'val?445' assigned to Register 'R6/R7' ----
	MOV  	R7,#02H
	MOV  	R6,#00H
?C0021:
;   
;    while(val--) {}
			; SOURCE LINE # 348
	MOV  	A,R7
	DEC  	R7
	MOV  	R4,AR6
	JNZ  	?C0024
	DEC  	R6
?C0024:
	ORL  	A,R4
	JNZ  	?C0021
; }
			; SOURCE LINE # 349
?C0023:
	RET  	
; END OF BitDly

	END

⌨️ 快捷键说明

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