Jag har en led kopplad på RC1 vilken sätts till hög dvs leden tänds när programmet "kör förbi". Där den (BSF PORTC,1) nu sitter i SERIAL_INIT så tänds den när kretsen startas. Men om jag flyttar den längre ned i SERIAL_INIT så tänds den inte dvs programmet verkar ha stannat. Och det verkar som den stannar redan vid BANKSEL SPBRG. Ser någon vad det kan bero på?
Kod: Markera allt
LIST p=16f886 ; List directive to define processor
#INCLUDE <p16f886.inc> ; Processor specific variable definitions
ERRORLEVEL -302 ; Remove error message
__CONFIG _CONFIG1, _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT
__CONFIG _CONFIG2, _WRT_OFF & _BOR21V
;***** VARIABLE DEFINITIONS *****
;
TEMP EQU H'70' ; Used for different tasks
W_TEMP EQU H'71' ; Used for context saving
STATUS_TEMP EQU H'72' ; Used for context saving
PCLATH_TEMP EQU H'73' ; Used for context saving
TIM1 EQU H'74' ; Used in delay routines
TIM2 EQU H'75' ; -"-
TIM3 EQU H'76' ; -"-
TIM4 EQU H'77' ; -"-
MEM1 EQU H'78' ; Used when writing to Display
MEM3 EQU H'79' ; Used in test
WRTEMP EQU H'7A' ; Used when writing PC mirror
;
RS EQU H'04' ;RS Display at PORTC
E EQU H'05' ;Enable Display at PORTC
IN1 EQU H'00' ;Input no 1 at PORTA
IN2 EQU H'01' ;Input no 2 at PORTA
IN3 EQU H'02' ;Input no 3 at PORTA
IN4 EQU H'03' ;Input no 4 at PORTA
OUT1 EQU H'00' ;Output no 1 at PORTC
OUT2 EQU H'01' ;Output no 2 at PORTC
OUT3 EQU H'02' ;Output no 3 at PORTC
OUT4 EQU H'03' ;Output no 4 at PORTC
BUT_UP EQU H'05' ;Button Up at PORTB
BUT_DOWN EQU H'04' ;Button Down at PORTB
BUT_ENTER EQU H'03' ;Button Enter at PORTB
BUT_BACK EQU H'02' ;Button Back at PORTB
;
;
;***** VECTORS *****
;
ORG 0x000 ; Processor reset vector
GOTO INIT ; Go to beginning of program
;
ORG 0x004 ; Interrupt vector location
GOTO INTERRUPT ; Go to interrupt routine
;
;
;***** INITIATE *****
;
INIT CALL PIC_INIT ; Initiate PIC
CALL DISP_INIT ; Initiate Display
CALL WELCOME ; Print welcoming text
CALL SERIAL_INIT ; Initiate serial port
GOTO MAIN
;
;***** INITIATE PIC *****
;
PIC_INIT
BANKSEL INTCON ; Select bank
CLRF INTCON ; Disable interupts
BANKSEL ANSEL ; Select bank
CLRF ANSEL ; Digital ports
CLRF ANSELH ; -"-
BANKSEL OSCCON ; Select bank
BSF OSCCON,4 ; Set internal osc to 8 MHz
BSF OSCCON,5 ; -"-
BSF OSCCON,6 ; -"-
BANKSEL ADCON0 ; Select bank
BCF ADCON0,0 ; Disabel ADC
BANKSEL TRISA ; Select bank
MOVLW B'00001111' ; RA<7:4> as output, RA<3:0> as input
MOVWF TRISA ; -"-
MOVLW B'10000000' ; RB<7> as input, RB<6:0> as output
MOVWF TRISB ; -"-
MOVLW B'10000000' ; RC<7> as input, RC<6:0> as output
MOVWF TRISC ; -"-
BANKSEL PORTA ; Select bank
CLRF PORTA ; Clear port A
CLRF PORTB ; Clear port B
CLRF PORTC ; Clear port C
CLRF W
CLRF MEM1
CLRF MEM3
CLRF TEMP
RETURN
;
;
;***** INITIATE DISPLAY *****
;
DISP_INIT CALL DELL
BCF PORTC,RS
MOVLW H'30' ; Wake up, Set 8bit mode
MOVWF PORTA
CALL PULSE_E
CALL DELS
CALL PULSE_E
CALL DELS
CALL PULSE_E
CALL DELS
MOVLW H'20' ; Set 4bit mode
MOVWF PORTA
CALL PULSE_E
BCF PORTC,RS
MOVLW H'28' ; 2 line disp
MOVWF TEMP
CALL PORTNIBBLE
CALL PULSE_E
SWAPF TEMP,W
CALL PORTNIBBLE
CALL PULSE_E
BCF PORTC,RS
MOVLW H'0C' ; Display on. No cursor, no blinking
MOVWF TEMP
CALL PORTNIBBLE
CALL PULSE_E
SWAPF TEMP,W
CALL PORTNIBBLE
CALL PULSE_E
CALL CURSORRET
RETURN
;
;
;***** INITIATE SERIAL PORT *****
;
SERIAL_INIT BSF PORTC,1
BANKSEL SPBRG ; Select bank
MOVLW d'207' ; 9600 baud @ 8 Mhz, +0.16% err
MOVWF SPBRG
MOVLW b'00100100' ; TXEN=1, BRGH=1
MOVWF TXSTA ; Enable Async Transmission, set brgh
BANKSEL RCSTA ; Select Bank 0
MOVLW b'10010000' ; SPEN=1, CREN=1
MOVWF RCSTA ; Enable Async Reception
BANKSEL BAUDCTL ; Select bank
MOVLW b'00001000' ; BRG16=1
MOVWF BAUDCTL ; Enable BRG16
RETURN
;