基于STC8H8K DevKit开发板仿真器功能,设置工作频率为11.0592MHz,利用Keil C51 V9.61设计一段C语言程序, (1)设置串口1工作在模式1,使用P4.3、P4.4引脚作为RXD和TXD引脚,使用定时器T2作为波特率发生器,波特率设置为115200,帧格式为:1位起始位,8位数据,无奇偶校验位,1位停止位。采用中断方式收发数据, (2)设置P1.3口为ADC输入引脚,设置ADC时钟为系统时钟/2/16,使能数字滤波(转换16次并取平均值),使能中断,中断后,保存转换结果并启动下一次AD转换 (3)在主程序中初始化串口和ADC,进入死循环,在死循环中判断AD转换完成标志,通过串口将转换结果(两个字节)发送到PC,用串口调试助手接收数据,改变NTC的温度,观察结果的变化。
时间: 2023-10-02 21:05:14 浏览: 34
以下是基于STC8H8K DevKit开发板仿真器功能的C语言程序:
```c
#include <STC8.H>
// 串口1中断服务函数
void uart1_isr() interrupt 4
{
if (RI)
{
RI = 0; // 清除接收中断标志
// 接收数据
}
if (TI)
{
TI = 0; // 清除发送中断标志
// 发送数据
}
}
// ADC中断服务函数
void adc_isr() interrupt 5
{
static unsigned int adc_value;
ADC_CONTR = 0x90; // 开始新一轮转换
if (ADC_CONTR & 0x10) // 判断转换是否完成
{
adc_value += ADC_RES;
if (--ADC_REMAIN == 0) // 转换完成
{
ADC_FLAG = 0; // 清除标志
ADC_RES = adc_value >> 4; // 取平均值
adc_value = 0;
// 发送ADC结果
}
}
}
void main()
{
// 初始化串口1
P4M0 = 0x08; // P4.3设置为TXD
P4M1 = 0x08;
P4M0 |= 0x10; // P4.4设置为RXD
P4M1 &= ~0x10;
SCON = 0x50; // 模式1,允许接收
TMOD &= 0x0F;
TMOD |= 0x20; // 定时器2工作在模式2,自动重载
TH2 = 0xFF; // 波特率115200
TL2 = 0xFD;
RCAP2H = TH2;
RCAP2L = TL2;
TR2 = 1; // 启动定时器2
ES = 1; // 开启串口1中断
EA = 1; // 开启总中断
// 初始化ADC
P1ASF |= 0x08; // P1.3设置为ADC输入引脚
ADC_RES = 0;
ADC_REMAIN = 16;
ADC_CONTR = 0x90; // 开始新一轮转换
EADC = 1; // 开启ADC中断
while (1)
{
if (!ADC_FLAG) // 判断AD转换是否完成
{
// 发送ADC结果
ADC_FLAG = 1;
}
}
}
```
在主程序中,死循环中判断AD转换完成标志,如果完成,则通过串口将转换结果发送到PC。可以使用串口调试助手接收数据,并改变NTC的温度,观察结果的变化。