2
//TAREFA B
#include "c8051f3xx.h"
void configLerV (void) ;
void valorAdc (void);
unsigned char valor,i,v1,v2;
float Vlido;
void main (void)
{
__xdata __at 0x0400 float Tab[10];
Init_Device();
configLerV ();
P2_2=0;
P2_3=0;
while(RI==0);
RI=0;
//Premir carater
if(SBUF=='L')
{
valorAdc(); //Ler valor do ADC
SBUF=valor;
while(TI==0); //esperar pelo fim da transmissao
TI=0 ;
Vlido=(valor*3.3)/256 ; //converter para [0V;3.3V]
//mostrar valor lido
SBUF='T';
while(TI==0); //esperar pelo fim da transmissao
TI=0 ;
SBUF='=' ;
while(TI==0); //esperar pelo fim da transmissao
TI=0 ;
SBUF='0'+ (int)Vlido ;
while(TI==0); //esperar pelo fim da transmissao
TI=0 ;
SBUF= '.';
while(TI==0);
TI=0 ;
SBUF='0'+ (int)(Vlido*10) % 10 ;
while(TI==0);
TI=0;
SBUF='0'+ (int)(Vlido*100) % 10 ;
while(TI==0);
TI=0;
SBUF='V';
while(TI==0);
TI=0;
for(i=0;i<10;i++)
{
Tab[i]=Vlido;
}
// Acender o LED
if (Vlido>=1.00)
{
P2_2=1 ;
}
}
}
void configLerV (void)
{
TMOD=0b00100000;
TL1=256-52;
TH1=256-52;
TR1=1;
SCON=0b01010000; //modo1
IT1=1;
IE=0b10000100;//Int.Externa1
IP=0b00000100 ;// defenir como prioridade EXT1
}
void valorAdc (void)
{
AMX0P=0x14 ;
AD0BUSY=1;
while(AD0INT==0);
AD0INT=0;
SBUF=ADC0H;
while(TI==0); //esperar pelo fim da transmissao
TI=0 ;
SBUF=ADC0L;
while(TI==0); //esperar pelo fim da transmissao
TI=0 ;
v1=ADC0L>>2;
v2=ADC0H<<6;
valor=v1+v2;
}
void interruInt (void) __interrupt (2) // Externa 1
{
COMO ENVIAR OS VALOR NA TABELA , POR CANAL SÉRIE, QUANDO FAÇO INTERRUPÇÃO.
}