Fórum témák

» Több friss téma
Fórum » CCS PIC Compiler
 
Témaindító: (Felhasználó 1542), idő: Ápr 3, 2006
Lapozás: OK   118 / 118
(#) Lamprologus válasza Bakman hozzászólására (») Feb 1, 2024 /
 
Köszönöm! Valóban ez volt a gond! Így már sikerült megoldanom!
(#) Lamprologus hozzászólása Ápr 5, 2024 /
 
PIC18F4550 megszakítás probléma ...

  1. enable_interrupts(INT_EXT2); // impulzus számláló
  2.     enable_interrupts(INT_RDA); // UART megszakítás
  3.  
  4.     enable_interrupts(GLOBAL);


A probléma véletlenszerűen jelentkezik (tízből 3-4 esetben), az UART megszakítás mindaddig hibátlanul működik amig INT_EXT2-re nem érkezik impulzus, onnantól kezdve nem lép be a program az INT_RDA megszakításba hiába érkezik adat a soros porton.

Mi lehet ennek az oka?
(#) Bakman válasza Lamprologus hozzászólására (») Ápr 5, 2024 /
 
Milyen programsorok vannak az impulzusszámláló és az UART vételi megszakításkezelésekben?
(#) Lamprologus válasza Bakman hozzászólására (») Ápr 5, 2024 /
 
  1. #INT_RDA
  2.    void rda_isr(void)
  3. {
  4.    static int t; // statikus t változó létrehozása (megtartja az értékét)
  5.    // NOTE: CCS getc() in this mode reads portB and clears the port INT
  6.    buffer1[next_in1]=fgetc(PORT1);  // beolvassa az érkez? karaktert a bufferbe,
  7.    t=next_in1++;  // t=mutató, majd növeli a mutató értékét
  8.    if (BUFFER1_SIZE==next_in1) next_in1=0; // ha a mutató az utolsó elemre mutat, átállítja az els?re
  9.    if(next_in1==next_out1)  next_in1=t;    // ha túlcsordul a buffer mutatóértékét egyel visszaállítja. Buffer full !!
  10. }


  1. #INT_EXT2
  2.  
  3. void EXT2_isr(void) {
  4.  
  5.     if (dpf_szunet_ido_figyelo > DPF_ADAGOLO_SZUNET_IDO) { // ha letelt a szünet idő és újabb löket érkezik nullázza a számlálót
  6.         dpf_szamlalo = 0;
  7.         dpf_ido_sec = 0;
  8.         dpf_ido_sec_temp = 0;
  9.         dpf_kepernyo_kell = 1;
  10.     }
  11.  
  12.     dpf_szamlalo++; // számolja a löketeket
  13.  
  14.     dpf_ido_sec = dpf_ido_sec + dpf_ido_sec_temp;
  15.     dpf_ido_sec_temp = 0;
  16.  
  17.  
  18.     dpf_szunet_ido_figyelo = 0; // nulázza a szünet id?t.
  19. }
(#) Lamprologus válasza Bakman hozzászólására (») Ápr 5, 2024 /
 
Bebugban nézegetem a regisztereket ... RCSTA regiszter OERR bitje néha 1-re vált, utána nem megy a soros port megszakítása...
(#) Hp41C válasza Lamprologus hozzászólására (») Ápr 5, 2024 /
 
OERR - Overrun Error - Ráfutás: Az előzőleg vett adatot nem olvasták ki mielőtt az új beérkezett volna. Csak a folyamatos vétel kikapcsolásával lehet törölni (CREN=0; CREN=1
(#) Lamprologus válasza Hp41C hozzászólására (») Ápr 5, 2024 /
 
Visszavettem a kommunikáció sebességét 115200-ról 9600-ra ... most úgy néz ki jó lesz! Köszönöm a segítséget!
Következő: »»   118 / 118
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem