a_sorien Postat Decembrie 30, 2012 Partajează Postat Decembrie 30, 2012 Arasez un cod assembler care da erroare la compilare 152 (Executable code and data must be defined in an appropriate section...!!!). list p=16f873 #include __CONFIG _CP_OFF& _WDT_OFF& _BODEN_OFF& _PWRTE_OFF& _XT_OSC& _WRT_OFF& _LVP_OFF& _CPD_OFF UDATA dc1 res 1 dc2 res 1 bcf STATUS,RP0 bsf STATUS,RP0 ;bank1 clrf ADCON1 clrf TRISA ;face toate porturile iesiri clrf TRISB clrf TRISC bcf STATUS,RP0 ;bank0 org 0x00 main bsf PORTB,7 ;F movlw b'110000' movwf PORTA ;V clrf PORTC ;port C ramane off call Delay05 ;pausa 05s movlw b'11000000' ;F+A movwf PORTB movlw b'110000' movwf PORTA ;V+E clrf PORTC call Delay05 ;pausa 05s movlw b'11100000' movwf PORTB ;F+A+R movlw b'10000000' movwf PORTC ;V+E+T call Delay05 ;pause 05s ...................... ......................Eroarea e pana in org 0x00 , dupa _config ... Link spre comentariu
deejay2k1 Postat Decembrie 30, 2012 Partajează Postat Decembrie 30, 2012 de pe forumul microchip: UDATA MYRANDOMNAME WREG_TEMP res 1 STATUS_TEMP res 1 BSR_TEMP res 1 UDATA ; need this line to tell linker you're back to normal, go-anywhere variables in codul tau se pare ca utilizezi incorect UDATA Link spre comentariu
Ashky Postat Decembrie 30, 2012 Partajează Postat Decembrie 30, 2012 sterge org 0x00 si ar trebui sa mearga Link spre comentariu
a_sorien Postat Decembrie 30, 2012 Autor Partajează Postat Decembrie 30, 2012 Nu , ne merge ..!Am sters si udata si org si tot aceasi eroare..!Am acum o alta intrebare ; cum fac porturile A,B,C doar iesiri ..si cum il fac sa merarga fara comparatoare ..?! La acest tip de proc cum sunt porturile setate implicit..?!Dar comparatoarele..?!Am citi pe microchip si nu am gasit ..oare nu am avut rabdare..?! Link spre comentariu
deejay2k1 Postat Decembrie 30, 2012 Partajează Postat Decembrie 30, 2012 La mine compileaza ok, daca sterg WRT_OFF, pe care nu-l recunoaste, org 0x00, care sincer nu are ce cauta acolo si UDATA-ul .... Link spre comentariu
a_sorien Postat Decembrie 30, 2012 Autor Partajează Postat Decembrie 30, 2012 Am incercat si eu ....fara udata si fara org si fara wrt off ..dar nu vrea..!Si apoi declaratiile de initializare si functiile porturilor unde le fac..?Pentru delay unde rezerv spatiu ..?!Sau .....dc1 equ 20h ; dc2 equ 21h ...?Cu ce compilezi.,...?! nu cu mplab....?! Link spre comentariu
deejay2k1 Postat Decembrie 30, 2012 Partajează Postat Decembrie 30, 2012 proiectul de la mine[attachment=0]16f873_30_12_2012__19_26_21.rar[/attachment] Link spre comentariu
a_sorien Postat Decembrie 30, 2012 Autor Partajează Postat Decembrie 30, 2012 Asta compileaza...! list p=16f873 #include __CONFIG _CP_OFF& _WDT_OFF& _BODEN_OFF& _PWRTE_ON& _XT_OSC& _WRT_OFF& _LVP_OFF& _CPD_OFF org 0x000 clrf PORTA ; Initialize port A clrf PORTB ; Initialize port B clrf PORTC ; Initialize port C bsf STATUS,RP0 ; RAM bank 1 clrf TRISA ; All pins port A output clrf TRISB ; All pins port B output clrf TRISC ; All pins port C output bcf STATUS,RP0 ;BACK TO BANK0 dc1 equ 21h dc2 equ 22h main bsf PORTB,7 ;F movlw b'110000' movwf PORTA ;V clrf PORTC ;port C ramane off call Delay05 ;pausa 05s movlw b'11000000' ;F+A movwf PORTB movlw b'110000' movwf PORTA ;V+E clrf PORTC call Delay05 ;pausa 05s movlw b'11100000' movwf PORTB ;F+A+R movlw b'10000000' movwf PORTC ;V+E+T call Delay05 ;pause 05s ............................... ............................ ........................... end Link spre comentariu
a_sorien Postat Decembrie 30, 2012 Autor Partajează Postat Decembrie 30, 2012 Acu pricep si eu : cand am apelat "call Delay" de fapt am produs o intrerupere , a carei revenire se face cu retfie..! Merci..muult..!! Mai am mult pana reusesc si eu sa scriu programe coerente..! Link spre comentariu
Elef Postat Ianuarie 1, 2013 Partajează Postat Ianuarie 1, 2013 org 0x0 - spune asamblorului sa puna codul care urmeaza incepand de la adresa 0x0 - oarecum normal fiindca de acolo o sa inceapa uc-ul executia Daca se folosesc interuperi atunci un program ar putea fi organizat in felul urmator in felul urmator: org 0x0 goto Startorg 0x4 goto InterruptStart . . call Sub . . goto StartSub . . returnInterrupt . . . retfie La 16f interuperea are vectorul 0x4 - adica in momentul in care apare intreurperea uC se duce sa execute ceea ce gaseste la adresa 0x4. Call nu produce interuperi ci doar apleaza o subrutina .Intoarcerea din subrutina se face in mod nermal cu return nu cu retfie(chiar nu ai nevoie sa activezi intreruperile la iesirea dintr-o subrutina) Link spre comentariu
dinbooo Postat Martie 5, 2013 Partajează Postat Martie 5, 2013 salut,am si eu problema avand in vedere ca nu am programat niciodata un pic16f873. acesta are valoare osccal ca si 12f675? intreb asta pentru ca cineva a programat un pic si a sters aceasta valoare daca ea exista. cum o recuperez? cu o clona pickit2?multumesc! Link spre comentariu
Liviu M Postat Martie 5, 2013 Partajează Postat Martie 5, 2013 Salut, acesta are valoare osccal ca si 12f675?nu, n-are. 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