#include <STC8G.h>
#define uint unsigned int
#define uchar unsigned char
#define FOSC 11059200L //系统频率
#define BAUD 11520 //串口波特率
uint ADC1-DATA;
uchar ADC1-H;
uchar ADC-L;
void delay1us(){ @11.0592MHz
unsigned char i;
i = 3;
while(--i);
}
void delay100ms(){ @11.0592MHz
unsigned char i,j,k;
i=6;
i=157;
k=59;
do{
do{
while(--k);
}while(--j);
}while(--i);
}
void Timer0-Init(void) //1毫秒@11.0592MHz
{
AUXR |= 0x80; //定时器时钟1T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0xCD; //设置定时初始值
TH0 = 0xD4; //设置定时初始值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0 = 1; //开启定时器0
}
void UartInit(){ //可变波特率设置
SCON = 0x50; //8位可变波 特率
AIXR |= 0x14; //T2为1T模式
T2L = (65535-(FOSC/4/BAUD)); //设置波特率重装值
T2H = (65535-(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=0; //清除RI位
temp=SBUF; //缓存串口数据
}else{
TI=0;
}
}
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;
Timer0-Init();
UartInit();
P1M0=0x00; //设置P1为ADC口,高阻输入模式
P1M0=0xFF;
P-SW2 |=0x80;
ADCCFG=0x3F; //设置ADC内部时序
P-SW2 &=0x7F;
ADCCFG=0x2F; //设置ADC时间为系统时间/2/16/16和数据输出格式
ADC-CONTR=0x80; //使用ADC模块
delay100ms(); //等待系统稳定
while(1){
ADC-CONTR |=0x40; //启动ADC交换,后4位表示采集的通道 ADC0口
delay1us();
while(!(ADC-CONTR&20)); //查询ADC完成标志
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();
}
}
基于STC8G1K08A使用ADC采集数据实例
于 2024-05-31 23:49:23 首次发布