cosmin_ctin2005 Postat Noiembrie 4, 2009 Partajează Postat Noiembrie 4, 2009 Salutare,am cumparat un PIC16F877A-04/P si am incarcat un program pe care l-am simulat in proteus - montajul nu functioneaza (la simulare mergea)Am si eu nevoie de un program foarte simplu in ASM : cand apas un buton sa se aprinda un led.Multumesc mult Link spre comentariu
cosmin_ctin2005 Postat Noiembrie 5, 2009 Autor Partajează Postat Noiembrie 5, 2009 Unde gresesc? list p=16f876 ; list directive to define processor #include ; processor specific variable definitions __CONFIG _CP_OFF &_WDT_OFF &_PWRTE_ON &_XT_OSC cblock 0x0C val1 endc org 0x0000 goto start start bcf STATUS,6 bsf STATUS,5 ;BANK1 movlw 0xff movwf TRISA movlw 0x00 movwf TRISB movlw 0x00 movwf TRISC movlw 0x00 movwf TRISD movlw 0xFF movwf TRISE bcf STATUS,5 ;BANK0 call start1 start1 clrf PORTA clrf PORTB clrf PORTC clrf PORTD clrf PORTE movlw 0x00 movwf val1 call coco return coco btfsc PORTA,0 call coco2 call coco coco2 incf val1 bsf PORTC,4 call coco end Link spre comentariu
mdorian Postat Noiembrie 5, 2009 Partajează Postat Noiembrie 5, 2009 Nu stiu care e logica apelarii subrutinelor dar programul tau sigur duce la depasirea stivei.... Link spre comentariu
cosmin_ctin2005 Postat Noiembrie 5, 2009 Autor Partajează Postat Noiembrie 5, 2009 ce vreau sa fac: daca aplic 0V la intrarea PORTA,0 (normal intrarea este legata la 5V) sa se faca iesirea PORTC,4 eu am folosit la PIC16F84 un macro button.inc dar la PIC16F877 nu functioneaza. loop Button 0,PORTA,2, .100, por_opr call loop por_opr bsf PORTB,2 call loop Button macro HiLo, Port, Bit, Delay, Adrress Local Exit Local Loop if HiLo == 0 btfsc Port,Bit else btfss Port,Bit endif goto Exit Loop if HiLo == 0 btfss Port,Bit else btfsc Port,Bit endif goto Loop call Adrress Exit endm Unde gresesc? Link spre comentariu
mdorian Postat Noiembrie 5, 2009 Partajează Postat Noiembrie 5, 2009 Incearca asta: list p=16f877A ; list directive to define processor #include ; processor specific variable definitions __CONFIG _CP_OFF &_WDT_OFF &_PWRTE_ON &_XT_OSC cblock 0x20 val1 val2 endc org 0x0000 goto start start ; niste initializari clrf INTCON banksel CMCON movlw 0xff movwf CMCON banksel PIR1 clrf PIR1 clrf PIR2 ;se trec toate perifericele pe power down clrf T1CON clrf T2CON clrf SSPCON clrf CCP1CON clrf CCP2CON clrf ADCON0 banksel PIE1 clrf PIE1 clrf PIE2 movlw 0x07 movwf ADCON1 clrf SSPCON2 banksel TRISA movlw 0xff movwf TRISA movlw 0x00 movwf TRISB movlw 0x00 movwf TRISC movlw 0x00 movwf TRISD movlw 0xFF movwf TRISE banksel PORTA clrf PORTA clrf PORTB clrf PORTC clrf PORTD clrf PORTE movlw 0x00 movwf val1 RepetaMereu ; asteapta 0 pe pin PORTA,0 btfsc PORTA,0 goto $-1 ; o mica intarziere pentru a elimina impulsurile tranzitorii clrf val2 incfsz val2,f goto $-1 comf val1,f; val1 e folosit ca buffer ;pentru a memora starea anterioara , la fiecare apasare ;se schimba starea pinului portc,4 ; call CopiazaBit ; asteapta 1 pe PORTA,0 btfss PORTA,0 goto $-1 ; o mica intarziere pentru a elimina impulsurile tranzitorii clrf val2 incfsz val2,f goto $-1 goto RepetaMereu CopiazaBit ; copiaza val1,0 in PORTC,4 banksel val1; in acelasi banc cu PORTC btfss val1,0 goto ClearBit bsf PORTC,4 return ClearBit bcf PORTC,4 return end Pinul 0 de la portul A nu este intrare digitala implicit , trebuie initializat , probabil acolo e greseala de nu iti merge macroul Oricum , modul in care folosesti apelurile de subrutine e revoltator , nu reusesc sa inteleg cum un lucru atat de simplu il faci atat de complicat :banghead: Link spre comentariu
cosmin_ctin2005 Postat Noiembrie 7, 2009 Autor Partajează Postat Noiembrie 7, 2009 am facut urmatorul program si l-am simulat in PROTEUS si merge foarte bine dar practic nu merge. list p=16f877 ; list directive to define processor #include ; processor specific variable definitions __CONFIG _CP_OFF &_WDT_OFF &_PWRTE_ON &_XT_OSC &_BODEN_ON &_LVP_ON ;***** Declarare variabile ***** Cblock 0x0C LCDbuf LCDtemp WCYCLE PRESCwait doi te_st endc ;***** structura prog din memorie ***** ORG 0x0000 ;reset vector goto Main #include "bank.inc" #include "button.inc" #include "wait.inc" Main bcf STATUS,RP0 bcf STATUS,RP1 clrf PORTA bsf STATUS,RP0 movlw 0x06 movwf ADCON1 movlw 0xCF movwf TRISA clrf PORTB movlw 0x00 movwf TRISB clrf PORTC movlw 0x00 movwf TRISC clrf PORTD movlw 0x00 movwf TRISD clrf PORTE movlw 0x00 movwf TRISE bcf STATUS,RP0 bcf STATUS,RP1 clrf PORTB movlw 0x00 movwf te_st clrf PORTD Loop Button 0,PORTE,0, .100, On goto Loop On bsf PORTB,7 bsf PORTB,6 bsf PORTC,3 bsf PORTC,4 bsf PORTD,0 bsf PORTD,1 bsf PORTD,3 bsf PORTD,4 return End este prima data cand programez acest tip de PIC si nu stiu ce trebuie bifat in ICPROG Fusses WDT PWRT BODEN LVP CPD WRT DEBUGGER help me!!!!! Link spre comentariu
cosmin_ctin2005 Postat Noiembrie 7, 2009 Autor Partajează Postat Noiembrie 7, 2009 am atasat si schema electronica Link spre comentariu
TECH_FUN Postat Noiembrie 7, 2009 Partajează Postat Noiembrie 7, 2009 nu trebuie sa mai configurezi nimic, ai cuvantul de configurare deja scris in prgm Link spre comentariu
TECH_FUN Postat Noiembrie 7, 2009 Partajează Postat Noiembrie 7, 2009 n-am mai programat de mult in asm, dar mai observ o problema. daca te uiti pe configuratia bank-ului0, blocul de 'general purpose registers' incepe de la 0x20h... daca scrii peste registrii dedicati, nu garanteaza nimeni ca o sa ramana acolo intacta informatia... cel putin adcon vad sigur ca-l scrii chiar tu in program. Link spre comentariu
Rabulea Sergiu Postat Noiembrie 7, 2009 Partajează Postat Noiembrie 7, 2009 Salut. Dupa parerea mea gresesti aici: Cblock 0x0CLCDbufLCDtempWCYCLEPRESCwaitdoite_stendc Memoria RAM (general pourpose register) incepe de la 0x20 la PIC 16F877, nu de la 0x0C ca la PIC16F84 deci codul tau ar trebui sa arate cam asa: Cblock 0x20LCDbufLCDtempWCYCLEPRESCwaitdoite_stendc Un sfat: Filtreaza ce citesti din cartea de pe mikroelectronica, pentru ca acea carte are exemple pentru PIC 16F84 care nu este compatibil cu microcontrolerul tau. Cu respect, Sergiu. Link spre comentariu
cosmin_ctin2005 Postat Noiembrie 9, 2009 Autor Partajează Postat Noiembrie 9, 2009 nu merge poate este defect pic-ul Link spre comentariu
cosmin_ctin2005 Postat Noiembrie 10, 2009 Autor Partajează Postat Noiembrie 10, 2009 pentru un oscilator cu un Quart de 4Mhz ce valori folosim pentru condensatori? pentru PIC16F877 Link spre comentariu
ramsesrr Postat Noiembrie 10, 2009 Partajează Postat Noiembrie 10, 2009 pentru un oscilator cu un Quart de 4Mhz ce valori folosim pentru condensatori? pentru PIC16F877 intre 15 si 30pf Link spre comentariu
cosmin_ctin2005 Postat Noiembrie 10, 2009 Autor Partajează Postat Noiembrie 10, 2009 multumesc pentru ajutoram avut problema cu soclul de la procesor Acum merge 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