SCL BIT P1.0
SDA BIT P1.1
CS BIT P1.2
DATE BIT P1.3
CLOCK BIT P1.4
NUMBYT EQU 5DH
SLA EQU 5EH
MTD EQU 5FH
F0 EQU 5CH
ORG 0000H
MAIN:LCALL AD
LCALL ZHUANHUAN
LCALL XIANSHI
MOV MTD,#10H
MOV NUMBYT,#09H
MOV SLA,#70H
LCALL WRNBYT
SJMP $
AD:MOV 20H,#0H
MOV R2,#08H ;第一次采样CLOCK的8个脉冲
CLR P1.2 ;CS变为低电平
NOP
NOP
NOP
L3:MOV C,P1.3 ;对模拟输入采样,读出结果OUT
MOV A,20H
RLC A
MOV 20H,A
LCALL PULSE
DJNZ R2,L3
MOV R2,#24H ;A/D转换的36个时钟周期
SETB P1.2 ;CS变为高电平,保持36个时钟周期
L4:LCALL PULSE
DJNZ R2,L4
RET
PULSE:SETB P1.4 ;p1.4输出高电平,CLOCK时钟
NOP
NOP
NOP
CLR P1.4
RET
ZHUANHUAN: MOV A,20H
MOV B,#51 ;[255/5]=51,把5V分为255等分采集的数据
DIV AB
MOV 53H,A ;十位存53H单元中
MOV A,B
CLR F0
SUBB A,#1AH
MOV F0,C ;F0为跳转标志
MOV A,#10
MUL AB
MOV B,#51
DIV AB
JB F0,LOOP2
ADD A,#5
LOOP2:MOV 52H,A ;个位存52H单元中
MOV A,B
CLR F0
SUBB A,#1AH
MOV F0,C
MOV A,#10
MUL AB
MOV B,#51
DIV AB
JB F0,LOOP3
ADD A,#5
LOOP3:MOV 51H,A ;小数点后第一位存51H单元中
MOV A,B
CLR F0
SUBB A,#1AH
MOV F0,C
MOV A,#10
MUL AB
MOV B,#51
DIV AB
JB F0,LOOP4
ADD A,#5
LOOP4:MOV 50H,A ;小数点后第二位存50H单元中
RET
XIANSHI:PUSH PSW
;显示十位
MOV R0,#53H
MOV R1,#63H
MOV DPTR,#TAB
MOV A,@R0
MOVC A,@A+DPTR
MOV @R1,A
;显示个位
MOV R0,#52H
MOV R1,#62H
MOV DPTR,#TAB
MOV A,@R0
MOVC A,@A+DPTR
INC A
MOV @R1,A
;显示小数点后二位
MOV R0,#50H
MOV R1,#5FH
MOV R2,#02H
MOV DPTR,#TAB
NEXT3:MOV A,@R0
MOVC A,@A+DPTR
INC R0
INC R1
MOV @R1,A
DJNZ R2,NEXT3
POP PSW
RET
WRNBYT:PUSH PSW ;现场保护
WRNBYT1:LCALL STA ;发起始条件
MOV A,SLA ;读写控制字节
LCALL WRB ;发送写控制字节
LCALL CACK ;检查应答位
JB F0,WRNBYT ;无应答位,重发
MOV R0,#MTD ;有应答位,发送数据,第一个数据为首址
MOV R5,NUMBYT ;R5存读取数据字节数
WRDA:MOV A,@R0 ;读第一个字节数据
LCALL WRB ;发送此字节
LCALL CACK ;检查ACK
JB F0,WRNBYT1;无ACK,重发
INC R0 ;调整指针
DJNZ R5,WRDA ;尚未发完n个字节,继续
LCALL STOP ;全部发完数据,停止
POP PSW ;恢复现场
RET ;返回字节数据发送子程序
WRB:MOV R7,#8H ;位计数器初值
WLP:RLC A ;欲发送位移如C中
JC WR1 ;此位为1,转WR1
CLR SDA ;此位为0,发送0
SETB SCL ;时钟脉冲变高电平
NOP ;延时
NOP
NOP
NOP
CLR SCL ;时钟脉冲变低电平
DJNZ R7,WLP ;未发完8位,转WLP
RET ;8位发送完,返回
WR1:SETB SDA ;此位为1,发送1
SETB SCL ;时钟脉冲变高电平
NOP ;延时
NOP
NOP
NOP
CLR SCL ;时钟脉冲变低电平
CLR SDA
DJNZ R7,WLP
RET
CACK:SETB SDA ;SDA作为输入
SETB SCL ;第9个时钟脉冲开始
NOP
NOP
MOV C,SDA ;读SDA线
MOV F0,C ;转存入F0中
CLR SCL ;时钟脉冲结束
NOP
NOP
RET
STA:SETB SDA ;发送起始位
SETB SCL
NOP
NOP
NOP
NOP
CLR SDA
NOP
NOP
NOP
NOP
CLR SCL
RET
STOP:CLR SDA ;发送停止位
SETB SCL
NOP
NOP
NOP
NOP
SETB SDA
NOP
NOP
NOP
NOP
CLR SCL
RET
TAB:DB 0FCH,60H,0DAH,0F2H,66H
DB 0B6H,0BEH,0E0H,0FEH,0F6H
END
编译后出现错误123.asm(1): 错误 A81: EXPRESSION HAS DIFFERENT MEMORY SPACE
123.asm(2): 错误 A81: EXPRESSION HAS DIFFERENT MEMORY SPACE
123.asm(3): 错误 A81: EXPRESSION HAS DIFFERENT MEMORY SPACE
123.asm(4): 错误 A81: EXPRESSION HAS DIFFERENT MEMORY SPACE
123.asm(5): 错误 A81: EXPRESSION HAS DIFFERENT MEMORY SPACE
123.asm(21): 错误 A45: UNDEFINED SYMBOL
123.asm(139): 错误 A45: UNDEFINED SYMBOL
这怎么解决啊?是程序问题吗