首页 » 技术SOS » 工业电子 » keil问题

keil问题

菜鸟
2013-07-04 13:13:43
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 这怎么解决啊?是程序问题吗
分享
关键词: keil, 汇编  
菜鸟
2013-07-08 21:57:15
1楼

错误提示中括号内为出错的行号 前5行错误是因为定义位数据时,未声明段空间为BSEG 后两行错误是说有未定义标识符 21行我未看出错在哪里 139行应该是说SCL未定义

专家
2023-01-30 20:06:47
2楼

楼上厉害

专家
2023-01-30 20:28:57
3楼

学习一下