|
#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
|
|