Sari la conținut
ELFORUM - Forumul electronistilor

Simpla problema cu RCIF-ul de la 18F452


Mar

Postări Recomandate

Am o mare problema cu RCIF-ul picului 18F452 si deaceea apelez la dvs. Problema e ca ii scriu bcf PIR1, RCIF in rutina de intrerupere dar nu se stinge. Din aceasta cauza se apeleaza intreruperea permanent. Ciudat este ca atunci cind pornesc pic-ul si nu trimit nimic pe serial (de la PC) RCIF-ul este stins, cum am trimis primul octet a ramas blocata pe 1 logic. Va rog pe dvs sa ma ajutati sa dezlegam misterul.

Link spre comentariu
  • Răspunsuri 14
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • Mar

    5

  • lucicop

    4

  • puiu

    3

  • CristianC

    1

Top autori în acest subiect

Esti sigur ca problema nu e la PC si ca de fapt trimite mai multi octeti ? Ai verificat ca viteza cu care trimiti de la PC corespunde cu viteza setata in PIC ? Folosesti un MAX232 pentru interfata ?

Link spre comentariu

Folosesti un compilator ? Daca nu, verifica sa ai corecta adresa RCIF. Verifica si frecventa procesorului, poate sunt modificari. In mod normal merge direct de la 16F877 la 18F452. Probabil ca in cazul tau e vorba de o greseala simpla, pe care de obicei o treci cu vederea.

Link spre comentariu

Compilez programul in MPLAB, am verificat de 50 de ori adresa si e corecta. Am incercat sa sterg intreruperea aia si cu clrf (stergind tot registrul PIR1) si cu: movlw 00h movwf 0xF9E si nu se sterge, ramine RCIF-ul pe 1 logic Ai facut program de receptie utilizind intreruperi la 18F452? Functioneaza ?

Link spre comentariu

1. Bitul se pune pe zero automat prin citirea buferului RCREG:RCIF: USART Receive Interrupt Flag bit1 = The USART receive buffer, RCREG, is full (cleared when RCREG is read)0 = The USART receive buffer is emptyIntrodu o instructiune de citire a acestui registru.Cu stima,

Link spre comentariu

In momentul cind apare o intrerupere UART bitul RCIF devine automat 1 logic. Dupa ce executa secventa de intrerupere eu trebuie sa sterg bitul RCIF prin instructiunea bcf PIR1,RCIF ceea ce am si facut. Problema este ca bitul RCIF nu se sterge si nu stiu de ce. Aceiasi secventa am facut la 16F877 si functioneaza bine.

Link spre comentariu

1. Ai citit registrul in care sunt datele? Da sau nu? Daca nu ai citit registrul degeaba fortezi punerea bitului pe zero.2. Esti in bancul de date care trebuie? Care este exact comanda ta? bcf PIR1,RCIF,0 ? Cu stima,

Link spre comentariu

1.1. Bitul se pune pe zero automat prin citirea buferului RCREG ptr PIC18F452 ai in datasheet: RCIF: USART Receive Interrupt Flag bit 1 = The USART receive buffer, RCREG, is full (cleared when RCREG is read) 0 = The USART receive buffer is empty Pentru PIC16F87XA ai in datasheet: bit 5 RCIF: USART Receive Interrupt Flag bit1 = The USART receive buffer is full0 = The USART receive buffer is emptyDeci o mica omisiune sau diferenta.Am lucrat cu PIC18F452 si mi-a mers comunicatia cu PC.2. Nu am vazut un raspuns la ce ai gasit sau daca ai rezolvat problema?Cu respect,

Link spre comentariu
  • 3 săptămâni mai târziu...
Vizitator iflorea13

DUPA CUM II SPUNE SI NUMELE RCIF ESTE UN FLAG (steag) CARE SE SETEAZA AUTOMAT ATUNCI CAND BUFFERUL DE RECEPTIE ESTE PLIN.CEA MAI ELEGANTA METODA PENTRU A DEZACTIVA INTRERUPERILE ESTE BCF INTCON,GIE(H)/(L)

Link spre comentariu
Vizitator iflorea13

DUPA CUM II SPUNE SI NUMELE RCIF ESTE UN FLAG (steag) CARE SE SETEAZA AUTOMAT ATUNCI CAND BUFFERUL DE RECEPTIE ESTE PLIN.CEA MAI ELEGANTA METODA PENTRU A DEZACTIVA INTRERUPERILE ESTE BCF INTCON,GIE(H)/(L)

Link spre comentariu
  • 1 lună mai târziu...

Scuze ca nu am raspuns, nu am rezolvat problema nici acum pentru ca am fost prins in alte treburi. Rezultat nu ti-am dat pentru ca nu am mai lucrat. Oricum saptamana viitoare cind fac alte teste te anunt cu rezultate

Link spre comentariu

Flagul RCIF nu poate fi resetat software. El este resetat automat de partea hardware cand bufferul de receptie este gol.In cazul tau pot fi doua situatii:1. Nu citesti RCREG2. Au aparut erori de comunicatie FERR sau OERR pe care nu le trateziATENTIE!! Buferul de receptie este de tip FIFO -> poti sa primesti mai multe caractere pana ajungi sa citesti RCREG, deci trebuie sa citesti RCREG pana se goleste (RCIF devine 0)

Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări