功能是用光敏传感器输入模拟量信号,通过采集模拟信号,然后转化成数字信号,然后通过串口助手反馈一个值,用hex模式显示,但是问题不知道出哪里了,串口没有数据接收,请各位帮忙看看,谢谢
#include <stc12c5a60s2.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
//#define ADC_POWER 0x80
//#define ADC_SPEEDLL 0x00
//#define ADC_START 0x08
//#define ADC_FLAG 0x10
void Delay(uint n)
{
uint x;
while (n--)
{
x = 5000;
while (x--);
}
}
/*----------------------------
串口初始化
----------------------------*/
void Uar
tinit() //9600bps@11.0592MHz
{
PCON &= 0x7F; //波特率不倍速
SCON = 0x50; //8位数据,可变波特率
AUXR |= 0x04; //独立波特率发生器时钟为Fosc,即1T
BRT = 0xDC; //设定独立波特率发生器重装值
AUXR |= 0x01; //串口1选择独立波特率发生器为波特率发生器
AUXR |= 0x10; //启动独立波特率发生器
}
/*----------------------------
串口发送函数
----------------------------*/
void SendData(uchar dat)
{
SBUF = dat;
while (!TI);
TI = 0;
}
/*----------------------------
ADC初始化
----------------------------*/
void InitADC()
{
P1ASF = 0x80; //设置P1.7作为模拟口使用
ADC_RES = 0; //清除之前的结果
ADC_CONTR|=0X80;//打开ADC
电源
ADC_CONTR|=0X08;//启动ADC转换
ADC_CONTR|=0X07;//选择P1.7作为AD输入口
ADC_CONTR|=0X60;//选择AD转换速度
Delay(2);
}
void main()
{
UartInit(); //Init UART, use to show ADC result
InitADC(); //Init ADC sfr
IE = 0xa0; //Enable ADC interrupt and Open master interrupt switch //Start A/D conversion
while (1);
}
/*----------------------------
ADC 中断服务程序
----------------------------*/
void adc_isr() interrupt 5
{
ADC_CONTR|=0X80;//打开ADC电源
ADC_CONTR|=0X08;//启动ADC转换
ADC_CONTR|=0X07;//选择P1.7作为AD输入口
ADC_CONTR|=0X60;//选择AD转换速度
if(ADC_CONTR|=0x10)
{
ADC_CONTR &=0X10; //清除标志位
SendData(ADC_RES); //得到ADC高8位数据发送到串口
}
}
串口助手上面显示没有接收,但是我测试串口发送没有问题
一周热门 更多>