Sari la conținut
ELFORUM - Forumul electronistilor

conversie binar - zec. cu pic16f877a


Postări Recomandate

Buna seara! tot incerc de ceva vreme sa construiesc un program pentru PIC16F877A care sa faca conversia de la binar in zecimal. Stiu ca exista integrat care stie sa faca asa ceva insa eu am nevoie ca iesirea de zecimal sa stea doar 300 ms activa dupa care sa se opreasca. am pus un link: https://www.youtube.com/watch?v=5Y_idcjd_PE&feature=youtu.be  cu integratul dedicat insa cum ziceam iesirea trebuie sa fie activa doar 300 ms. am reusit eu ceva cu un cod scris de mine insa functioneaza doar daca folosesc intrarile binare crescator de la 0001; 0010; 0011... la 1111 daca incerc pe sarite nu se intampla nimic. As fi recunoscator daca m-ar ajuta cineva cu scrierea programului. 

codul incercat de mine:

 char stare ; void main() {  ADCON1 = 0x07;  TRISA = 0;  TRISB = 0xFF;  TRISC = 0;  TRISD = 0;  TRISE = 0;  PORTA = 0;  PORTB = 0;  PORTC = 0;  PORTD = 0;  PORTE = 0;  INTCON = 0;      while (1)    {      if (PORTB.B0) stare = 1 ;      Delay_ms(10) ;      if (PORTB.B0 && stare) {          PORTC.B0 = 1 ;             Delay_ms(300)  ;            PORTC.B0 = 0 ;               Delay_ms(300)  ;      while (1)    {      if (PORTB.B1) stare = 1 ;      Delay_ms(10) ;      if (PORTB.B1 && stare) {          PORTC.B1 = 1 ;             Delay_ms(300)  ;            PORTC.B1 = 0 ;               Delay_ms(300)  ;                                while   (1)  {      if (PORTB.B0 && PORTB.B1) stare = 1 ;      Delay_ms(10) ;      if (PORTB.B0 && PORTB.B1 && stare) {          PORTC.B2 = 1 ;             Delay_ms(300)  ;            PORTC.B2 = 0 ;               Delay_ms(300)  ;               .               .               .               .               .               .               .                                     while   (1)  {      if (PORTB.B0 && PORTB.B1 && PORTB.B2 && PORTB.B3 ) stare = 1 ;      Delay_ms(10) ;      if (PORTB.B0 && PORTB.B1 &&PORTB.B2 && PORTB.B3 stare) {          PORTD.B7 = 1 ;             Delay_ms(300)  ;            PORTD.B7 = 0 ;               Delay_ms(300)  ;                         break;                 }}}}}}}
Editat de Myhayxx
Link spre comentariu
  • Răspunsuri 12
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

Zile populare

Top autori în acest subiect

void main(){unsigned char val;ADCON1 = 0x07;TRISB = 0xff;TRISC = 0;TRISD = 0;while (1){  val = PORTB & 0x0f;  if ( val < 8 )  {    PORTC = 1 << val;    PORTD = 0;  }  else  {    PORTC = 0;    PORTD = 1 << (val - 8);  }  Delay_ms(300);}}



nu am incercat sa vad daca merge sau nu, dar aproximativ asa arata :)

Editat de core
Link spre comentariu

 dupa ce se face activa o iesire aceasta sa stea doar 300 ms activa dupa care sa se dezactiveze. adica sa lucreze in impulsuri. nu ar trebui sa fie ca in filmulet. cand am 0001 se activeaza iesirea sta activa 300ms dupa care se dezactiveaza. sper ca m-am facut inteles..

Editat de Myhayxx
Link spre comentariu

iti trebuie o variabila de backup sa detectezi schimbarea, altfel iti reproceseaza intrarea

void main(){unsigned char val, bck;ADCON1 = 0x07;TRISB = 0xff;TRISC = 0;TRISD = 0;bck = 0;while (1){  val = PORTB & 0x0f;  if ( val == bck )    continue;  bck = val;  if ( val < 8 )  {    PORTC = 1 << val;    PORTD = 0;  }  else  {    PORTC = 0;    PORTD = 1 << (val - 8);  }  Delay_ms(300);  PORTC = PORTD = 0;}}
Editat de core
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