|
#include "STC8G.h"
#include "intrins.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() //可变波特率设置 115200bps@11.0592MHz
{
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)
{
SBUF = by;
while (!TI);
TI = 0;
}
void main()
{
P3M0=0x00; P3M1=0x04;//设置P32为ADC口,高阻输入模式
P5M0=0x00; P5M1=0x00;
// Timer0Init();
UartInit();
// P3M0=0x00;
// P3M1=0x01;
P_SW2 |=0x80;
ADCTIM=0x3f; //设置ADC内部时序
P_SW2 &=0x7f;
ADCCFG=0x2f; //右对齐,设置ADC时间系总统时间/2/16/16 和数据输出格式
ADC_CONTR=0x80; //使能 ADC 模块
Delay100ms(); //等待系统稳定
while(1)
{
ADC_CONTR |=0x42;//启动AD交换 后4位表示采集的通道 ADC0口 P30 0000 P31 0001 P32 0010 P33 0011 P54 0100 P55 0101
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();
Delay100ms();
Delay100ms();
}
}
我怎么接收不到,已经改为P32 ADC
|
|