以下是引用baolqkun在2004-7-29 10:32:14的发言: 我的程序,应该没问题吧; Send all the sequence to the slave (slave address + data (OUTPUT)) SENDDATA: ; send start bit CALL STARTBIT ; acquire bus and send slave address ; send slave address MOV A, WRITEADD ; PCF8563的写地址 CALL SENDBYTE ; sets NOACK if NACK received JB NOACK, STOPSEND ; if no acknowledge send stop MOV A, SLAVEADD ; PCF8563的内部寄存器地址 CALL SENDBYTE ; send OUTPUT byte MOV A, OUTPUT CALL SENDBYTE ; sets NOACK if NACK received STOPSEND: CALL STOPBIT ; sends stop bit JNB NOACK, SENDRET ; if slave sends NACK send error SETB ERR ; sets the error flag SENDRET: RET ;____________________________________________________________________ ; RCVDATA ; receives one or more bytes of data from an I2C slave device. RCVDATA: ; send start bit CALL STARTBIT ; acquire bus and send slave address ; send slave address MOV A, WRITEADD ; PCF8563的写地址 CALL SENDBYTE ; sets NOACK if NACK received MOV A, SLAVEADD ; 寄存器地址 CALL SENDBYTE MOV A,READADD ;PCF8563的读地址 CALL SENDBYTE JB NOACK, STOPRCV ; Check for slave not responding. CALL RCVBYTE ; Receive next data byte. MOV INPUT,A ; Save data byte in buffer. STOPRCV: CALL STOPBIT JNB NOACK, RCVRET ; if slave sends NACK send error SETB ERR ; sets the error flag RCVRET: RET |