po nějaké době jsem opět narazil na zcestí. Nejde mi udělat ani blikač s PIC16F877. Nejde o blikač, ale na každé desce dělám kontrolní ledku se kterou testuju všechny funkce.
Pro jistotu jsem vzal jiné IO a zkusil na kontaktním nepájivém poli a hle, stejný výsledek i s RC tak XT oscilátorem. Ledka nezabliká - myslím, že mám nějakou botu v programu, jinak si to nedokážu vyložit. Jsem C++kař, ale dělám to v Assembleru, pro mě občas nepochopitelný jazyk
Programátor používám PRESTO a samosebou HPV programování - proběhne bez jediné chyby.
Kód: Vybrat vše
; xxxxxxxxxxxxxxxxxxxxxxxx
; x for UNI - BOARD v 1.0 x
; x firmware for check braket x
; xxxxxxxxxxxxxxxxxxxxxxxx
LIST P=16F877
INCLUDE<P16F877.INC>
__CONFIG _PWRTE_OFF & _WDT_OFF & _XT_OSC & _LVP_OFF
; // Inputs
#DEFINE INT_LED PORTB,5 ; Senzor cilindru 1
; // Outputs
;#DEFINE SIREN PORTB,1 ; Výstup pro sirénu (maják)
; Registry pro Časové odpočty
CISLO equ 20h
CISLOA equ 21h
CISLOB equ 22h
CISLOC equ 23h
BSF STATUS,RP0 ;Nastavení banky 1
MOVLW B'00000000' ;Uložením hodnoty do pracovního registru W
MOVWF TRISA ;Přesunutí z registru W do registru TRISA (Dochází k nastavení portů vstupně-výstupních pinů)
MOVLW B'00000000' ;Uložením hodnoty do pracovního registru W
MOVWF TRISB ;Přesunutí z registru W do registru TRISA (Dochází k nastavení portů vstupně-výstupních pinů)
BCF STATUS,RP0
BCF STATUS,RP1
BCF STATUS, RP0 ;
BCF STATUS, RP1 ; Bank0
CLRF PORTA ; Initialize PORTA by
BSF STATUS, RP0 ; Select Bank 1
MOVLW 0x06 ; Configure all pins
MOVWF ADCON1 ; as digital inputs
INIT
BSF INT_LED
CALL WAIT_1000
BCF INT_LED
CALL WAIT_1000
GOTO INIT
; ---------------------------------- TIMER ZONE ----------------------------------
WAIT_200 CLRF CISLO
POINT_200 INCFSZ CISLO,1
GOTO POINT_200
INCFSZ CISLOA,1
GOTO POINT_200
RETURN
WAIT_500 CALL WAIT_200
CALL WAIT_200
RETURN
WAIT_1000 CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
RETURN
WAIT_2000 CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
RETURN
WAIT_3000 CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
RETURN
WAIT_4000 CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
RETURN
WAIT_5000 CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
RETURN
WAIT_10000 CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
CALL WAIT_200
RETURN
END
Pozn : Kód jsem radši dal celý pro jistotu, je to takové "homemade".