Sari la conținut
ELFORUM - Forumul electronistilor

Realizarea unui ceas cu microcontroler 80C552


Vizitator dorina123

Postări Recomandate

Vizitator dorina123

Salut,Imi cer scuze daca intrebarea mea nu se potriveste profilului acestui forum. Am de facut un proiect pentru scoala cu subiectul de mai jos.====Realizarea unui ceas care sa numere secunda sub forma ziua(din luna):ora:min:sec , programind Timer0 in mod 1.Valoarea curenta a ceasului ( 11 octeti : ziua,ora, min, sec si caracterele ‘:’) se transmite la portul serial programat fara intreruperi, la 500ms (rata de transfer 9600bauds la 11.0592MHz).Aplicatiile propuse se implementeaza in limbaj C, in mediul de dezvoltare Keil, cu microcontroler 80C552 .Validarea programului se face prin simulare in mediul de dezvoltare Keil.====Din pacate, nu am mai lucrat cu microcontrolere si nu am reusit sa gasesc exemple de programe in C care sa ma ajute la rezolvarea problemei.Daca aveti ceva documetatie sau alte idei care ma pot ajuta va rog sa imi scrieti.Multumesc!

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

Top autori în acest subiect

  • Liviu M

    4

  • aygun

    4

  • godFather89

    1

  • tes2000

    1

Top autori în acest subiect

Eu nu inteleg cum truda sa programezi in C un microcontroler ? :sparge: Eu l-as ruga pe proful vostru sa faca el treaba asta pentru a va arata ca se poate.

Link spre comentariu

Eu nu inteleg cum truda sa programezi in C un microcontroler ? :sparge:

Poti detalia ce nu intelegi? :nas: Ce e de neinteles in programarea microcontrollerelor in C? :nas:
Link spre comentariu

Ma refeream la faptul ca C-ul folosit in programarea microcontrolerelor este inferior ASM-ului insa nu neg faptul ca iti faci rapid programul . Necazul este ca , chiar daca stii C trebuie sa te scremi destul de tare ca sa inveti C-ul specific fiecarui microcontroler. Microcontrolerele , din cate imi aduc aminte , nu folosesc intreaga pleiada de comenzi ale limbajului respectiv . Parerea me ar fi ca cel mai simplu ar fi sa se lucreze in limbaj cod masina ( assembler ) chiar daca ia mai mult timp storci din microprocesorul ala si ultima farama de putere deoarece lucrezi la nivel de tact.C-ul este un limbaj interpretat si de aici o multime de dezavantaje . Problema nu este la C ci la gramada de setari si functii ale microcontrolerului repspectiv . Lucru care ajunge sa cam puna in umbra C-ul pur.Poate incerca ANSI C spre exemplu desi parerea mea este ca trebuie sa se inceapa cu limbajul de asamblare pentru a intelege ce face acel microcontroller.Era o vreme cand foloseam Mons si Gens in basic dar sunt vremuri de muuuuuuult apuse. Desi inca se mai practica programarea unor mirocontrolere in Basic. PIC-urile au o versiune de PIC BASIC , etc , etc.Dar limbajul tine foarte mult si de microcontroller.

Link spre comentariu

OK, am intreles cam la ce te referi, in principiu ai dreptate. Practic ti-as recomanda o actualizare a informatiilor (cel putin pentru a da sfaturi bune pe forumuri).O singura nelamurire mai am. Ce intelegi prin

C-ul este un limbaj interpretat

?
Link spre comentariu

O singura nelamurire mai am. Ce intelegi prin :

C-ul este un limbaj interpretat ?

Pai faptul in unele cazuri programul in C nu este asamblat in cod masina si este interpretat de microcontroler step by step( desigur daca microcontrolerul are interpretorul in zona sa de memorie specifica ). Spre exemplu , unele microcontrolere au inclus intern interpretorul mai ales in cazul Basic sau Forth .Partea fun la a programa microcontrolere cu interpretor este ca poti face un segment de program si il poti modifica on the fly pina ajungi la rezultatul dorit. In cazul in care il compilezi este mai greu de modificat si stii si tu de ce . Trebuie sa faci debugging la ce anume tranteste microcontrolerul , revii la programul tau , il recompilezi , il versi in microcontroler .....Spre exemplu , chiar si banalul Arduino are un interpretor C ce poae fi "varsat" in microcontroler si poate realiza doua functii. Ai un terminal si bagi comenzile din terminal urmand sa vezi ce se intampla sau versi codul via seriala in microcontroler. Bitlash este acel interpretor pentru Arduino .La asta m-am referit cand am zis ca C este un limbaj interpretat in cazul microcontrolerelor si dupa cum stii si tu ( dar si multi altii dintre voi ) trebuie invatat C-ul specific fiecarui microcontroler deoarece nu toate comenzile sunt acceptate de IDE-ul aferent fiecarui dispozitiv. Ce merge la un microcontroler , este foarte probabil sa dea cu virgula la altul.
Link spre comentariu

Imi pare rau sa te dezamagesc, dar spre deosebire de spectrumurile care "interpretau basicul", compilatoarele C pentru microcontrollere compileaza/assambleaza codul (si in functie de compilator optimizate de nu prea mai ai ce face "de mana").La fel ca si la PC, de altfel, unde C-ul e compilat. Interpretat e Basicul (si diversele limbaje de scripting). N-am idee cum e cu basicul pentru microcontrollere, da' cum n-am prea auzit de "interpretoare pentru PIC-uri" presupun ca pana si astea "asambleaza".

Link spre comentariu

Din cate stiu pentru PIC exista PicoC ca si interpretor iar unii de pe aici folosesc PIC Basic.Aseara am avut o discutie cu @skaarj pe tema asta el fiind unul din cei ce folosesc PIC Basic .Apoi mai e FlashForth ca interpretor pentru a te juca cu PIC-ul live .FlashFort merge pe Microchip PIC18F 8 - biti si 16-biti PIC24, 30, 33 precum si pe Atmel Atmega.Totul tine de gusturi.Mie personal imi place sa urmaresc pe seriala ce se petrece cu microcontrolerul sau placa de dezvoltare pentru a sti in orice clipa unde este , ce face si eventual a adapta on the fly programul. Cum am lucrat cel mai mult in Basic in el ma simt cel mai in largul meul meu.Numai de bine . Sincer sunt cam invechit ca ideologie . Poate tineretul din ziua de azi prefera altceva mai fancy ;) In soala am invatat Basic , Fortran , Cobol , Pascal . Cam atat . In rest , Basicul l-am invatat singurel pe o Cobra DIY.

Link spre comentariu

Cred ca faci o confuzie.Chiar daca scrii programul in basic (PIC Basic sau Bascom), asta nu inseamna ca ai interpretor basic pentru PIC/Atmel. In momentul in care generezi un fisier hex pe care-l scrii in microcontroller, s-a dus cu "interpretarea". Basic-ul (in cazul in care faci debugging *)) nu ruleaza in PIC/Atmel ci tot pe PC. In microcontroller ruleaza cod asamblat.*) Se poate face foarte bine debugging si in cazul programelor scrise in C/assembler/cemaivreitu.

Link spre comentariu

Buna, documentatie keil la keil, documentatie 80C552 la producator, exemple tot la keil.

Poftim, problema pe jumatate rezolvat, nu o sa rezolv 100% ca nu eu am primit si nu eu trebuie sa invat programare.Pune mana pe carte si pe cursuri si poti sa rezolvi daca vrei, daca nu ...

Eu cred ca niciodata nu se cere mai mult decat se preda, daca esti la curs si inveti nu va fi probleme.

 

include ....var msxvar ms500var ms1;var secvar minvar oravar zivar lunavar osec;#def t0reload 0x.... //trebuie calculat#def t0xr 0x..   //si asta, tinand cont de frecventa 11.0592Mhz/*trebuie declarat in zona de memorie program ca sa nu ocupa loc in ram(vezi manual keil)*/var asci = '0','1',....var string tx[11];//01:00:00:00 11 octeti asa se cere in enunt,bineinteles asta inseamna conversie ascii//daca nu ar fi cerut 11 octeti atunci mergea fara conversie si pe 7 oceti/*intrerupere t1, vezi manualul keil cum se declara functie de intrerupere*/void intr_t0(){   stergere bit intrerupere   /*deoarece in mod 1 nu este reload trebuie reincarcat counterul t0*/   tl0,th0=t0reload;   /*deoarece la 11Mhz t0 se va genera o intrerupere mai repede decat 500ms mai trebuie un contor*/   msx++;   if(msx > r0xr){msx=0;ms500=1;ms1++;}   if(ms1>1){ms1=0;sec++;}//doi de ms1=1s   if(sec>59){sec=0;min++;}   if(min>59){min=0;ora++;}   if(ora>23){ora=0;zi++;}   if(zi>28){     switch(luna){         case 1:             if(zi > 31){zi=1;luna++;}	    break;         case ...              ...         case 12:            if(zi > 31){zi=1;luna=1;}            break;     }   } }void conv_asci(var nr,var poz)//ce numar se converteste, si locul unde se pune rezultatul in tx{   se foloseste stringul asci declarat   divizare cu 10 este primul numar   ce ramane este al doilea numar}void main(){//  initializare variabile   ora=min=sec=ms1=ms500=0;   osec=sec;   zi=luna=1;   tx[2]=':';tx[5]=':';....//setare srting deoarece asta nu se schimba   setare t0 mod 1;   setare intrerupere t0 si gi   setare baud    while(1){  if(osec!=sec){//vrem conversie doar cand se schimba       osec=sec;       conv_asci(zi,0);//       conv_asci(ora,3);//       ...  }  if(ms500){    for(i=0;i<11;i++){SBUF=tx[i];while(!TI);TI=0;}//se trimite,se asteapta,se sterge flag-ul;    ms500=0;  } }}
Pt. pornire zic ca e destul, asta am scris in 10 minute fara sa ma uit in manualul keil si pdf-ul de 80c,

poate sunt si erori dar daca apuci sa scri,compilezi si verifici gasesti repede.

Spor la treaba.

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