Sari la conținut
ELFORUM - Forumul electronistilor

PIC16F876 - identificare pini


pelikanu

Postări Recomandate

Am o problema de felul urmator:O bucata pic16f876 - care se conecteaza printr-un max232 la portul serial; Partea lui MAX232 merge cum trebuie; insa cum imi pot da seama dupa programul microcontroller-ului care sunt pinii de lare trebuie sa leg Rx Tx la 232 si care sunt pinii la care trebuie sa leg Rx Tx la mouse?In schema atasata de mine, K1 ar trebui sa corespunda RxTx de la mouse, iar RB6 si RB7 ar trebui sa fie iesirea TxRx catre 232 - sunt convins ca-i gresit (deoarece nu merge, insa programul cu siguranta este bun)Atasez programul, sper sa fie cineva mai in tema ca mine (eu sunt putin pe dinafara)#define clock portb.f7#define data portb.f6#define tris_clock trisb.f7#define tris_data trisb.f6#define tmr_on t1con.f0=1#define tmr_off t1con.f0=0unsigned lungime=100;unsigned short valori[20];unsigned short in,flag,uart_recive;int x_position=0x00;int y_position=0x00;//portd.f1=clock//portd.f0=datastruct {unsigned read_flag :1;unsigned write_flag :1;unsigned if_flag :1;unsigned first_read :1;} flags;short tmp1=0;short tmp2=0;void init(void){usart_init(57600);trisb=0xf3;portb=0;tris_clock=1;tris_data=1;clock=0;data=0;in=0;flag=0;uart_recive=0;flags.read_flag=0;flags.write_flag=0;flags.if_flag=1;flags.first_read=0;///timertmr1l=0x3c;tmr1h=0xaf;t1con=0x00;//*****usartintcon=0b11000000;pie1=0b00100001;pir1.f0=0;pir1.f5=0;}//portd.f1=clock//portd.f0=dataunsigned short cit(void){unsigned short out,out2,i;out=0;while(data&&clock){}if(clock==1&&data==0){{while(clock){}while(!clock){}for(i=0;i<8;i++){while(clock){}//clock lowdelay_us(5);if(data){out=out|0x80;}//out.f7=1;}//else{//out.f7=0;}if(i!=7){out=out>>1;}while(!clock){}}}delay_us(100);// usart_write(out);return out;// delay_ms(1000);} }void trimite(unsigned short out){short i,par=1;for(i=0;i<8;i++){if((out>>i)&1){par=~par;}} //calculez paritateatris_data=0;tris_clock=0;clock=0; //pull clock lowdelay_us(150);data=0; //pull data lowclock=1; //realease clocktris_clock=1;while(clock){} //wait for device to pull clock highfor(i=0;i<8;i++){if((out>>i)&1){data=1;} //***********else{data=0;} //transmit datawhile(!clock){} //********while(clock){} //********}if(par){data=1;} //********parityelse{data=0;}while(!clock){}while(clock){}data=1;while(!clock){} //*****stop bitwhile(clock){}tris_data=1;}void mouse_init(){Delay_ms(200);trimite(0xff); //resetdelay_us(200);cit();delay_us(200);cit();delay_us(200);cit();delay_ms(10);///resetDelay_ms(200);trimite(0xff); //resetdelay_us(200);cit();delay_us(200);cit();delay_us(200);cit();delay_ms(10);//********Delay_ms(200);trimite(0xff); //resetdelay_us(200);cit();delay_us(200);cit();delay_us(200);cit();delay_ms(10);trimite(0xE8); //resolutiondelay_us(200);cit();delay_ms(10);trimite(0x03); //resolution 1 cont/mmdelay_us(200);cit();delay_ms(10);//***************sample ratetrimite(0xf3); //resolutiondelay_us(200);cit();delay_ms(10);trimite(0xC8); //resolution 1 cont/mmdelay_us(200);cit();delay_ms(10);//*************************trimite(0xe6); //scaling 1:1delay_us(200);cit();delay_ms(10);trimite(0xf0); //remote modedelay_us(200);cit();delay_ms(10);}short citeste_mouse(){unsigned short stare,x,y;x=0;y=0;trimite(0xEB); //read datadelay_us(100);cit();delay_us(100);stare=cit();delay_us(100);x=cit();delay_us(100);y=cit();//if(stare.f4){x=x-1;x=~x;x_position=x_position-x;}else{x_position=x_position+x;}if(stare.f5){y=y-1;y=~y;y_position=y_position-y;}else{y_position=y_position+y;}//done//usart_write(y_position);return y;}void interrupt(){if( pir1.f0){t1con.f0=0;tmr1l+=0xbf;tmr1h=0x3c;t1con.f0=1;portb.f3=~portb.f3;flags.read_flag=1;pir1.f0=0;}if(pir1.f5){uart_recive=usart_read();switch(uart_recive){case 1 : tmr_on;break;default : lungime=100*uart_recive;break;}pir1.f5=0;}}void txt_out(char *out){short index=0;do{usart_write(out[index++]);}while(index<7);}void main(){char txt[7];unsigned i=0;short tem;init();mouse_init();//tmr_on;while(1){if(flags.read_flag){if(flags.write_flag==0){if(flags.first_read){citeste_mouse();flags.first_read=0;}if(flags.if_flag==1){tmp1=citeste_mouse();flags.if_flag=0;}else{tmp2=citeste_mouse();flags.if_flag=1;tem=tmp1-tmp2;//usart_write(tem);if((tem>2)||(tem<-2)){flags.write_flag=1;tmp1=0;tmp2=0;flags.if_flag=1;}}portb.f2=~portb.f2;}else{portb.f2=0;citeste_mouse();//usart_write(y_position);IntToStr(y_position,txt);//valori[i++]=y_position;txt_out(txt);i++;if(i>lungime){flags.write_flag=0; i=0; tmr_off;y_position=0;portb.f3=0;flags.first_read=1;}}//citeste_mouse();//usart_write(y_position);flags.read_flag=0;}}}

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

Top autori în acest subiect

  • pelikanu

    5

  • ghimpe--

    1

Top autori în acest subiect

Mai exact, cred ca si felul in care am exprimat problema-i de vina, vreau sa aflu unde sa leg cele 4 fire, care in schema mea sunt legate la RB6 si RB7 (pentru 232) si la RB0 si RB1 pentru mouse

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