Jag försöker få igång ett projekt med en PIC16F690 och en LCD modul som drivs via SPI.
Behöver lite hintar för att komma vidare. Målet just nu är att få ut ett 'Hello World' på LCD modulen.
Här är min exempelkod som jag tänkt använda för övningen.
Hittar lite olika kod exempel men dom är basserade på C och jag vill gärna fortsätta att hålla mig till ASM ett tag till.
Bifogar även en pdf över instruktionerna på LCD modulen.
Kod: Markera allt
#include <p16f690.inc>
__config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _BOR_OFF & _IESO_OFF & _FCMEN_OFF)
cblock 0x20
Ctr0
Dly0
Dly1
endc
org 0
nop
; Set up the SPI Support
BANKSEL TRISA ; BANK 1
movlw 0x00 ; Set PORTA as
movwf TRISA ; all Outputs
movlw 0x06 ; Turn off A/D
movwf ADCON1 ; so PORTA can be used
; Set up the SPI Port
BANKSEL TRISB
movlw b'0001' ; RB4 = SDI
movwf TRISB
bcf TRISB,6 ;
BANKSEL TRISC ; BANK 1
movlw 0xFF ; SCK is output (Master), SDI is input,
movwf TRISC ; SDO is output, all others output
movlw 0x40 ; Mode 1,1 SPI, middle of output
movwf SSPSTAT ; time sampling
BANKSEL SSPCON ; BANK 0
movlw 0x31 ; Mode 1,1 SPI Master Mode, 1/16 Tosc bit
time
movwf SSPCON ; SSP is on
Send_DT
; bcf PORTA,CS ; Enable Chip Select Output (low)
movf Ctr0,W ; Get Ctr (Counter Value) in W
movwf SSPBUF ; put in SSPBUF
BANKSEL SSPSTAT ; BANK 1
Char1 btfss SSPSTAT,BF ; Data transfer complete? (Buffer Full?)
goto Char1 ; if not, check again
BANKSEL SSPBUF ; BANK0
movf SSPBUF,W ; Get Data from SSPBUF
; Throw it away
; bsf PORTA,CS ; Disable Chip Select Output (high)
Update_Test_Counter
incf Ctr0,F ; Increment counter variable
Delay movlw 0x01 ; Simple delay Loop
movwf Dly1 ;
movlw 0x0F ;
movwf Dly0 ;
DlyLoop decfsz Dly0,F ;
goto DlyLoop ;
decfsz Dly1,F ;
goto DlyLoop ;
; Done Delay
; Simple Delay loop
DoAgain goto Send_DT ; Done, Send Next Byte
end