Hallo allemaal,
Ik probeer met een PIC16F877 via SPI data te verzenden. Nu heb ik een experimenteerbord (EasyPIC 5) waar een hoop LED-jes op zitten, waarmee ik de status van het programma controleer. Ik heb het programma zover gekregen, dat het, zoals het nu lijkt geen botsingen meer heeft en gewoon lekker achter elkaar data verzend (dit om te testen of er data uit komt). Maar als ik een logic analyzer erop aan sluit, meet ik helemaal niks.
Heeft iemand enig idee of ik wat verkeerd doe?
Ik programmeer in assembly en het programma ziet er als volgt uit:
#include <P16F877.INC>
errorlevel 0,-302
errorlevel 0,-219
CBLOCK H'20'
ENDC
;----- Reset
ORG H'0'
RESET MOVLW B'00000000' ; SPI, instellingen: poort UIT, clock = Fosc/4 = 2 Mbps, CKP = 0 (low level)
MOVWF SSPCON
MOVLW B'00000000' ; SPI, interrupts op 0
MOVWF PIR1
MOVLW B'11000000' ; SPI, interrupts AAN
MOVWF INTCON
BSF STATUS,RP0 ; Bank 1
MOVLW B'11010111' ; Optie's instellen
MOVWF OPTION_REG
MOVLW B'01000000' ; SPI, instellingen: CKE = 1 (rising edge)
MOVWF SSPSTAT
MOVLW B'00001000' ; SPI, interrupts AAN
MOVWF PIE1
MOVLW B'00000000' ; Poort B, LED
MOVWF TRISB
MOVLW B'00000000' ; Poort C, SPI
MOVWF TRISC
BCF STATUS,RP0 ; Bank 0
CLRF PORTB ; LED uit
;----- Program
BSF SSPCON,SSPEN ; SPI aanzetten
BEGIN MOVF SSPBUF,W ; Register leegmaken
BSF PORTB,D'0' ; LED 0
BCF PORTB,D'1' ; LED 1 uit
WRITE MOVLW B'01100101' ; Versturen
MOVWF SSPBUF
NOP
BSF PORTB,D'1' ; LED 1
BCF PORTB,D'2' ; LED 2 uit
BTFSC SSPCON,WCOL ; Botsing?
GOTO EMPTY
BSF PORTB,D'2' ; LED 2
BCF PORTB,D'0' ; LED 0 uit
GOTO BEGIN
EMPTY MOVF SSPBUF,W ; Register leegmaken
BCF SSPCON,WCOL ; Interrupt WCOL verwijderen
BSF PORTB,D'7' ; LED 7
GOTO WRITE ; Terug
END Edit: De PIC is in master mode
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Wat probeer je er mee aan te sturen, en waarom staat de SPI interrupt aan terwijl je helemaal geen ISR hebt?
(In master mode valt er ook weinig te interrupten...)
Op 13 december 2009 16:27:35 schreef Arco:
Wat probeer je er mee aan te sturen, en waarom staat de SPI interrupt aan terwijl je helemaal geen ISR hebt?
(In master mode valt er ook weinig te interrupten...)
Ik weet dat er in master mode weinig te interrupten valt. En ik probeer gewoon data eruit te krijgen. Het is uiteindelijk de bedoeling om een LED-driver aan te sturen, maar dan moet ik uiteraard wel data eruit krijgen. Dus die byte die ik probeer te versturen, heeft verder geen betekenis. Puur om te testen.