stc15w4k32s4通过串口发送ADC采集数据代码
时间: 2023-08-06 07:04:14 浏览: 128
ADC采集DAC发出的数据并通过串口发送
以下是基于STC15W4K32S4单片机的通过串口发送ADC采集数据的代码,其中使用了ADC模块、UART模块和中断:
```c
#include <STC15W4K32S4.H>
#define FOSC 24000000L
#define BAUD 9600L
#define TIMER_1MS (65536-FOSC/1000)
unsigned int ADC_value;
unsigned char ADC_high, ADC_low;
void ADC_Init(void);
void UART_Init(void);
void SendData(unsigned char dat);
void SendADC(void);
void main(void)
{
ADC_Init(); //初始化ADC
UART_Init(); //初始化串口
EA = 1; //打开总中断
while(1)
{
ADC_CONTR = 0x88; //开始一次ADC转换
while(!(ADC_CONTR & 0x20)); //等待ADC转换完成
ADC_value = ADC_RES; //读取ADC转换结果
SendADC(); //发送ADC采集数据
}
}
void ADC_Init(void)
{
P1ASF = 0x01; //将P1.0设置为ADC输入口
ADC_RES = 0; //清除ADC转换结果寄存器
ADC_CONTR = 0x80; //ADC转换时钟为系统时钟的1/16
}
void UART_Init(void)
{
SCON = 0x50; //8位数据位,可变波特率
TMOD &= 0x0F; //清除定时器1的控制位
TMOD |= 0x20; //定时器1工作在模式2,自动重载
TH1 = TL1 = TIMER_1MS; //设置定时器1初值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
}
void SendData(unsigned char dat)
{
SBUF = dat; //将数据存入发送缓冲区
while(!TI); //等待发送完成
TI = 0; //清除发送标志位
}
void SendADC(void)
{
ADC_high = ADC_value >> 8; //获取ADC采集数据高8位
ADC_low = ADC_value & 0xFF; //获取ADC采集数据低8位
SendData(ADC_high); //发送高8位数据
SendData(ADC_low); //发送低8位数据
}
void UART_ISR(void) interrupt 4
{
if(TI) //检测是否为发送中断
{
TI = 0; //清除发送标志位
}
if(RI) //检测是否为接收中断
{
RI = 0; //清除接收标志位
}
}
```
这段代码实现了单片机通过ADC采集数据,并通过串口发送采集数据的功能。其中,ADC_Init()函数用于初始化ADC,UART_Init()函数用于初始化串口,SendData()函数用于发送数据,SendADC()函数用于将ADC采集数据拆分为高8位和低8位分别发送。注意,在单片机中断服务函数中需要检测是否为发送或接收中断,分别清除标志位。
阅读全文