Problem s ext. prerusenim u 16F84
Radek a Petra Vickovi
rvicek
Středa Březen 17 14:25:00 CET 2004
Zdravim.
Mel bych prosbu na "PICare" zda by me nepomohli najit v cem je problem.
Napsal jsem rutinu ktera prijima data (jak se vysila je popsano nize) a
odladil ji v hlavni smycce programu. Cekal jsem na 1 na RA0 a jakmile se
objevila probehla tahle rutina a tak porad kolem dokola. Jelikoz potrebuji
delat taky jeste neco jineho nez tohle presunul jsem tuhle rutinu do
preruseni a preruseni se generuje z RB0 opet pokud je 1 jdu do preruseni a
dekoduju.
Vsechno krasne funguje az na jednu kosmetickou vec. Z nejakeho duvodu se to
preruseni vyvola jeste jednou hned po tom prvnim. Tedy prijde vysilani ja
jej dekoduji a vyhodnotim blikne me zelena LED ze je vse OK a pak najednou
blikne jeste cervena LED jako ze vysilani nebylo moje (jelikoz nic nevysila
je to spravny vysledek). Zjevne se jedna o to ze se preruseni vyvola jeste
jednou i kdyz neni vysilano. Zkousel jsem prodlouzit cas za dekodovanim
abych eliminoval nejake dobehy vysilace, ale zde problem neni.
Jedina zmena tedy je ze jsem presunul vstup z RA0 na RB0 kvuli preruseni a
nejsem si jist zda nemuze byt nejaky problem s typem vstupu. Koukal jsem do
DS, ale z toho mne nic nenapadlo. Jediny rozdil je v tom ze RB0 je ST a RA0
neni ale to snad nevadi.
Zde je ten program k nahlednuti. Jelikoz je to ma prvotina budte ke mne
shovivavi pokud jsem nekde udelal nejakou cunarnu. Nicmene pokud mi nekdo
napise ze se neco dela jinak a elegantneji budu rad. Ten vysilac jsem
programoval take ja takze pripominky k zajisteni chybovosti jsou
neopodstatnene, jelikoz je to zabezpeceno systemem vysilani. :-)
Dekuji za odpovedi.
RadekCX
**********************************************************
LIST P = 16F84, R = DEC
#include<p16f84.inc>
;Zapojeni:
;Na RB0 je pripojen UHF prijimac ktery poskytuje jiz demodulovana data
;kdyz je v 1 je detekovana nosna kdyz v 0 nevysila se. Modul zvlada max
;2kHz modulaci. Kazdy bit je vysilan jako sekvence 1X0 (X je vlastni
;datovy bit) a jeho vysilani trva 3x1ms tedy modulacni kmitocet je 1kHz.
Cele
;vysilani je zacato vyslanim dvou bajtu R a V (bitove) a pak dva bity ktere
;informuji o stavu cidel.
; HSosc 4MHz
; RB0 IN - RX p?ij?m? kdy? je 1
; RB1 OUT - zelena LED sviti v 1 - dekodovan? OK
; RB2 OUT - zluta LED sviti v 1 - cidlo 1
; RB3 OUT - zluta LED sviti v 1 - cidlo 2
; RB4 OUT - cervena LED sviti v 1 - ru?en?
#define RX PORTB,0 ;
#define LEDOK PORTB,1 ;
#define LED1 PORTB,2 ;
#define LED2 PORTB,3 ;
#define LEDERR PORTB,4 ;
#define TOIF INTCON,2 ;
#define INTF INTCON,1 ;
OFFRAM EQU 0x0C ;zacatek RAM
MEM_W EQU OFFRAM ;pamet W
MEM_STAT EQU OFFRAM+1 ;pamet STATUS
TMP0 EQU OFFRAM+2 ;pomocne promenne pro smycky
TMP1 EQU OFFRAM+3 ;pomocne promenne pro smycky
TMP2 EQU OFFRAM+4 ;pomocne promenne pro smycky
MCIDLA EQU OFFRAM+5 ;registr cidel
ERRCNT EQU OFFRAM+6 ;counter alarmu
ITMP0 EQU OFFRAM+7 ;pomocne promenne pro smycky
ITMP1 EQU OFFRAM+8 ;pomocne promenne pro smycky
ITMP2 EQU OFFRAM+9 ;pomocne promenne pro smycky
;*******************************************************************
ORG 0x0
goto start ;odskok na zacatek programu
ORG 0x4
goto intproc ;odskok do preruseni
ORG 0x5
;*******************************************************************
start
clrf PORTB ;portb do 0
clrf PORTA ;porta do 0
bsf STATUS,RP0 ;banka 1
movlw B'11000111' ;
movwf OPT_REG ;pull-ups zakazany, RB0/INT nabezna
movlw B'00000001'
movwf TRISB ;portb cely vystup jen RB0 je vstup
movlw H'FF'
movwf TRISA ;porta cely vstup
bcf STATUS,RP0 ;banka 0
bsf LEDOK ;inicializace - rozsv?tit
call s1
bcf LEDOK ;inicializace - zhasnout
bsf LEDERR ;inicializace - rozsv?tit
call s1
bcf LEDERR ;inicializace - zhasnout
bsf LED1 ;inicializace - rozsv?tit
call s1
bcf LED1 ;inicializace - zhasnout
bsf LED2 ;inicializace - rozsv?tit
call s1
bcf LED2 ;inicializace - zhasnout
movlw B'10010000'
movwf INTCON ;GIE povoleno, INTE povoleno, vse dalsi OFF
SMYCKA
goto SMYCKA ;zde bude obsluha casove nekritickych udalosti
return
;*******************************************************************
intproc
movwf MEM_W ;push
swapf STATUS,W
movwf MEM_STAT
bcf INTF ;vynulovani priznaku preruseni o RB0
call s001 ;
call ms5 ;pockame na prostredek bitu
;1.byte - pismeno R
btfsc RX ;1.bit - 0
goto chyba ;nesouhlasi koncim dekodovani
call s003 ;pockam na dalsi bit
btfss RX ;2.bit - 1
goto chyba
call s003
btfsc RX ;3.bit - 0
goto chyba
call s003
btfss RX ;4.bit - 1
goto chyba
call s003
btfsc RX ;5.bit - 0
goto chyba
call s003
btfsc RX ;6.bit - 0
goto chyba
call s003
btfss RX ;7.bit - 1
goto chyba
call s003
btfsc RX ;8.bit - 0
goto chyba
call s003
;2.byte - pismeno V
btfsc RX ;1.bit - 0
goto chyba
call s003
btfss RX ;2.bit - 1
goto chyba
call s003
btfsc RX ;3.bit - 0
goto chyba
call s003
btfss RX ;4.bit - 1
goto chyba
call s003
btfsc RX ;5.bit - 0
goto chyba
call s003
btfss RX ;6.bit - 1
goto chyba
call s003
btfss RX ;7.bit - 1
goto chyba
call s003
btfsc RX ;8.bit - 0
goto chyba
call s003
bsf LEDOK ;hlavicka OK rozsvitim LEDOK
;ted prijmu stavy cidel
btfsc RX ;1.bit - data
bsf LED2
call s003
btfsc RX ;2.bit - data
bsf LED1
goto konec
chyba bsf LEDERR ;jednalo se o ruseni rozsvitim LEDERR
konec call s1 ;necham LED 0.1s svitit
bcf LEDOK ;zhasnout
bcf LEDERR ;zhasnout
bcf LED1 ;zhasnout
bcf LED2 ;zhasnout
swapf MEM_STAT,W
movwf STATUS
swapf MEM_W,F
swapf MEM_W,W
retfie
;*******************************************************************
---
Odchoz? zpr?va neobsahuje viry.
Zkontrolov?no antivirov?m syst?mem AVG (http://www.grisoft.cz).
Verze: 6.0.404 / Virov? b?ze: 228 - datum vyd?n?: 15.10.2002
Další informace o konferenci Hw-list