Jump to content
ELFORUM - Forumul electronistilor

PIC16F876 - identificare pini


pelikanu

Recommended Posts

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 to comment
  • Replies 5
  • Created
  • Last Reply

Top Posters In This Topic

  • pelikanu

    5

  • ghimpe--

    1

Top Posters In This Topic

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 to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now



×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.Terms of Use si Guidelines