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

📄 i2c.lst

📁 根据I2C协议传输的源代码
💻 LST
📖 第 1 页 / 共 3 页
字号:
 141  0034              L62:
 141  0034              L59:

; 138: 						for(j=0; j<255; j++)	 //收到ACK的上升沿信号,等待Slave放弃总线
 138  0034  1480     R  INC CR6
 138  0035              L61:
 138  0035  0700     R  MOV A,CR6
 138  0036  0AFF        SUB A,0ffh
 138  0037  380A        SNZ [0ah].0
 138  0038  2800     R  JMP L58

; 143: 						ucWatch2 = 0x01; return ERROR;
 143  0039  0F01        MOV A,01h
 143  003A  0080     R  MOV _ucWatch2,A
 143  003B  1F05        CLR [05H]
 143  003C  2800     R  JMP L43
 143  003D              L56:

; 147: 						ucWatch2 = 0x02; return ERROR;
 147  003D  0F02        MOV A,02h
 147  003E  0080     R  MOV _ucWatch2,A
 147  003F  1F05        CLR [05H]
 147  0040  2800     R  JMP L43
 147  0041              L52:

; 150: 		I2C.uSend.bits.bPrevious = I2C.uSend.bits.bCurrent;			
 150  0041  0700     R  MOV A,_I2C[1]
 150  0042  0EFD        AND A,0fdh
 150  0043  0080     R  MOV b0_6,A
 150  0044  0700     R  MOV A,_I2C[1]
 150  0045  0E01        AND A,01h
 150  0046  0080     R  MOV b1_6,A
 150  0047  0700     R  MOV A,b1_6
 150  0048  0E01        AND A,01h
 150  0049  0080     R  MOV b1_6,A
 150  004A  340A        CLR [0AH].0
 150  004B  1A80     R  RLC b1_6
 150  004C  0F02        MOV A,02h
 150  004D  0680     R  ANDM A,b1_6
 150  004E  0700     R  MOV A,b0_6
文件:I2C.C        盛群编译器版本 2.86 页次8

 150  004F  0500     R  OR A,b1_6
文件:I2C.c        盛群编译器版本 2.86 页次9 

 150  0050  0080     R  MOV _I2C[1],A
 150  0051              L48:

; 131: 	for(i=0; i<255; i++)							//接收ACK信号
 131  0051  1480     R  INC CR7
 131  0052              L50:
 131  0052  0700     R  MOV A,CR7
 131  0053  0AFF        SUB A,0ffh
 131  0054  380A        SNZ [0ah].0
 131  0055  2800     R  JMP L47

; 152: 	ucWatch2 = 0x03; return 	ERROR;
 152  0056  0F03        MOV A,03h
 152  0057  0080     R  MOV _ucWatch2,A
 152  0058  1F05        CLR [05H]
 152  0059              L43:
 152  0059  0003        RET
 152  0000  00          LOCAL b0_6 DB ?
 152  0001  00          LOCAL b1_6 DB ?

; 126: 	unsigned char i, j;			
 126  0002  00          LOCAL CR6 DB ? ; j
 126  0003  00          LOCAL CR7 DB ? ; i
 126  005A              _SendByte ENDP

; 156: {
 156  0000              @ReceiveByte .SECTION 'CODE'
 156  0000              PUBLIC _ReceiveByte
 156  0000              _ReceiveByte PROC

; 160: 	I2C.uSend.ucValue = 0x80;						//发送准备信息
 160  0000  0F80        MOV A,080h
 160  0001  0080     R  MOV _I2C[1],A

; 161: 	I2C.ucPulseNumber = 1;
 161  0002  0F01        MOV A,01h
 161  0003  0080     R  MOV _I2C[4],A

; 162: 	PulseOut();	
 162  0004  2000     R  CALL _PulseOut

; 163: 	I2C.uReceive.ucValue = 0;
 163  0005  1F00     R  CLR _I2C[2]

; 165: 	for(i=0; i<8; i++)
 165  0006  1F00     R  CLR CR12
 165  0007  2800     R  JMP L73
 165  0008              L70:

; 167: 		I2C.uSend.bits.bPrevious = _SCL;
 167  0008  0700     R  MOV A,_I2C[1]
 167  0009  0EFD        AND A,0fdh
 167  000A  0080     R  MOV b0_7,A
 167  000B  1F00     R  CLR b1_7
 167  000C  3F92        SZ [012H].7
 167  000D  3000     R  SET b1_7.0
 167  000E  0F01        MOV A,01h
 167  000F  0680     R  ANDM A,b1_7
 167  0010  340A        CLR [0AH].0
 167  0011  1A80     R  RLC b1_7
文件:I2C.c        盛群编译器版本 2.86 页次10 

文件:I2C.C        盛群编译器版本 2.86 页次9

 167  0012  0F02        MOV A,02h
 167  0013  0680     R  ANDM A,b1_7
 167  0014  0700     R  MOV A,b0_7
 167  0015  0500     R  OR A,b1_7
 167  0016  0080     R  MOV _I2C[1],A

; 168: 		I2C.uReceive.ucValue <<= 1;					//接收下一个BIT
 168  0017  340A        CLR [0AH].0
 168  0018  1A80     R  RLC _I2C[2]

; 169: 		for(j=0; j<0xFF; j++)
 169  0019  1F00     R  CLR CR11
 169  001A  2800     R  JMP L79
 169  001B              L76:

; 171: 			I2C.uSend.bits.bCurrent = _SCL;
 171  001B  0700     R  MOV A,_I2C[1]
 171  001C  0EFE        AND A,0feh
 171  001D  0080     R  MOV b0_7,A
 171  001E  1F00     R  CLR b1_7
 171  001F  3F92        SZ [012H].7
 171  0020  3000     R  SET b1_7.0
 171  0021  0700     R  MOV A,b1_7
 171  0022  0E01        AND A,01h
 171  0023  0080     R  MOV b1_7,A
 171  0024  0700     R  MOV A,b1_7
 171  0025  0E01        AND A,01h
 171  0026  0080     R  MOV b1_7,A
 171  0027  0700     R  MOV A,b0_7
 171  0028  0500     R  OR A,b1_7
 171  0029  0080     R  MOV _I2C[1],A

; 172: 			if (I2C.uSend.bits.bCurrent && !I2C.uSend.bits.bPrevious)		//读取SCL上升沿时,SDA的值
 172  002A  3800     R  SNZ _I2C[1].0
 172  002B  2800     R  JMP L81
 172  002C  3C00     R  SZ _I2C[1].1
 172  002D  2800     R  JMP L81

; 174: 					I2C.uReceive.bits.bData = _SDA;
 174  002E  0700     R  MOV A,_I2C[2]
 174  002F  0EFE        AND A,0feh
 174  0030  0080     R  MOV b0_7,A
 174  0031  1F00     R  CLR b1_7
 174  0032  3F12        SZ [012H].6
 174  0033  3000     R  SET b1_7.0
 174  0034  0700     R  MOV A,b1_7
 174  0035  0E01        AND A,01h
 174  0036  0080     R  MOV b1_7,A
 174  0037  0700     R  MOV A,b1_7
 174  0038  0E01        AND A,01h
 174  0039  0080     R  MOV b1_7,A
 174  003A  0700     R  MOV A,b0_7
 174  003B  0500     R  OR A,b1_7
 174  003C  0080     R  MOV _I2C[2],A

; 175: 					break;
 175  003D  2800     R  JMP L78
 175  003E              L81:
文件:I2C.c        盛群编译器版本 2.86 页次11 


; 177: 			I2C.uSend.bits.bPrevious = I2C.uSend.bits.bCurrent;			
 177  003E  0700     R  MOV A,_I2C[1]
 177  003F  0EFD        AND A,0fdh
 177  0040  0080     R  MOV b0_7,A
文件:I2C.C        盛群编译器版本 2.86 页次10

 177  0041  0700     R  MOV A,_I2C[1]
 177  0042  0E01        AND A,01h
 177  0043  0080     R  MOV b1_7,A
 177  0044  0700     R  MOV A,b1_7
 177  0045  0E01        AND A,01h
 177  0046  0080     R  MOV b1_7,A
 177  0047  340A        CLR [0AH].0
 177  0048  1A80     R  RLC b1_7
 177  0049  0F02        MOV A,02h
 177  004A  0680     R  ANDM A,b1_7
 177  004B  0700     R  MOV A,b0_7
 177  004C  0500     R  OR A,b1_7
 177  004D  0080     R  MOV _I2C[1],A
 177  004E              L77:

; 169: 		for(j=0; j<0xFF; j++)
 169  004E  1480     R  INC CR11
 169  004F              L79:
 169  004F  0700     R  MOV A,CR11
 169  0050  0AFF        SUB A,0ffh
 169  0051  380A        SNZ [0ah].0
 169  0052  2800     R  JMP L76
 169  0053              L78:

; 179: 		if (j == 0xFF)
 179  0053  0700     R  MOV A,CR11
 179  0054  0CFF        XOR A,0ffh
 179  0055  390A        SNZ [0ah].2
 179  0056  2800     R  JMP L88

; 180: 			return ERROR;		
 180  0057  1F05        CLR [05H]
 180  0058  2800     R  JMP L66
 180  0059              L88:
 180  0059              L71:

; 165: 	for(i=0; i<8; i++)
 165  0059  1480     R  INC CR12
 165  005A              L73:
 165  005A  0700     R  MOV A,CR12
 165  005B  0A08        SUB A,08h
 165  005C  380A        SNZ [0ah].0
 165  005D  2800     R  JMP L70

; 183: 	I2C.uSend.bits.bPrevious = _SCL;				//等待结束信号
 183  005E  0700     R  MOV A,_I2C[1]
 183  005F  0EFD        AND A,0fdh
 183  0060  0080     R  MOV b0_7,A
 183  0061  1F00     R  CLR b1_7
 183  0062  3F92        SZ [012H].7
 183  0063  3000     R  SET b1_7.0
 183  0064  0F01        MOV A,01h
 183  0065  0680     R  ANDM A,b1_7
文件:I2C.c        盛群编译器版本 2.86 页次12 

 183  0066  340A        CLR [0AH].0
 183  0067  1A80     R  RLC b1_7
 183  0068  0F02        MOV A,02h
 183  0069  0680     R  ANDM A,b1_7
 183  006A  0700     R  MOV A,b0_7
 183  006B  0500     R  OR A,b1_7
 183  006C  0080     R  MOV _I2C[1],A
文件:I2C.C        盛群编译器版本 2.86 页次11


; 184: 	for(i=0; i<0xFF; i++)
 184  006D  1F00     R  CLR CR12
 184  006E  2800     R  JMP L94
 184  006F              L91:

; 186: 			I2C.uSend.bits.bCurrent = _SCL;
 186  006F  0700     R  MOV A,_I2C[1]
 186  0070  0EFE        AND A,0feh
 186  0071  0080     R  MOV b0_7,A
 186  0072  1F00     R  CLR b1_7
 186  0073  3F92        SZ [012H].7
 186  0074  3000     R  SET b1_7.0
 186  0075  0700     R  MOV A,b1_7
 186  0076  0E01        AND A,01h
 186  0077  0080     R  MOV b1_7,A
 186  0078  0700     R  MOV A,b1_7
 186  0079  0E01        AND A,01h
 186  007A  0080     R  MOV b1_7,A
 186  007B  0700     R  MOV A,b0_7
 186  007C  0500     R  OR A,b1_7
 186  007D  0080     R  MOV _I2C[1],A

; 187: 			if (I2C.uSend.bits.bCurrent && !I2C.uSend.bits.bPrevious)		//读取SCL上升沿时,SDA的值
 187  007E  3800     R  SNZ _I2C[1].0
 187  007F  2800     R  JMP L96
 187  0080  3C00     R  SZ _I2C[1].1
 187  0081  2800     R  JMP L96

; 189: 					if (_SDA == LOW)
 189  0082  3F12        SZ [012H].6
 189  0083  2800     R  JMP L93

; 190: 						return ERROR;
 190  0084  1F05        CLR [05H]
 190  0085  2800     R  JMP L66
 190  0086              L96:

; 194: 			I2C.uSend.bits.bPrevious = I2C.uSend.bits.bCurrent;
 194  0086  0700     R  MOV A,_I2C[1]
 194  0087  0EFD        AND A,0fdh
 194  0088  0080     R  MOV b0_7,A
 194  0089  0700     R  MOV A,_I2C[1]
 194  008A  0E01        AND A,01h
 194  008B  0080     R  MOV b1_7,A
 194  008C  0700     R  MOV A,b1_7
 194  008D  0E01        AND A,01h
 194  008E  0080     R  MOV b1_7,A
 194  008F  340A        CLR [0AH].0
 194  0090  1A80     R  RLC b1_7
 194  0091  0F02        MOV A,02h
文件:I2C.c        盛群编译器版本 2.86 页次13 

 194  0092  0680     R  ANDM A,b1_7
 194  0093  0700     R  MOV A,b0_7
 194  0094  0500     R  OR A,b1_7
 194  0095  0080     R  MOV _I2C[1],A
 194  0096              L92:

; 184: 	for(i=0; i<0xFF; i++)
 184  0096  1480     R  INC CR12
 184  0097              L94:
文件:I2C.C        盛群编译器版本 2.86 页次12

 184  0097  0700     R  MOV A,CR12
 184  0098  0AFF        SUB A,0ffh
 184  0099  380A        SNZ [0ah].0
 184  009A  2800     R  JMP L91
 184  009B              L93:

; 196: 	if (i == 0xFF)
 196  009B  0700     R  MOV A,CR12
 196  009C  0CFF        XOR A,0ffh
 196  009D  390A        SNZ [0ah].2
 196  009E  2800     R  JMP L104

; 197: 		return ERROR;
 197  009F  1F05        CLR [05H]
 197  00A0  2800     R  JMP L66
 197  00A1              L104:

; 199: 	I2C.ucPulseNumber = 1;							//发送ACK信号
 199  00A1  0F01        MOV A,01h
 199  00A2  0080     R  MOV _I2C[4],A

; 200: 	I2C.uSend.ucValue = 0;
 200  00A3  1F00     R  CLR _I2C[1]

; 201: 	PulseOut();
 201  00A4  2000     R  CALL _PulseOut

; 203: 	I2C.uMode.bits.bSDA = INPUT;				//放弃I2C的发送权力
 203  00A5  3000     R  SET _I2C[3].6

; 204: 	_I2CPort = I2C.uMode.ucValue;
 204  00A6  0700     R  MOV A,_I2C[3]
 204  00A7  0093        MOV __pac,A

; 205: 	I2C.uMode.bits.bSCL = INPUT;
 205  00A8  3000     R  SET _I2C[3].7

; 206: 	_I2CPort = I2C.uMode.ucValue;
 206  00A9  0700     R  MOV A,_I2C[3]
 206  00AA  0093        MOV __pac,A

; 207: 	return OK;
 207  00AB  1F05        CLR [05H]
 207  00AC  3005        SET [05H].0
 207  00AD              L66:
 207  00AD  0003        RET
 207  0000  00          LOCAL b0_7 DB ?
 207  0001  00          LOCAL b1_7 DB ?

; 158: 	unsigned char j;	
文件:I2C.c        盛群编译器版本 2.86 页次14 

 158  0002  00          LOCAL CR11 DB ? ; j

; 157: 	unsigned char i;
 157  0003  00          LOCAL CR12 DB ? ; i
 157  00AE              _ReceiveByte ENDP

; 211: {
 211  0000              @Send .SECTION 'CODE'
 211  0000              PUBLIC _Send
 211  0000              _Send PROC

; 213: 	if (SendStart())
 213  0000  2000     R  CALL _SendStart
 213  0001  0080     R  MOV b0_8,A
 213  0002  3800     R  SNZ b0_8.0
 213  0003  2800     R  JMP L113

; 215: 			I2C.uSend.ucValue = I2C.ucID << 4;
 215  0004  1100     R  SWAPA _I2C[5]
 215  0005  0EF0        AND A,0F0H
文件:I2C.C        盛群编译器版本 2.86 页次13

 215  0006  0080     R  MOV _I2C[1],A

; 216: 			I2C.uSend.ucValue |= I2C.ucCommand;
 216  0007  0700     R  MOV A,_I2C[6]
 216  0008  0580     R  ORM A,_I2C[1]

; 217: 			if (SendByte())
 217  0009  2000     R  CALL _SendByte
 217  000A  0080     R  MOV b0_8,A
 217  000B  3800     R  SNZ b0_8.0
 217  000C  2800     R  JMP L119

; 219: 					switch(I2C.ucCommand)
 219  000D  0700     R  MOV A,_I2C[6]
 219  000E  0080     R  MOV b0_8,A
 219  000F  0700     R  MOV A,b0_8
 219  0010  0C01        XOR A,01h
 219  0011  3D0A        SZ [0ah].2
 219  0012  2800     R  JMP L124
 219  0013  0700     R  MOV A,b0_8
 219  0014  0C03        XOR A,03h
 219  0015  3D0A        SZ [0ah].2
 219  0016  2800     R  JMP L134
 219  0017  2800     R  JMP L121
 219  0018              L124:

; 222: 							for(i=0; i<I2C.ucDataNumber; i++)
 222  0018  1F00     R  CLR CR20
 222  0019  2800     R  JMP L128
 222  001A              L125:

; 224: 								I2C.uSend.ucValue = I2C.ucData[i];
 224  001A  0700     R  MOV A,CR20
 224  001B  0B00     R  ADD A,OFFSET _I2C[8]
 224  001C  0080     R  MOV b0_8,A
 224  001D  0700     R  MOV A,b0_8
 224  001E  0081        MOV [01H],A
 224  001F  0700        MOV A,[00H]
文件:I2C.c        盛群编译器版本 2.86 页次15 

 224  0020  0080     R  MOV b0_8,A
 224  0021  0700     R  MOV A,b0_8
 224  0022  0080     R  MOV _I2C[1],A

; 225: 								if (!SendByte())
 225  0023  2000     R  CALL _SendByte
 225  0024  0080     R  MOV b0_8,A
 225  0025  3C00     R  SZ b0_8.0
 225  0026  2800     R  JMP L132

; 226: 									{ucWatch = i;break;}
 226  0027  0700     R  MOV A,CR20
 226  0028  0080     R  MOV _ucWatch,A
 226  0029  2800     R  JMP L127
 226  002A              L132:
 226  002A              L126:

; 222: 							for(i=0; i<I2C.ucDataNumber; i++)
 222  002A  1480     R  INC CR20
 222  002B              L128:
 222  002B  0700     R  MOV A,CR20
文件:I2C.C        盛群编译器版本 2.86 页次14

 222  002C  0200     R  SUB A,_I2C[7]
 222  002D  380A        SNZ [0ah].0
 222  002E  2800     R  JMP L125
 222  002F              L127:

; 228: 							return OK;
 228  002F  1F05        CLR [05H]
 228  0030  3005        SET [05H].0
 228  0031  2800     R  JMP L112
 228  0032              L134:

; 231: 							for(i=0; i<I2C.ucDataNumber; i++)
 231  0032  1F00     R  CLR CR20

⌨️ 快捷键说明

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