Случилось мне соединить PIC12F675 с цифровым потенциометром MCP41100, имеющим SPI-интерфейс. Схемка очень простая (прилагается).
Работает она так: при нажатии верхней по схеме кнопки потенциометр увеличивает сопротивление на один шаг (всего 256 шагов), при нажатии нижней по схеме кнопки, соответственно, наоборот, уменьшает сопротивление на один шаг.
Так вот возникла проблема: в MPLAB вроде всё работает, а в PROTEUS нет - по SPI передаются одни нули
Вот кусочек кода программы, который не работает:
Код: Выделить всё
;***** SPI Software Transmit Procedure *****
SPITransmit
movwf SPIoutput ; place byte in buffer to send
movlw .8 ;
movwf SPIcount ; counter for bit transmission
SPItxLoop
btfsc SPIoutput,7 ; MSB=0 ?
goto SPIhi ; no, set SPI data line high
bcf GPIO,0 ; yes, set SPI data line low
goto SPIstrobe ;
SPIhi
bsf GPIO,0 ; set SPI data line high
SPIstrobe
bsf GPIO,1 ; set SPI clock line high
rlf SPIoutput,F ; rotate tx byte left
bcf GPIO,1 ; set SPI clock line low
decfsz SPIcount,F ; decrement counter, it is zero?
goto SPItxLoop ; no, continue transmit
; yes, transmit is complete, return
return
;*******************************************
Код: Выделить всё
SPIhi
bsf GPIO,0 ; set SPI data line high
SPIstrobe
bsf GPIO,1 ; set SPI clock line high
Вобщем, нифига не пойму как это разрулить
P.S. Про операции "чтение-модификация-запись" знаю, но даже длинные задержки между этими операциями не помогают.
Про SlaveSelect тоже не забывал, но он в другом месте программы.

