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

📄 main.lst

📁 153控制收音5800的源码
💻 LST
📖 第 1 页 / 共 4 页
字号:
    76 001FA 0846 C        		bc		SdaPort,@SDA
    77 001FB 11C7 C        		call		I2cDelay
    78 001FC 0A86 C        		bs		SclPort,@SCL
    79 001FD 11C7 C        		call		I2cDelay
    80 001FE 0A46 C        		bs		SdaPort,@SDA
    81 001FF 11C7 C        		call		I2cDelay
    82 00200 11C7 C        		call		I2cDelay
    83 00201 0886 C        		bc		SclPort,@SCL
    84 00202 11C7 C        		call		I2cDelay
    85 00203 11C7 C        		call		I2cDelay
    86            C        
    87 00204 0012 C        		ret
    88            C        
    89            C        ;===============================================
    90            C        ;	Function:I2cStop()
    91            C        ;===============================================
    92            C        
    93            C        
    94            C        ;===============================================
    95            C        ;	Function:I2cGetAck()(GetAck(Read0),DoAck(Send1))
    96            C        ;===============================================
    97 00205      C        I2cGetAck:
    98            C        		;Set @SDA to input Modual
    99            C        		
   100 00205 0016 C        		ior		SdaPort
   101 00206 0051 C        		mov		IO_buff,A
   102 00207 0A51 C        		bs		IO_buff,@SDA
   103 00208 0411 C        		mov		A,IO_buff
   104 00209 0006 C        		iow		SdaPort
   105            C        
   106 0020A 00D0 C        		CLR		A_buff
   107 0020B 11C7 C        		call		I2cDelay
   108            C        
   109            C        		;@SCL = 1
   110            C        
   111 0020C 0A86 C        		bs		SclPort,@SCL
   112 0020D 11C7 C        		call		I2cDelay
   113            C        		;if(@SDA == 0) A_buff=(1<<ACK);
   114 0020E 0E46 C        		jbs		SdaPort,@SDA
   115 0020F 0A10 C        		bs		A_buff,ACK
   116            C        
   117            C        		;@SCL = 0
   118 00210 0886 C        		bc		SclPort,@SCL
   119 00211 11C7 C        		call		I2cDelay
   120            C        		;Set @SDA output 
   121 00212 0016 C        		ior		SdaPort
   122 00213 0051 C        		mov		IO_buff,A
   123 00214 0851 C        		bc		IO_buff,@SDA
   124 00215 0411 C        		mov		A,IO_buff
   125 00216 0006 C        		iow		SdaPort
   126            C        
   127 00217 0410 C        		mov		A,A_buff
   128 00218 0012 C        		ret
   129            C        
   130            C        
   131            C        
   132            C        ;===============================================
   133            C        ;	Function:I2cDoAck()
   134            C        ;===============================================
   135 00219      C        I2cDoAck:
   136            C        		;@SDA = 0;
   137 00219 0846 C        		bc		SdaPort,@SDA
   138 0021A 11C7 C        		call		I2cDelay
   139 0021B 11C7 C        		call		I2cDelay
   140            C        
   141            C        		;@SCL = 1;
   142 0021C 0A86 C        		bs		SclPort,@SCL
   143 0021D 11C7 C        		call		I2cDelay
   144 0021E 11C7 C        		call		I2cDelay
   145 0021F 0886 C        		bc		SclPort,@SCL
   146 00220 11C7 C        		call		I2cDelay
   147 00221 11C7 C        		call		I2cDelay
   148 00222 0A46 C        		bs		SclPort,@SDA
   149 00223 11C7 C        		call		I2cDelay
   150 00224 11C7 C        		call		I2cDelay
   151 00225 0012 C        		ret
   152            C        
   153            C        
   154            C        
   155            C        ;===============================================
   156            C        ;	Function:I2cDoAck()
   157            C        ;===============================================
   158 00226      C        I2cUnDoAck:
   159            C        		;@SDA = 0;
   160 00226 0A46 C        		bs		SdaPort,@SDA
   161 00227 11C7 C        		call		I2cDelay
   162 00228 0A86 C        		bs		SclPort,@SCL
   163 00229 11C7 C        		call		I2cDelay
   164 0022A 11C7 C        		call		I2cDelay
   165 0022B 0886 C        		bc		SclPort,@SCL
   166 0022C 11C7 C        		call		I2cDelay
   167 0022D 11C7 C        		call		I2cDelay
   168            C        		;@SCL = 0;
   169 0022E 0846 C        		bc		SclPort,@SDA
   170 0022F 11C7 C        		call		I2cDelay
   171 00230 0012 C        		ret
   172            C        
   173            C        ;===============================================
   174            C        ;	Function:I2cSendByte(A=Data)
   175            C        ;===============================================
   176 00231      C        I2cSendByte:
   177 00231 0050 C        		mov		A_buff,A
   178 00232 1808 C        		mov		A,@8
   179 00233 0055 C        		mov		Count,A
   180            C        
   181 00234      C        I2cLoopSend:
   182            C        		;if(A_buff & 0x80) Send1 else Send0;
   183 00234 0FD0 C        		jbs		A_buff,7
   184 00235 1638 C        		jmp		I2cSend0
   185            C        
   186 00236      C        I2cSend1:
   187 00236 0A46 C        		bs		SdaPort,@SDA
   188 00237 1639 C        		jmp 		I2cSendBegin
   189            C        
   190 00238      C        I2cSend0:
   191 00238 0846 C        		bc		SdaPort,@SDA
   192            C        
   193 00239      C        I2cSendBegin:
   194 00239 11C7 C        		call		I2cDelay
   195            C        
   196            C        		;@SCL = 1;
   197 0023A 0A86 C        		bs		SclPort,@SCL
   198 0023B 11C7 C        		call		I2cDelay
   199 0023C 11C7 C        		call		I2cDelay
   200            C        
   201            C        		;@SCL = 0;
   202 0023D 0886 C        		bc		SclPort,@SCL
   203 0023E 11C7 C        		call		I2cDelay
   204            C        
   205 0023F      C        I2cSendNext:
   206            C        		;A_buff <<= 1;
   207 0023F 06D0 C        		rlc		A_buff
   208 00240 05D5 C        		djz		Count
   209 00241 1634 C        		jmp		I2cLoopSend
   210            C        
   211 00242 0012 C        		ret
   212            C        
   213            C        ;===============================================
   214            C        ;	Function:I2cSendVByte(A=Data)
   215            C        ;===============================================
   216 00243      C        I2cSendVByte:
   217 00243 0050 C        		mov		A_buff,A
   218 00244 1808 C        		mov		A,@8
   219 00245 0055 C        		mov		Count,A
   220            C        
   221 00246      C        I2cLoopSendV:
   222            C        		;if(A_buff & 0x01) Send1 else Send 0;
   223 00246 0E10 C        		jbs		A_buff,0
   224 00247 164A C        		jmp		I2cSendV0
   225            C        
   226 00248      C        I2cSendV1:
   227            C        		;@SDA = 1;
   228 00248 0A46 C        		bs		SdaPort,@SDA
   229 00249 164B C        		jmp 		I2cSendVBegin
   230            C        
   231 0024A      C        I2cSendV0:
   232            C        		;@SDA = 0
   233 0024A 0846 C        		bc		SdaPort,@SDA
   234            C        
   235 0024B      C        I2cSendVBegin:
   236 0024B 11C7 C        		call		I2cDelay
   237            C        		
   238            C        		;@SCL = 1
   239 0024C 0A86 C        		bs		SclPort,@SCL
   240 0024D 11C7 C        		call		I2cDelay
   241 0024E 11C7 C        		call		I2cDelay
   242            C        
   243            C        		;@SCL = 0;
   244 0024F 0886 C        		bc		SclPort,@SCL
   245 00250 11C7 C        		call		I2cDelay
   246            C        
   247            C        		;A_buff >>= 1;
   248 00251 0650 C        		rrc		A_buff
   249 00252 05D5 C        		djz		Count
   250 00253 1646 C        		jmp		I2cLoopSendV
   251 00254 0012 C        		ret
   252            C        
   253            C        ;===============================================
   254            C        ;	Function:I2cReadByte()= A
   255            C        ;===============================================	
   256 00255      C        I2cReadByte:
   257            C        		;Set Input @SDA
   258 00255 0016 C        		ior		SdaPort
   259 00256 0051 C        		mov		IO_buff,A
   260 00257 0A51 C        		bs		IO_buff,@SDA
   261 00258 0411 C        		mov		A,IO_buff
   262 00259 0006 C        		iow		SdaPort
   263            C        
   264 0025A 00D0 C        		CLR		A_buff
   265            C        
   266 0025B 1808 C        		mov		A,@8
   267 0025C 0055 C        		mov		Count,A
   268 0025D      C        I2cLoopRead:
   269            C        		;@SDA = 1;
   270 0025D 0A46 C        		bs		SdaPort,@SDA
   271 0025E 11C7 C        		call		I2cDelay
   272            C        
   273            C        		;@SCL = 1
   274 0025F 0A86 C        		bs		SclPort,@SCL
   275 00260 11C7 C        		call		I2cDelay
   276 00261 11C7 C        		call		I2cDelay
   277            C        
   278            C        		;A_buff <<= 1;
   279 00262 0A03 C        		bs		FLAG,C
   280 00263 06D0 C        		rlc		A_buff
   281            C        
   282            C        		;if(@SDA)
   283 00264 0E46 C        		jbs		SdaPort,@SDA
   284 00265 0810 C        		bc		A_buff,0
   285 00266 11C7 C        		call		I2cDelay
   286            C        
   287            C        		;@SCL = 0;
   288 00267 0886 C        		bc		SclPort,@SCL
   289 00268 11C7 C        		call		I2cDelay
   290            C        
   291 00269 05D5 C        		djz		Count
   292 0026A 165D C        		jmp		I2cLoopRead
   293            C        
   294            C        		;Set @SDA output
   295 0026B 0016 C        		ior		SdaPort
   296 0026C 0051 C        		mov		IO_buff,A
   297 0026D 0851 C        		bc		IO_buff,@SDA
   298 0026E 0411 C        		mov		A,IO_buff
   299 0026F 0006 C        		iow		SdaPort
   300            C        		
   301 00270 0410 C        		mov		A,A_buff
   302            C        
   303 00271 0012 C        		ret
   304            C        
   305            C        ;**********************************************
   306            C        ;*	下面是标准协议,可以用于标准I2C传输
   307            C        ;**********************************************
   308            C        ;==============================================
   309            C        ;	Function:I2cRead(I2cDevId,I2cAddr)
   310            C        ;===============================================
   311 00272      C        I2cRead:
   312 00272 11F0 C         	call	I2cStart
   313            C        
   314            C        	; Device Id:I2cAddr
   315 00273 1821 C        	mov		A,@0x21;I2cDevId
   316 00274 1231 C        	call 		I2cSendByte
   317 00275 1205 C        	call		I2cGetAck
   318 00276 0E10 C        	jbs		A_buff,ACK
   319 00277 1685 C        	jmp		I2cReadDone
   320            C        
   321            C        	; Read Data:0AH
   322 00278 1255 C        	call 		I2cReadByte
   323 00279 005B C        	mov		channel_cnt,a
   324 0027A 1219 C        	call		I2cDoAck
   325            C        	
   326            C        
   327            C        	; Read Data:00AL
   328 0027B 1255 C        	call		I2cReadByte
   329 0027C 005B C        	mov		channel_cnt,A
   330 0027D 1219 C        	call		I2cDoAck
   331            C        
   332            C        	; Read Data:0BH
   333 0027E 1255 C        	call 		I2cReadByte
   334 0027F 005A C        	mov		RSSI,a
   335 00280 1219 C        	call		I2cDoAck
   336            C        	
   337            C        
   338            C        	; Read Data:0BL
   339 00281 1255 C        	call		I2cReadByte
   340            C        	;mov		channel_cnt,A
   341            C        		
   342 00282 1226 C        	call		I2cUnDoAck
   343            C        	; Set Ok flag!
   344 00283 1801 C        	mov		A,@1
   345 00284 0000 C        	NOP
   346            C        
   347 00285      C        I2cReadDone:
   348            C        	;call		I2cStop
   349 00285 11FA C        	call		I2cStop
   350 00286 0410 C        	mov		A,A_buff
   351 00287 0012 C        	ret
   352            C        	
   353            C        ;===============================================
   354            C        ;	Function:I2cWrite(I2cDevId,I2cAddr,I2cData)
   355            C        ;===============================================
   356            C        ;I2cWrite:
   357            C        ; 	call		I2cStart
   358            C        
   359            C        	; Device Id : (A = I2cDevId)
   360            C        ;	mov		A,I2cDevId
   361            C        ;	call 		I2cSendByte
   362            C        ;	call		I2cGetAck
   363            C        ;	jbs		A_buff,ACK
   364            C        ;	jmp		I2cWriteDone
   365            C        ;
   366            C        	; Sub Address : (A = I2cAddr)
   367            C        ;	mov		A,I2cAddr
   368            C        ;	call 		I2cSendByte
   369            C        ;	call		I2cGetAck
   370            C        ;	jbs		A_buff,ACK
   371            C        ;	jmp		I2cWriteDone
   372            C        
   373            C        	; Write Data : (A = I2cData)
   374            C        ;	mov		A,I2cData
   375            C        ;	call 		I2cSendByte
   376            C        ;	call		I2cGetAck
   377            C        ;	jbs		A_buff,ACK
   378            C        ;	jmp		I2cWriteDone
   379            C        
   380            C        	; return true!
   381            C        ;	mov		A,@1
   382            C        ;	NOP
   383            C        ;
   384            C        ;I2cWriteDone:
   385            C        ;	call		I2cStop
   386            C        ;	mov		A,A_buff
   387            C        ;
   388            C        ;	ret
   389            C        
   390            C        
   391            C        
   392            C        
   393            C        ;===============================================
   394            C        ;	END OF I2C
   395            C        ;===============================================
   396            C        
   323                     include		"5800.asm"
     1            C        include "5800.inc"
     1            C        

⌨️ 快捷键说明

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