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

📄 func.lst

📁 HT单片机模拟I2C通讯
💻 LST
📖 第 1 页 / 共 2 页
字号:
; 170: {
 170  0000              @I2C_Ack .SECTION 'CODE'
 170  0000              PUBLIC _I2C_Ack
 170  0000              _I2C_Ack PROC

; 172: 	SCL_OUT();								/*设置端口为输出*/
 172  0000  3595        CLR __pbc.3

; 173: 	SDA_OUT();
 173  0001  3419        CLR __pdc.0

; 174: 	I2C_SCL = 1;
 174  0002  3194        SET [014H].3

; 175: 	I2C_SDA = 1;
 175  0003  3018        SET [018H].0

; 176: 	SDA_IN();
 176  0004  3019        SET __pdc.0
文件:FUNC.C       盛群编译器版本 2.86 页次6


; 177: 	_delay(DLY_TIME);
 177  0005  0F01        MOV A,01H
 177  0006  2000     E  CALL __DELAYX2

; 178: 	dat = I2C_SDA;
 178  0007  3400     R  CLR CR8
 178  0008  3C18        SZ [018H].0
 178  0009  3000     R  SET CR8

; 179: 	I2C_SCL = 0;
 179  000A  3594        CLR [014H].3
文件:FUNC.c       盛群编译器版本 2.86 页次7 


; 180: 	_delay(DLY_TIME);
 180  000B  0F01        MOV A,01H
 180  000C  2000     E  CALL __DELAYX2

; 181: 	return dat;
 181  000D  1F00     R  CLR b0_7
 181  000E  3C00     R  SZ CR8
 181  000F  3000     R  SET b0_7.0
 181  0010  0700     R  MOV A,b0_7
 181  0011              L23:
 181  0011  0003        RET
 181  0000  00          LOCAL b0_7 DB ?

; 171: 	bit dat;
 171  0001  00          LOCAL CR8 DBIT ; dat
 171  0012              _I2C_Ack ENDP

; 195: {
 195  0000              @I2C_Write_N .SECTION 'CODE'
 195  0000              PUBLIC _I2C_Write_N
 195  0000              _I2C_Write_N PROC

; 194: void I2C_Write_N(uint8 N,uint8 addr,uint8 data[])
 194  0000              PUBLIC I2C_Write_N0
 194  0000  00          LOCAL I2C_Write_N0 DB ? ; N
 194  0000              PUBLIC I2C_Write_N1
 194  0001  00          LOCAL I2C_Write_N1 DB ? ; addr
 194  0000              PUBLIC I2C_Write_N2
 194  0002  00          LOCAL I2C_Write_N2 DB ? ; data

; 198: 	for(i=0;i<N;i++)
 198  0000  1F00     R  CLR CR9
 198  0001  2800     R  JMP L28
 198  0002              L25:

; 200: 		I2C_Start();
 200  0002  2000     R  CALL _I2C_Start

; 201:     	I2C_Write_Byte(0xa0);               /*写控制字*/
 201  0003  0FA0        MOV A,0a0h
 201  0004  0080     R  MOV I2C_Write_Byte0,A
 201  0005  2000     R  CALL _I2C_Write_Byte

; 202:     	ack = I2C_Ack();                    /*ACK*/
 202  0006  2000     R  CALL _I2C_Ack
 202  0007  0080     R  MOV b0_8,A
 202  0008  0700     R  MOV A,b0_8
 202  0009  1F00     R  CLR b0_8
 202  000A  1085        SZ [05H]
文件:FUNC.C       盛群编译器版本 2.86 页次7

 202  000B  3000     R  SET b0_8.0
 202  000C  3400     R  CLR CR10
 202  000D  1080     R  SZ b0_8
 202  000E  3000     R  SET CR10

; 203:     	if(!ack)
 203  000F  3C00     R  SZ CR10
 203  0010  2800     R  JMP L29
文件:FUNC.c       盛群编译器版本 2.86 页次8 


; 205:     	 	I2C_Write_Byte(addr+i);			/*写地址*/
 205  0011  0700     R  MOV A,I2C_Write_N1
 205  0012  0300     R  ADD A,CR9
 205  0013  0080     R  MOV b0_8,A
 205  0014  0700     R  MOV A,b0_8
 205  0015  0080     R  MOV I2C_Write_Byte0,A
 205  0016  2000     R  CALL _I2C_Write_Byte

; 206:     	    ack = I2C_Ack();                /*ACK*/
 206  0017  2000     R  CALL _I2C_Ack
 206  0018  0080     R  MOV b0_8,A
 206  0019  0700     R  MOV A,b0_8
 206  001A  1F00     R  CLR b0_8
 206  001B  1085        SZ [05H]
 206  001C  3000     R  SET b0_8.0
 206  001D  3400     R  CLR CR10
 206  001E  1080     R  SZ b0_8
 206  001F  3000     R  SET CR10

; 207:         	if(!ack)
 207  0020  3C00     R  SZ CR10
 207  0021  2800     R  JMP L31

; 209:         		I2C_Write_Byte(data[i]);    /*写数据*/
 209  0022  0700     R  MOV A,I2C_Write_N2
 209  0023  0080     R  MOV b0_8,A
 209  0024  0700     R  MOV A,CR9
 209  0025  0300     R  ADD A,b0_8
 209  0026  0080     R  MOV b0_8,A
 209  0027  0700     R  MOV A,b0_8
 209  0028  0081        MOV [01H],A
 209  0029  0700        MOV A,[00H]
 209  002A  0080     R  MOV b0_8,A
 209  002B  0700     R  MOV A,b0_8
 209  002C  0080     R  MOV I2C_Write_Byte0,A
 209  002D  2000     R  CALL _I2C_Write_Byte

; 210:         		ack = I2C_Ack();            /*ACK*/
 210  002E  2000     R  CALL _I2C_Ack
 210  002F  0080     R  MOV b0_8,A
 210  0030  0700     R  MOV A,b0_8
 210  0031  1F00     R  CLR b0_8
 210  0032  1085        SZ [05H]
 210  0033  3000     R  SET b0_8.0
 210  0034  3400     R  CLR CR10
 210  0035  1080     R  SZ b0_8
 210  0036  3000     R  SET CR10

; 211:         		I2C_Stop();
 211  0037  2000     R  CALL _I2C_Stop

; 212:         	}
 212  0038  2800     R  JMP L30
 212  0039              L31:

; 215: 				i -= 1;						/*应答错误,重新写如数据*/
文件:FUNC.C       盛群编译器版本 2.86 页次8

 215  0039  1580     R  DEC CR9
文件:FUNC.c       盛群编译器版本 2.86 页次9 


; 217: 		}
 217  003A  2800     R  JMP L30
 217  003B              L29:

; 220: 			i -= 1;							/*应答错误,重新写如数据*/
 220  003B  1580     R  DEC CR9
 220  003C              L30:
 220  003C              L26:

; 198: 	for(i=0;i<N;i++)
 198  003C  1480     R  INC CR9
 198  003D              L28:
 198  003D  0700     R  MOV A,CR9
 198  003E  0200     R  SUB A,I2C_Write_N0
 198  003F  380A        SNZ [0ah].0
 198  0040  2800     R  JMP L25
 198  0041              L24:
 198  0041  0003        RET
 198  0003  00          LOCAL b0_8 DB ?

; 196: 	uint8 i;
 196  0004  00          LOCAL CR9 DB ? ; i

; 197: 	bit ack;
 197  0005  00          LOCAL CR10 DBIT ; ack
 197  0042              _I2C_Write_N ENDP

; 237: {
 237  0000              @I2C_Read_N .SECTION 'CODE'
 237  0000              PUBLIC _I2C_Read_N
 237  0000              _I2C_Read_N PROC

; 236: void I2C_Read_N(uint8 N,uint8 addr,uint8 data[])
 236  0000              PUBLIC I2C_Read_N0
 236  0000  00          LOCAL I2C_Read_N0 DB ? ; N
 236  0000              PUBLIC I2C_Read_N1
 236  0001  00          LOCAL I2C_Read_N1 DB ? ; addr
 236  0000              PUBLIC I2C_Read_N2
 236  0002  00          LOCAL I2C_Read_N2 DB ? ; data

; 240: 	for(i=0; i<N; i++)
 240  0000  1F00     R  CLR CR12
 240  0001  2800     R  JMP L37
 240  0002              L34:

; 242: 		I2C_Start();
 242  0002  2000     R  CALL _I2C_Start

; 243: 		I2C_Write_Byte(0xa0);               /*写控制字*/
 243  0003  0FA0        MOV A,0a0h
 243  0004  0080     R  MOV I2C_Write_Byte0,A
 243  0005  2000     R  CALL _I2C_Write_Byte

; 244: 		ack = I2C_Ack();                    /*ACK*/
文件:FUNC.C       盛群编译器版本 2.86 页次9

 244  0006  2000     R  CALL _I2C_Ack
 244  0007  0080     R  MOV b0_9,A
 244  0008  0700     R  MOV A,b0_9
文件:FUNC.c       盛群编译器版本 2.86 页次10 

 244  0009  1F00     R  CLR b0_9
 244  000A  1085        SZ [05H]
 244  000B  3000     R  SET b0_9.0
 244  000C  3400     R  CLR CR11
 244  000D  1080     R  SZ b0_9
 244  000E  3000     R  SET CR11

; 245: 		if(!ack)
 245  000F  3C00     R  SZ CR11
 245  0010  2800     R  JMP L38

; 247: 			I2C_Write_Byte(addr+i);         /*写地址*/
 247  0011  0700     R  MOV A,I2C_Read_N1
 247  0012  0300     R  ADD A,CR12
 247  0013  0080     R  MOV b0_9,A
 247  0014  0700     R  MOV A,b0_9
 247  0015  0080     R  MOV I2C_Write_Byte0,A
 247  0016  2000     R  CALL _I2C_Write_Byte

; 248: 			ack = I2C_Ack();                /*ACK*/
 248  0017  2000     R  CALL _I2C_Ack
 248  0018  0080     R  MOV b0_9,A
 248  0019  0700     R  MOV A,b0_9
 248  001A  1F00     R  CLR b0_9
 248  001B  1085        SZ [05H]
 248  001C  3000     R  SET b0_9.0
 248  001D  3400     R  CLR CR11
 248  001E  1080     R  SZ b0_9
 248  001F  3000     R  SET CR11

; 249: 			if(!ack)
 249  0020  3C00     R  SZ CR11
 249  0021  2800     R  JMP L40

; 251: 				I2C_Start();
 251  0022  2000     R  CALL _I2C_Start

; 252: 				I2C_Write_Byte(0xa1);       /*写控制字读取当前地址数据*/
 252  0023  0FA1        MOV A,0a1h
 252  0024  0080     R  MOV I2C_Write_Byte0,A
 252  0025  2000     R  CALL _I2C_Write_Byte

; 253: 				ack = I2C_Ack();            /*ACK*/
 253  0026  2000     R  CALL _I2C_Ack
 253  0027  0080     R  MOV b0_9,A
 253  0028  0700     R  MOV A,b0_9
 253  0029  1F00     R  CLR b0_9
 253  002A  1085        SZ [05H]
 253  002B  3000     R  SET b0_9.0
 253  002C  3400     R  CLR CR11
 253  002D  1080     R  SZ b0_9
 253  002E  3000     R  SET CR11

; 254: 				if(!ack)
 254  002F  3C00     R  SZ CR11
 254  0030  2800     R  JMP L42

; 256: 					data[i] = I2C_Read_Byte();
 256  0031  2000     R  CALL _I2C_Read_Byte
 256  0032  0080     R  MOV b0_9,A
文件:FUNC.c       盛群编译器版本 2.86 页次11 

 256  0033  0700     R  MOV A,CR12
 256  0034  0300     R  ADD A,I2C_Read_N2
 256  0035  0081        MOV [01H],A
文件:FUNC.C       盛群编译器版本 2.86 页次10

 256  0036  0700     R  MOV A,b0_9
 256  0037  0080        MOV [00H],A

; 257: 					I2C_Stop();
 257  0038  2000     R  CALL _I2C_Stop

; 258: 				}
 258  0039  2800     R  JMP L41
 258  003A              L42:

; 261: 					i -= 1;					/*应答错误重新读入*/
 261  003A  1580     R  DEC CR12

; 263: 			}
 263  003B  2800     R  JMP L41
 263  003C              L40:

; 266: 				i -= 1;						/*应答错误重新读入*/
 266  003C  1580     R  DEC CR12
 266  003D              L41:
 266  003D              L38:
 266  003D              L35:

; 240: 	for(i=0; i<N; i++)
 240  003D  1480     R  INC CR12
 240  003E              L37:
 240  003E  0700     R  MOV A,CR12
 240  003F  0200     R  SUB A,I2C_Read_N0
 240  0040  380A        SNZ [0ah].0
 240  0041  2800     R  JMP L34
 240  0042              L33:
 240  0042  0003        RET
 240  0003  00          LOCAL b0_9 DB ?

; 239: 	bit ack;
 239  0004  00          LOCAL CR11 DBIT ; ack

; 238: 	uint8 i;
 238  0005  00          LOCAL CR12 DB ? ; i
 238  0043              _I2C_Read_N ENDP
 238  0043              EXTERN __DELAYX0:NEAR
 238  0043              EXTERN __DELAYX1:NEAR
 238  0043              EXTERN __DELAYX2:NEAR
 238  0043              EXTERN __DELAYX3:NEAR
 238  0043              EXTERN __DELAYX4:NEAR
 238  0043              EXTERN __DELAYX5:NEAR
 238  0043              EXTERN __DELAYX6:NEAR


        0 Errors

⌨️ 快捷键说明

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