#include "STC8G.h"
#define uint unsigned int
#define uchar unsigned char
#define FOSC 1105920L //系统频率
#define BAUD 11520 //串口波特率
uint ADC1_DATA;
uchar ADC1_H;
uchar ADC1_L;
void Delay1us() //@11.0592MHz
{
unsigned char i;
i = 3;
while (--i);
}
void Delay100ms() //@11.0592MHz
{
unsigned char i, j, k;
i = 6;
j = 157;
k = 59;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void Timer0Init() //1毫秒@11.0592MHz
{
AUXR |= 0x80; //定时器时钟1T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0xCD; //设置定时初值
TH0 = 0xD4; //设置定时初值
ET0 = 1; //开启定时器0
TR0 = 1; //定时器0开始计时
}
void UartInit() //可变波特率设置
{
SCON = 0x50; //8位可变波特率
AUXR |= 0x14; //T2为1T模式
T2L = (65536 - (FOSC/4/BAUD)); //设置波特率重装值
T2H = (65536 - (FOSC/4/BAUD))>>8;
ES=1;
EA=1;
}
void time0() interrupt 1
{
TL0 = 0xCD; //设置定时初值
TH0 = 0xD4; //设置定时初值
}
void Uart() interrupt 4 using 1
{
unsigned char temp;
if (RI)
{
RI = 0; //清除RI位
temp = SBUF; //缓存串口数据
}
else
{
TI = 0; //清除TI位
}
}
void send_byte(uchar by)
{
TI = 0;
SBUF = by;
while(!TI);
TI = 0;
}
void main()
{
P0M0=0x00; P0M1=0x00;
P1M0=0x00; P1M1=0x00;
P2M0=0x00; P2M1=0x00;
P3M0=0x00; P3M1=0x00;
P4M0=0x00; P4M1=0x00;
P5M0=0x00; P5M1=0x00;
Timer0Init();
UartInit();
P1M0=0x00; //设置P1为ADC口,高阻输入模式
P1M1=0xff;
P_SW2 |=0x80;
ADCTIM=0x3f; //设置ADC内部时序
P_SW2 &=0x7f;
ADCCFG=0x2f; //设置ADC时间系总统时间/2/16/16 和数据输出格式
ADC_CONTR=0x80; //使能 ADC 模块
Delay100ms(); //等待系统稳定
while(1)
{
ADC_CONTR |=0x40;//启动AD交换 后4位表示采集的通道 ADC0口
Delay1us();
while(!(ADC_CONTR&0x20));//查询ADC完成标志
ADC_CONTR &=~0x20;//清完成标志
ADC1_H=ADC_RES;
ADC1_L=ADC_RESL;
ADC1_DATA=ADC1_H*256 + ADC1_L;
send_byte(ADC1_DATA/1000 + 0x30);
send_byte(ADC1_DATA%1000/100 + 0x30);
send_byte(ADC1_DATA%100/10 + 0x30);
send_byte(ADC1_DATA%10 + 0x30);
send_byte(0x0a);
Delay100ms();
}
}
评论15