我也觉得可能是程序的问题,可是感觉好怪啊 我现在把加密位加上了 往S51里写程序成功并且能够正常运行 是什么样的程序问题能够使下载后的程序不加密不能正常运行呢 下面是我的程序 ACK BIT 10H SLA DATA 50H SUBA DATA 51H NUMBYTE DATA 52H SDA BIT P3.5 SCL BIT P3.4 MTD EQU 30H MRD EQU 40H PCF8574 EQU 4AH AT24C64 EQU 0AAH
ORG 0000H AJMP MAIN MAIN: MOV R4,#0F0H DJNZ R4,$ WRPCF8574: MOV R7,#00H IWBLOOP: MOV R0,#MTD MOV A,R7 CLR ACC.1 MOV @R0,A MOV SLA,#4AH LCALL SENTDATA LCALL DELAY INC R7 CJNE R7,#0FFH,IWBLOOP SJMP $ WRONG: SJMP $
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;程序名称:SENTS_SUB_DATA ;程序功能:发送NUMDATA个数据给有子地址器件 ;入口条件:SLA,器件地址;NUMDATA,发送字节数;MTD,发送缓冲区 ;出口 :ACK=0,发送正常;ACK=1,发送失败 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SENTS_SUB_DATA: LCALL START MOV A,SLA LCALL WRBYTE LCALL CACK JB ACK,RCV_SUB_RETURN MOV R0,#MTD SENTS_SUB_NEXT: MOV A,@R0 LCALL WRBYTE LCALL CACK JB ACK,SENDRETURN INC R0 DJNZ NUMBYTE,RCV_SUB_NEXT SENTS_SUB_RETURN: LCALL STOP RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;程序名称:RCV_SUB_DATA ;程序功能:从有子地址器件接收NUMDATA个数据 ;入口条件:SLA,器件地址;NUMDATA,接收字节数;MRD,接收缓冲区 ;出口 :MRD存放接收的数据;ACK=0,接收正常;ACK=1,接收失败 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; RCV_SUB_DATA: LCALL START MOV A,SLA INC A LCALL WRBYTE LCALL CACK JB ACK,RCVRETURN MOV R0,#MRD RCV_SUB_LAST: LCALL RDBYTE MOV @R0,A DJNZ NUMBYTE,RCV_SUB_NEXT LCALL MNACK RCV_SUB_RETURN: LCALL STOP RET RCV_SUB_NEXT: LCALL MACK INC R0 SJMP RCV_SUB_LAST
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;程序名称:SENTSDATA ;程序功能:发送数据给无子地址器件 ;入口条件:SLA,器件地址;MTD,发送缓冲区 ;出口 :ACK=0,发送正常;ACK=1,发送失败 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SENTDATA: LCALL START MOV A,SLA LCALL WRBYTE LCALL CACK JB ACK,SENDRETURN MOV R0,#MTD SEND: MOV A,@R0 LCALL WRBYTE LCALL CACK JB ACK,SENDRETURN SENDRETURN: LCALL STOP RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;程序名称:RCVDATA ;程序功能:从无子地址器件接收NUMDATA个数据 ;入口条件:SLA,器件地址;MRD,接收缓冲区 ;出口 :MRD存放接收的数据;ACK=0,接收正常;ACK=1,接收失败 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; RCVDATA: LCALL START MOV A,SLA INC A LCALL WRBYTE LCALL CACK JB ACK,RCVRETURN MOV R0,#MRD RCVLAST: LCALL RDBYTE MOV @R0,A LCALL MNACK RCVRETURN: LCALL STOP RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;程序名称:START ;程序功能:发送I2C起始条件 ;入口条件:无 ;出口 :无 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; START: SETB SDA NOP NOP SETB SCL NOP NOP CLR SDA NOP NOP CLR SCL RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;程序名称:STOP ;程序功能:发送I2C停止条件 ;入口条件:无 ;出口 :无 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; STOP: CLR SDA NOP SETB SCL NOP NOP SETB SDA RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;程序名称:MACK ;程序功能:发送应答信号 ;入口条件:无 ;出口 :无 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; MACK: CLR SDA NOP SETB SCL NOP NOP CLR SCL NOP NOP RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;程序名称:MNACK ;程序功能:发送非应答信号 ;入口条件:无 ;出口 :无 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; MNACK: SETB SDA NOP SETB SCL NOP NOP CLR SCL NOP NOP RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;程序名称:CACK ;程序功能:接收从机应答 ;入口条件:无 ;出口 :ACK=0,发送正常;ACK=1,发送故障 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; CACK:
SETB SDA SETB SCL CLR ACK JNB SDA,CEND SETB ACK CEND: CLR SCL RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;程序名称:WRBYTE ;程序功能:发送一个字节数据 ;入口条件:A,预发出的数据 ;出口 :无 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; WRBYTE: MOV R0,#08H WLP: RLC A JC WR1 CLR SDA SJMP SENT
WR1: SETB SDA SENT: SETB SCL NOP NOP CLR SCL DJNZ R0,WLP RET DELAY: MOV R6,#0FFH LOOP: MOV R5,#0FFH DJNZ R5,$ DJNZ R6,LOOP RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;程序名称:RDBYTE ;程序功能:接收一个字节数据 ;入口条件:无 ;出口 :A,接收的数据 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; RDBYTE: MOV R0,#08H RLP: SETB SDA NOP SETB SCL MOV C,SDA MOV A,R2 CLR SCL RLC A MOV R2,A DJNZ R0,RLP RET END 这是一个I2C的8574驱动程序,用S51仿真器测试通过, 现在下载到S51里然后不加加密位不能运行,加上加密位就能运行 问题怪怪的 |