#include "stc12c5A60S2.h"
#include <stdio.h>
#include "intrins.h"
#define uint unsigned char
#define uchar unsigned int
unsigned char num1;
float a=0;
unsigned char sd[7]={0xfa,0x00,0x00,0x00,0xaf,0xA9,0x16};
void AD_init();
void serial_init();
void delay(unsigned int b);
void sent(unsigned char dat);
unsigned int adc_result;
float AD_work();
unsigned int AD_get();
// int word;
// char i;
void main()
{
AD_init();
serial_init();
sent(0x01) ;
while(1)
{
delay(1000);
a=AD_work();
a=a-0.09;
if(a<0)a=0;
ES=0;
TI=1;
printf("The P1.7 voltage is %f\n",a);
ES=1;
TI=0;
}
}
unsigned int AD_get( )//10位ad
{
ADC_CONTR|=0xe0; //开电源和设置转换时间11100000b
delay(100);
ADC_CONTR |= 0x08;//启动A/D转开始adc_start=1;1000b
nop_();
nop_();
nop_();
nop_();
while(!(ADC_CONTR&0x10)); //转换完成标志位ADC_FLAG清0
ADC_CONTR&=0xe7;
adc_result=ADC_RES;//传送10位结果的高八位
adc_result=(adc_result <<2) | ADC_RESL;//低二位
return adc_result;
}
float AD_work()
{
float AD_val;
AD_val=AD_get();//p1.7
AD_val=(AD_val*12)/1024;
return AD_val;
}
//------------------------------------------------------------------------------
void delay(unsigned int a) //1ms
{
unsigned int i;
while (--a!=0)
for(i=600;i>0;i--);
}
//------------------------------------------------------------------------------
void serial_init()
{
TMOD=0x21;
TH1=0xfd;
TL1=0xfd;
TH0=(-50000)/256;
TL0=(-50000)%256;
SCON=0x50;
TR1=1;
TR0=1;
REN=1;
EA=1;
ES=0;
}
//------------------------------------------------------------------------------
void AD_init()
{
P1ASF=0x80; //p1.7口全为ad转换
AUXR1=0x00;
ADC_RES=0; //高8位
ADC_RESL=0; //低2位
ADC_CONTR=0x87;//ADC_POWER打开,P1.7为AD转换口
delay(20); //
}
void sent(unsigned char dat)
{
ES=0;
TI=0;
SBUF=dat;
while(TI == 0);
TI = 0;
ES=1;
}
void time0() interrupt 1
{
TH0=(-50000)/256;
TL0=(-50000)%256;//设置定时初值 50ms
num1++;
}
//void sent()
//{
// char i,a;
// a=AD_work();
//// a=a*10-0.43;
////if(a<0)a=0;
//// a=a*10;
// if(a<0.6)sd[1]=0x00;
// if(4>a>0.6)sd[1]=0x01;
// if(4<a<8)sd[1]=0x05;
// if(20>a>8)sd[1]=0x03;
// if(a>20)sd[1]=0x04;
// sd[5]=sd[0]+sd[1]+sd[2]+sd[3]+sd[4];
// ES=0;
// for(i=0;i<7;i++)
// {
// SBUF=sd[i];
// while (!TI);
// TI = 0;
// }
// ES=1;
//}
/*#include <stc12c5A60S2.h>
#include <intrins.h>
void DELAY_MS (unsigned int a)
{
unsigned int i;
while( --a != 0){
for(i = 0; i < 600; i++);
}
}
void UART_init (void)
{
EA=1;
ES=1;
ET1=0;
TMOD |= 0x20; //???T/C1????2
SCON = 0x50; //??????1,??????(SCON = 0x40 ???????)
TH1 = 0xFd; //??????8???
TL1 = 0xFd; //
PCON = 0x80;
TR1 = 1;
}
void UART_T (unsigned char UART_data)
{
SBUF = UART_data; //
while(TI == 0); //
TI = 0; //
}
void Read_init (unsigned char CHA)
{
unsigned char AD_FIN=0; //??A/D????
CHA &= 0x01; //??ADC?8???????(0000 0111 ?0?5?)
ADC_CONTR = 0x40; //ADC?????(0XX0 0000 ??XX????,?????????)
_nop_();
ADC_CONTR |= CHA; //??A/D????
_nop_();
ADC_CONTR |= 0x80; //??A/D??
DELAY_MS(1); //?????????(1ms??)
}
unsigned char Read (void)
{
unsigned char AD_FIN=0; //??A/D????
ADC_CONTR |= 0x08; //??A/D??(0000 1000 ?ADCS = 1)
_nop_();
_nop_();
_nop_();
_nop_();
while (AD_FIN ==0) //??A/D????
{
AD_FIN = (ADC_CONTR & 0x10); //0001 0000??A/D?????
}
ADC_CONTR &= 0xE7; //1111 0111 ?ADC_FLAG?, ??A/D??,
return (ADC_RES); //??A/D????(8?)
}
void main (void)
{
unsigned char R;
UART_init();//
Read_init(0);//ADC???
//P1M0 = 0x01; //P1.7~.0:0000 0001(??)//??:??ADC??????????IO??????????
//P1M1 = 0x00; //P1.7~.0:0000 0000(??)
while(1)
{
R = Read ();
UART_T (R); //?????,?ADC?????????
}
}*/