基于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次并取平均值),使能中断,中断后,保存
时间: 2023-12-07 11:02:28 浏览: 106
ADC转换结果到全局变量中,并通过串口1发送。以下是示例代码:
```
#include <STC8.H>
#define BAUDRATE 115200UL
#define T2_RELOAD_VALUE (65536UL - FOSC / 4 / BAUDRATE)
volatile unsigned int adc_result = 0; // 存储ADC转换结果
void init_uart()
{
SCON = 0x50; // 设置串口为模式1,允许接收
AUXR |= 0x04; // 定时器2时钟选择为FOSC/4
T2L = T2_RELOAD_VALUE % 256; // 设置定时器2重载值
T2H = T2_RELOAD_VALUE / 256;
AUXR |= 0x10; // 启动定时器2
IE2 |= 0x10; // 允许串口1中断
}
void init_adc()
{
P1ASF |= 0x08; // P1.3设为ADC输入
ADC_RES = 0; // 清除上次转换结果
ADC_CONTR = 0xE0; // ADC转换时钟为系统时钟/2/16,使能数字滤波,使能中断
}
void uart_send_byte(unsigned char byte)
{
while (!TI); // 等待上次发送完成
TI = 0; // 清除发送完成标志
SBUF = byte; // 发送数据
}
void uart_send_string(unsigned char *str)
{
while (*str != '\0')
{
uart_send_byte(*str);
str++;
}
}
void adc_isr() interrupt 5
{
adc_result = ADC_RES * 256 + ADC_RESL; // 保存ADC转换结果
uart_send_string("ADC result: ");
uart_send_byte((adc_result >> 8) & 0xFF);
uart_send_byte(adc_result & 0xFF);
uart_send_byte('\r');
uart_send_byte('\n');
ADC_CONTR = 0xE0; // 开始下一次转换
}
void main()
{
init_uart();
init_adc();
EA = 1; // 开启总中断
while (1);
}
```
阅读全文