Mar Postat Octombrie 10, 2006 Partajează Postat Octombrie 10, 2006 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
lucicop Postat Octombrie 10, 2006 Partajează Postat Octombrie 10, 2006 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
Mar Postat Octombrie 10, 2006 Autor Partajează Postat Octombrie 10, 2006 DA am verificat toate astea , acelasi program functioneaza pe un 16F877 numai ca i-am schimbat adresele registrilor si l-am adaptat pentru un 18F452. Link spre comentariu
lucicop Postat Octombrie 10, 2006 Partajează Postat Octombrie 10, 2006 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
Mar Postat Octombrie 10, 2006 Autor Partajează Postat Octombrie 10, 2006 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
lucicop Postat Octombrie 11, 2006 Partajează Postat Octombrie 11, 2006 Am folosit UART-ul de la 18F452 si a functionat. Vezi daca sunt setate FERR sau OERR. Care e valoarea RCSTA ? BRGH ? Link spre comentariu
puiu Postat Octombrie 11, 2006 Partajează Postat Octombrie 11, 2006 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
Mar Postat Octombrie 12, 2006 Autor Partajează Postat Octombrie 12, 2006 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
lucicop Postat Octombrie 12, 2006 Partajează Postat Octombrie 12, 2006 Pune in Watch mai multi registri si verifica daca nu cumva se modifica altul. Link spre comentariu
puiu Postat Octombrie 12, 2006 Partajează Postat Octombrie 12, 2006 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
puiu Postat Octombrie 16, 2006 Partajează Postat Octombrie 16, 2006 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
Vizitator iflorea13 Postat Noiembrie 2, 2006 Partajează Postat Noiembrie 2, 2006 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 Postat Noiembrie 2, 2006 Partajează Postat Noiembrie 2, 2006 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
Mar Postat Decembrie 4, 2006 Autor Partajează Postat Decembrie 4, 2006 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
CristianC Postat Decembrie 5, 2006 Partajează Postat Decembrie 5, 2006 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
Postări Recomandate
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 contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum