hi everone.I found my solution .Thanks anyway !
SDA equ !6 ;I2C SDA signal
SCL equ !5 ;I2C SCL signal
gSDA rmb 1 ;contains I2C data
ChipAdr rmb 1 ;contains slave I2C address
ChipReg rmb 1 ;contains MC9S08QG8 internal register address
SendI2C:
bset SDA,PTBDD ;set PORTB Bit6 as Output
lda ChipAdr ;get the I2C byte to send
jsr sendStart ;send the Chip Address
lda PORTD
lsra ;extract SDA
lsra ;extract SDA
lsra ;extract SDA
bcc sChipReg ;SDA = Low −> acknowledge OK
jmp ACKerror ;SDA = High −> no acknowledge, error
;send the MC9S08QG8 register address = $01
sChipReg bclr SDA,PTBD ;force I/O = L
bset SDA,PTBDD ;set PORTB Bit6 as Output to write
;to the NCP5602
bclr SCL,PTBD ;set CLOCK = L
lda ChipReg ;send the internal register address
jsr sendByte
lda PORTD
lsra ;extract bit2
lsra ;extract bit2
lsra ;extract bit2
bcc sDATA ;SDA = Low −> acknowledge OK
jmp ACKerror ;SDA = High −> no acknowledge, error
;send the MC9S08QG8 data byte
SDATA
bclr SDA,PTBD ;set PORTB Bit6 as Output to write to MC9S08QG8
bset SDA,PTBDD
bclr SCL,PTBD ;set CLOCK = L
lda gSDA
jsr sendByte
bclr SDA,PTBDD ;set PORTD Bit10 as Input to read
the ACKNOWLEDGE
lda PORTD
lsra ;extract bit10
lsra ;extract bit10
lsra ;extract bit10
bcc exitI2C ;SDA = Low −> acknowledge OK
jmp ACKerror ;SDA = High −> no acknowledge, error
exitI2C
bclr SDA,PTBD
bset SDA,PTBDD
bclr SCL,PTBD
jsr delay5
bset SCL,PTBD
jsr delay5
bset SDA,PTBD
rts ;I2C transmission completed
;
;
;
ACKerror ldhx #mes2 ;get I2C error message
Jmp finish ;error
rts
;
sendStart
pshx ;start the I2C link
bset SCL,PTBD ;preset Clock = H
ldx #$08 ;preset I2C clock bit count
bclr SDA,PTBD ;force DATA = L to Start the frame
nop
nextBit
bclr SCL,PTBD ;CLOCK = LOW
lsla ;rotate 8 bits into Carry
bcs sendHbit
bclr SDA,PTBD ;SDA = L
bra posCLK
sendHbit bset SDA,PTBD ;SDA = H
posCLK bset SCL,PTBD ;CLOCK = High
decx ;decrement clock count
bne nextBit
bclr SCL,PTBD ;CLOCK = L
bclr SDA,PTBDD ;set PORTD Bit2 as Input to read
;the ACKNOWLEDGE
jsr delay5 ; wait to make sure the signal
;is stable
bset SCL,PTBD ;CLOCK = H
jsr delay5
pulx
rts
;
;
sendByte
pshx ;send one byte to the I2C port
bset SCL,PTBD ;preset Clock = H
ldx #$05 ;preset I2C clock bit count
lsla
nop
nextBitD
bclr SCL,PTBD ;CLOCK = LOW
lsla ;rotate 8 bits into Carry
bcs sendHbitD
bclr SDA,PTBD ;SDA = L
bra posCLKD
sendHbitD bset SDA,PTBD ;SDA = H
posCLKD bset SCL,PTBD ;CLOCK = High
decx ;decrement clock count
bne nextBitD
bclr SCL,PTBD ;CLOCK = L
bclr SDA,PTBDD ;set I/O as Input
jsr delay5
bset SCL,PTBD ;CLOCK = H
jsr delay5
pulx
rts
nop finish ;finish not operating
;
;
mes2 db “I2C error : no ACK return@”
;