 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
| Poglej prejšnjo temo :: Poglej naslednjo temo |
| Avtor |
Sporočilo |
mk0388 Član


Pridružen-a: Čet 30 Okt 2008 21:52 Prispevkov: 161 Aktiv.: 0.76 Kraj: Celje
|
Objavljeno: Sob Mar 05, 2011 3:15 pm Naslov sporočila: Interupt RDA ne deluje. (RS232) |
|
|
Pozdravljeni,
hočem napisati program kateri bo bral znake s pomočjo prekinitvene rutine. Vendar rutina int_rda ne deluje. Če napišem program v main-u da mi prebere znak getc();, mi ga normalno, če pa uporabim prekinitev pa ne deluje. Zamenjal sem že dve verzije CCS C Compiler-ja dva uC-ja in nič uspeha. Vedno isto. Uporabljam:
-PIC 16F877A
-PIC 18F452
-PCW V4.093
-ICD2
Prosim še za kakšno idejo.
| Koda: |
#include "C:\Moji Dokumenti\Pic\main.h"
char buffer;
#int_RDA
void RDA_isr(void)
{
buffer=getc();
}
void main()
{
setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_CLOCK_DIV_2|ADC_TAD_MUL_0);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_wdt(WDT_OFF);
setup_timer_0(RTCC_INTERNAL);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
setup_ccp1(CCP_OFF);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
while(1){
printf("Znak je: %c \n"buffer);
delay_ms(100);
}
}
|
_________________ Victims - aren't we all... |
|
| Nazaj na vrh |
|
 |
aly Član



Pridružen-a: Tor 28 Sep 2004 14:51 Prispevkov: 9407 Aktiv.: 38.07 Kraj: Kranj - struževo
|
Objavljeno: Sob Mar 05, 2011 4:13 pm Naslov sporočila: |
|
|
Vsak kompajler ima drugačen način, kako mu definiraš Interrupt rutino.
Tole tvoje ti verjetno prevede kot navadno proceduro, ki pa ni od nikoder klicana.
Preštudiraj HELP od izbranega prevajalnika - notri točno piše sintaksa, da prepozna zahtevo, da rutino obesi na interrupt. _________________ I'm going to stand outside, so if anyone asks, I'm outstanding  |
|
| Nazaj na vrh |
|
 |
mk0388 Član


Pridružen-a: Čet 30 Okt 2008 21:52 Prispevkov: 161 Aktiv.: 0.76 Kraj: Celje
|
Objavljeno: Sob Mar 05, 2011 5:50 pm Naslov sporočila: |
|
|
| aly je napisal/a: |
Preštudiraj HELP od izbranega prevajalnika - notri točno piše sintaksa, da prepozna zahtevo, da rutino obesi na interrupt. |
Relevant Interrupts:
INT_RDA
Interrupt fires when the receive data available.
INT_TBE
Interrupt fires when the transmit data empty. _________________ Victims - aren't we all... |
|
| Nazaj na vrh |
|
 |
gumby Član


Pridružen-a: Sob 28 Apr 2007 12:32 Prispevkov: 4066 Aktiv.: 17.60
|
Objavljeno: Sob Mar 05, 2011 6:15 pm Naslov sporočila: |
|
|
"#use rs232" imaš definiran? Preveri tudi, če CCS vklopi PEIE bit. _________________ Tule nisem več aktiven. |
|
| Nazaj na vrh |
|
 |
mk0388 Član


Pridružen-a: Čet 30 Okt 2008 21:52 Prispevkov: 161 Aktiv.: 0.76 Kraj: Celje
|
Objavljeno: Sob Mar 05, 2011 6:39 pm Naslov sporočila: |
|
|
| gumby je napisal/a: |
| "#use rs232" imaš definiran? |
| Koda: |
#use delay(clock=20000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
|
_________________ Victims - aren't we all... |
|
| Nazaj na vrh |
|
 |
red_mamba Član


Pridružen-a: Ned 20 Feb 2005 17:56 Prispevkov: 1486 Aktiv.: 6.01 Kraj: Yogyakarta
|
Objavljeno: Sob Mar 05, 2011 9:48 pm Naslov sporočila: |
|
|
v mplab c prevajalniku definiraš interupt rutino kot
void interrupt isr(void)
{}
če pa ima uC Hi in Lo prioriti interupte pa gre to spet malenkost drugače  _________________ Bad things happen to good people all the time for no reason!
Blog |
|
| Nazaj na vrh |
|
 |
gumby Član


Pridružen-a: Sob 28 Apr 2007 12:32 Prispevkov: 4066 Aktiv.: 17.60
|
Objavljeno: Sob Mar 05, 2011 9:56 pm Naslov sporočila: |
|
|
Tole je CCS in je malo drugačna sintaksa. Definirano je prav... _________________ Tule nisem več aktiven. |
|
| Nazaj na vrh |
|
 |
jurijznidersic Član

Pridružen-a: Čet 26 Feb 2009 18:00 Prispevkov: 25 Aktiv.: 0.12 Kraj: Brežice
|
Objavljeno: Sob Mar 12, 2011 9:15 am Naslov sporočila: |
|
|
Verjetno nimaš omogočene prekinitve v registru INTCON (interrupt configuration)
prekinitev lahko prožiš na več različnih načinov in to nastaviš s tem ragistrom.
Preberi si v datasheetu o tem in ti bo jasno. |
|
| Nazaj na vrh |
|
 |
mk0388 Član


Pridružen-a: Čet 30 Okt 2008 21:52 Prispevkov: 161 Aktiv.: 0.76 Kraj: Celje
|
Objavljeno: Sob Mar 12, 2011 10:04 am Naslov sporočila: |
|
|
Pozdravljeni,
pravijo da v tretje gre rado, pa še res je. Po tretji menjavi compilerja (V4.084) mi je program uspelo zagnati. Nisem naredil nič drugega kot to, da sem omenjeni program zagnal v tretji verziji compiler-ja in sem brez problemov bral katere znake pošiljam s pomočjo prekinitvene rutine.
Hvala vsem za ideje.
LP Mitja _________________ Victims - aren't we all... |
|
| Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 233 dni
Powered by phpBB © 2001, 2005 phpBB Group
|