PIC16F627 nefunguje
Moderátor: Moderátoři
PIC16F627 nefunguje
Dobrý den, udìlal jsem takovou hloupou aplikaci, kde mi bliká jedna LED dioda. Odzkoušel jsem to na emulátoru od Asixu a vše fungovalo. Poté jsem program nátáhl do procesoru a když jsem jej spustil nic se nestalo. Netušim ani ,kde bych mìl hledat chybu. Tišák se zdá být v poøádku a program taky. Ovšem v manuálu od Microchipu sem nalezl rùzné promìnné, které se definují, ale u nikoho jsem je nenašel v programu. Prosím o pomoc...díky...
Zkus třeba následující. Direktiva __CONFIG nastavuje mimo jiné i typ oscilátoru.
Nebo ještě lépe takto:
Kód: Vybrat vše
list p=16F627 ; list directive to define processor
#include <P16f627.inc> ; processor specific variable definitions
errorlevel -302
__CONFIG _CP_OFF & _DATA_CP_OFF & _LVP_OFF & _BODEN_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _HS_OSC
;--------- CONSTANTS DEFINITIONS---------------------------------------
#define RAM_Start 0x20
#define TIME0 D'30'
#define TIME1 D'30'
#define TIME2 D'30'
;--------- VARIABLE DEFINITIONS ---------------------------------------
CBLOCK RAM_Start
TMP0
TMP1
TMP2
ENDC
;----------------------------------------------------------------------
ORG 0x000 ; Processor reset vector
reset nop
goto init ; Go to beginning of program
ORG 0x004 ; interrupt vector location
nop
init
BSF STATUS,RP0
MOVLW B'00000000'
MOVWF TRISA
MOVLW B'00000000'
MOVWF TRISB
BCF STATUS,RP0
;------------------------------
MOVLW TIME2
MOVWF TMP2
MOVLW TIME1
MOVWF TMP1
MOVLW TIME0
MOVWF TMP0
DECFSZ TMP0,F
GOTO $-1
DECFSZ TMP1,F
GOTO $-5
DECFSZ TMP2,F
GOTO $-9
;------------------------------
FIRST MOVLW B'00000100'
MOVWF PORTB
;
MOVLW TIME2
MOVWF TMP2
MOVLW TIME1
MOVWF TMP1
MOVLW TIME0
MOVWF TMP0
DECFSZ TMP0,F
GOTO $-1
DECFSZ TMP1,F
GOTO $-5
DECFSZ TMP2,F
GOTO $-9
;
MOVLW B'00000000'
MOVWF PORTB
;
MOVLW TIME2
MOVWF TMP2
MOVLW TIME1
MOVWF TMP1
MOVLW TIME0
MOVWF TMP0
DECFSZ TMP0,F
GOTO $-1
DECFSZ TMP1,F
GOTO $-5
DECFSZ TMP2,F
GOTO $-9
GOTO FIRST
;
END
Kód: Vybrat vše
list p=16F627 ; list directive to define processor
#include <P16f627.inc> ; processor specific variable definitions
errorlevel -302
__CONFIG _CP_OFF & _DATA_CP_OFF & _LVP_OFF & _BODEN_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _HS_OSC
;--------- CONSTANTS DEFINITIONS---------------------------------------
#define RAM_Start 0x20
#define TIME0 D'30'
#define TIME1 D'30'
#define TIME2 D'30'
;--------- VARIABLE DEFINITIONS ---------------------------------------
CBLOCK RAM_Start
TMP0
TMP1
TMP2
ENDC
;----------------------------------------------------------------------
ORG 0x000 ; Processor reset vector
reset nop
goto init ; Go to beginning of program
ORG 0x004 ; interrupt vector location
nop
init
BSF STATUS,RP0
MOVLW B'00000000'
MOVWF TRISA
MOVLW B'00000000'
MOVWF TRISB
BCF STATUS,RP0
;------------------------------
call delay
FIRST MOVLW B'00000100'
MOVWF PORTB
call delay
MOVLW B'00000000'
MOVWF PORTB
call delay
GOTO FIRST
;------------------------------
delay
MOVLW TIME2
MOVWF TMP2
del2 MOVLW TIME1
MOVWF TMP1
del1 MOVLW TIME0
MOVWF TMP0
del0 DECFSZ TMP0,F
GOTO del0
DECFSZ TMP1,F
GOTO del1
DECFSZ TMP2,F
GOTO del2
return
;
END
tak jsem to celé zkopíroval a prohnal emulátorem, ten to vše pøijal až na _DATA_CP_OFF - není definovaná a tak jsem jí smazal... když sem to pustil na emul. tak to fungovalo...ale po natažení do procesoru to poøád nefunguje...chtìl jsem se zeptat na pár vìcí: proè tam jsou na zaèátku programu pøíkazy pro pøerušení a proè tam jsou pøidané promìnné jako TIME0,1 a 2? co znamená errorlevel - 302 a co znamenájí ty definice v øádku a co znamená CBLOCK RAM_Start ? ![Embarassed :oops:](./images/smilies/icon_redface.gif)
![Embarassed :oops:](./images/smilies/icon_redface.gif)
Kód: Vybrat vše
_DATA_CP_OFF - není definovaná
Kód: Vybrat vše
ale po natažení do procesoru to pořád nefunguje
Kód: Vybrat vše
proč tam jsou na začátku programu příkazy pro přerušení
První NOP na adrese 0x000 je rezervace pro ICD - In Circuit Debugging, tebe se to s emulátorem netýká, můžeš to vypustit. ORG 0x004 rezervuje prostor pro přerušení a na místo budoucího vektoru jsem vložil tu druhou NOP. Žádné přerušení v programu neexistuje ale brzo to budeš potřebovat.
Kód: Vybrat vše
proč tam jsou přidané proměnné jako TIME0,1 a 2
Kód: Vybrat vše
errorlevel - 302
Kód: Vybrat vše
CBLOCK RAM_Start
Kód: Vybrat vše
co znamenájí ty definice v řádku
Krystal může spolehlivě kmitat s emulátorem, ale s reálnou PIC nemusí. Chce to zkusit nejprve asi s tím interním oscilátorem. Bez inicializace pracuje na 4MHz. Použij
a uvidíš.
Kód: Vybrat vše
__CONFIG _LVP_OFF & _BODEN_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT