Email: Password: Remember Me | Create Account (Free)

Back to Subject List

Old thread has been locked -- no new posts accepted in this thread
???
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;
}



List of 20 messages in thread
TopicAuthorDate
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      

Back to Subject List