??? 09/15/05 15:53 Read: times |
#101137 - again Responding to: ???'s previous message |
sorry about the comments in spanish. there is the code with the comments in english. i've make a few modifications to the code.
the pic is at89c52. /************************************************* SERIAL.H **************************************************/ #include <at89x52.h> unsigned char ind_trama, trama[5]; void cfg_pto_serial(){ ES=0; //disable serial port interrupt TI=0; //clears TI SCON=0xF0; //uart mode 3 (9 bit), REN=1 TMOD=TMOD|0x20; //Timer 1 mode 2 TH1=0xFD; //19200 Bds TL1=0xFD; //19200 Bds ES=1; //enable serial port interrupt TR1=1; //run Timer 1 } void puerto_serial_event() interrupt 4{ ES=0; if(TI==1){ //if transmition occurs TI=0; //clears TI } if (RI==1){ //if reception occurs RI=0; //clears RI if(RB8){ SM2=0; //data mode 2 } else{ ind_trama++; if(ind_trama>4){ ind_trama=0; } trama[ind_trama]=SBUF; SM2=1; //data mode 1 } } ES=1; } void enviar_comando(unsigned char direccion, unsigned char comando, unsigned char parametros[3]){ unsigned char i; SBUF=direccion; while(TI==1); SBUF=comando; while(TI==1); for(i=0;i<3;i++){ trama[2+i]=parametros[i]; while(TI==1); } } /************************************************* juego.c **************************************************/ #include <at89x52.h> #include "serial.h" #include <stdio.h> //procedures void inicializar(); void visualizar_display(char,long,bit,bit); void restraso(); void capturar_entradas() interrupt 0; void descargar_salidas() interrupt 1; #define V 1 #define F 0 #define direccion_local 0x01 #define display_credito 0x02 #define display_apuesta 0x03 #define display_doblada 0x04 #define display_noapostado 0x05 #define display_nopremio 0x06 #define display_premio 0x07 //vars long total_entradas, total_salidas; long creditos, ganado; float pozo_juego, pozo_doblada; unsigned int numero_juego; unsigned char porcentaje_pago[]={65, 70, 75, 80, 85, 90}; unsigned int tabla_premios[][]={{400, 50}, {500, 60}, {600, 60}, {700, 70}, {800, 80}}; unsigned char tabla_apuestas[]={1, 2, 3, 4, 5, 10, 15, 20, 30, 40, 50, 60, 70, 80, 90, 100}; unsigned char creditos_por_pulsos[]={1, 2, 5, 10, 20, 25, 50, 100}; unsigned char apuesta, valor_credito, ind_apuesta; unsigned char error; sbit at 0x92 btnN1; sbit at 0x93 btnN2; sbit at 0x94 btnN3; sbit at 0x95 btnDbl1; sbit at 0x96 btnDbl2; sbit at 0x97 btnDbl; sbit at 0xA6 btnIniciar; sbit at 0xA7 btnApuesta; sbit at 0xB2 swEnt; sbit at 0xB3 swSal; sbit at 0xB4 swLlave; sbit at 0xA0 swPago0; sbit at 0xA1 swPago1; sbit at 0xA2 swPago2; sbit at 0xA3 swPremio0; sbit at 0xA4 swPremio1; sbit at 0xA5 swPremio2; sbit at 0xB5 swCred0; sbit at 0xB6 swCred1; sbit at 0xB7 swCred2; void main (void){ inicializar(); while(1){ visualizar_display(display_premio,ganado,F,F); visualizar_display(display_credito,creditos,F,V); visualizar_display(display_apuesta,tabla_apuestas[ind_apuesta],F,V); visualizar_display(display_doblada,0,F,F); visualizar_display(display_noapostado,0,V,V); //cambiar el numero por la variable visualizar_display(display_nopremio,0,V,V); //cambiar el numero por la variable } } void retraso(){ unsigned char i; P1=SBUF; for(i=0;i<255;i++){ } } void inicializar(){ char i; ET0=0; //disable interrupt TIMER 0 ET1=0; //disable interrupt TIMER 1 ET2=0; //disable interrupt TIMER 2 EX0=1; //enable interrupt EXT0 INT0 EX1=1; //enable interrupt EXT1 INT1 cfg_pto_serial(); //set the serial port settings EA=1; //enable global interrupts //init vars total_entradas=0; total_salidas=0; creditos=0; ganado=0; ind_apuesta=0; numero_juego=0; pozo_juego=3000; pozo_doblada=1500; error=0; apuesta=tabla_apuestas[ind_apuesta]; //init displays for(i=0;i<10;i++){ visualizar_display(display_premio,i,V,V); visualizar_display(display_credito,i,V,V); visualizar_display(display_apuesta,i,V,V); visualizar_display(display_doblada,i,V,V); visualizar_display(display_noapostado,i,V,V); visualizar_display(display_nopremio,i,V,V); P2=i; retraso(); } } void visualizar_display(char display, long numero, bit ceros, bit ultDig){ unsigned char bufferEnv[]={0xff, 0xff, 0xff}; unsigned char i,k,vartmp; k=-1; for(i=0;i<6;i++){ vartmp=(unsigned char)numero%10; if(i%2!=0){ vartmp=vartmp<<4; vartmp=vartmp&0xf0; } else{ vartmp=vartmp&0x0f; k++; } if((numero==0)&&(ceros==F)){ vartmp=0xff; } bufferEnv[k]=bufferEnv[k]|vartmp; numero=numero/10; } if((ultDig==V)&&(bufferEnv[0]==0xff)){ bufferEnv[0]=0; } enviar_comando(display,0,bufferEnv); } void capturar_entradas() interrupt 0{ unsigned char vartmp=P3>>5; valor_credito=creditos_por_pulsos[vartmp]; creditos=creditos+valor_credito; total_entradas=total_entradas+valor_credito; } void descargar_salidas() interrupt 1{ total_salidas=total_salidas+creditos; creditos=0; } /************************************************* displays.c **************************************************/ #include <at89x52.h> #include "serial.h" #include <stdio.h> //procedures void inicializar(); #define V 1 #define F 0 #define direccion_master 0x01 #define direccion_local 0x02 //vars unsigned char error; void main (void){ inicializar(); while(1){ while(error==0){ if(ind_trama==4){ //the data from master is to me if(trama[0]==direccion_local){ P2=trama[2]; } ind_trama=0; } P1=ind_trama; } } } void inicializar(){ ET0=0; //disable interrupt TIMER 0 ET1=0; //disable interrupt TIMER 1 ET2=0; //disable interrupt TIMER 2 EX0=0; //enable extern interrupt 0 INT0 EX1=0; //enable extern interrupt 1 INT1 cfg_pto_serial(); //set serial port settings EA=1; //enable global interrupts //inicializacion de las variables error=0; ind_trama=0; } |
Topic | Author | Date |
Serial communication between 2 at89c52 | 01/01/70 00:00 | |
I had a quick look and since I am not | 01/01/70 00:00 | |
pic? | 01/01/70 00:00 | |
again | 01/01/70 00:00 | |
re your ISR | 01/01/70 00:00 | |
i've modified the ISR | 01/01/70 00:00 | |
get it going with a PC at one end that g | 01/01/70 00:00 | |
i'll try 2 do that | 01/01/70 00:00 | |
transmit | 01/01/70 00:00 | |
sorry | 01/01/70 00:00 | |
No, do it in the interrupt | 01/01/70 00:00 | |
must be like this? | 01/01/70 00:00 | |
should be | 01/01/70 00:00 | |
thanks | 01/01/70 00:00 | |
NO | 01/01/70 00:00 | |
problems again, pls help me | 01/01/70 00:00 | |
still don't get it![]() | 01/01/70 00:00 | |
with only two processors why are you con | 01/01/70 00:00 | |
i've said | 01/01/70 00:00 | |
then this is a bad title. | 01/01/70 00:00 |