基于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 11:06:51 浏览: 43
以下是你需要的C语言程序: ```c #include <STC8.H> #define BAUDRATE 115200 unsigned char rcv_buf[32]; unsigned char rcv_len = 0; unsigned char adc_flag = 0; unsigned int adc_result = 0; void serial_init() { TMOD &= 0x0F; TMOD |= 0x20; // use timer 1 mode 2 to generate baudrate TH1 = 256 - (FOSC / 12 / BAUDRATE); TL1 = TH1; TR1 = 1; // start timer 1 SCON = 0x50; // mode 1, 8-bit data, 1 stop bit ES = 1; // enable serial interrupt } void adc_init() { P1ASF = 0x08; // set P1.3 as analog input pin ADC_RES = 0x80; // set reference voltage to VDD ADC_CONTR = 0xE0; // enable ADC and set clock to FOSC/2/16 ADC_CONTR |= 0x08; // enable digital filter ADC_CONTR |= 0x10; // enable ADC interrupt } void timer2_init() { T2CON = 0x34; // set timer 2 mode, enable timer 2 interrupt, set clock to FOSC/12 RCAP2H = 0xFF; RCAP2L = 0xDB; // set reload value for 115200 baudrate TH2 = RCAP2H; TL2 = RCAP2L; TR2 = 1; // start timer 2 } void send_char(unsigned char c) { SBUF = c; // send character while (TI == 0); TI = 0; // clear transmit interrupt flag } void send_str(unsigned char *str) { while (*str != '\0') { send_char(*str++); } } void main() { serial_init(); adc_init(); timer2_init(); EA = 1; // enable global interrupt while (1) { if (adc_flag) { adc_flag = 0; adc_result >>= 4; // divide by 16 to get average value send_char(adc_result >> 8); send_char(adc_result & 0xFF); ADC_CONTR |= 0x08; // start next conversion } } } void serial_isr() interrupt 4 { if (RI) { RI = 0; // clear receive interrupt flag rcv_buf[rcv_len++] = SBUF; } if (TI) { TI = 0; // clear transmit interrupt flag } } void adc_isr() interrupt 5 { unsigned char i; adc_result = 0; for (i = 0; i < 16; i++) { adc_result += ADC_RES; } adc_flag = 1; } ``` 程序的详细解释如下: 1. `BAUDRATE` 定义了串口的波特率。 2. `rcv_buf` 和 `rcv_len` 定义了接收缓冲区和接收数据的长度。 3. `adc_flag` 和 `adc_result` 用于保存 ADC 转换完成标志和结果。 4. `serial_init()` 函数用于初始化串口1,设置波特率为115200,帧格式为1位起始位,8位数据,无奇偶校验位,1位停止位,并启用串口中断。 5. `adc_init()` 函数用于初始化 ADC,设置P1.3口为输入引脚,ADC时钟为系统时钟/2/16,使能数字滤波,并启用 ADC 中断。 6. `timer2_init()` 函数用于初始化定时器 T2,设置为 FOSC/12,用于生成波特率时序。 7. `send_char()` 函数用于发送一个字符到串口。 8. `send_str()` 函数用于发送一个字符串到串口。 9. `main()` 函数中初始化串口、ADC和定时器,并启用全局中断。在死循环中判断 ADC 转换完成标志,如果完成,则将转换结果通过串口发送到 PC。 10. `serial_isr()` 函数为串口中断处理函数,用于接收串口数据。 11. `adc_isr()` 函数为 ADC 中断处理函数,用于保存 ADC 转换结果并启动下一次转换。

相关推荐

最新推荐

recommend-type

STC8H8K64U原理图(上)

STC8H8K64U原理图(上)
recommend-type

STC8H系列单片机技术参考手册-20200826.pdf

STC8H1K系列、STC8H2K系列、STC8H3K系列、STC8H8K系列单片机技术参考手册,STC宏晶科技深圳国芯人工智能有限公司官方文件。,
recommend-type

基于STC89C51单片机的出租车计费器设计

本文以单片机STC89C51 为核心设计一款出租车计费器, 使能够实现里程及对应价格的显示,由于采用芯片的自动定时计数,所以能够准确的计算出总的行车里程并能转换成对应的价格来,这样能够避免出租车司机作弊的可能性...
recommend-type

基于STC单片机的智能LED路灯控制器设计

为了充分节约能源,提高路灯控制系统的智能化,介绍了一种基于STC 单片机的智能LED 路灯控制器,引入在线监测、PWM 和电力线载波通信技术,实践应用效果良好,具有成本低、运行稳定的特点。本控制器对智能化路灯管理...
recommend-type

如何用AltiumDesigner绘制STC89C51单片机原理图

在学习AltiumDesigner或者51单片机的过程中,当我们要绘制一个带有STC单片机的电路图或者要制作带有STC单片机的PCB(印制电路板)时,我们会发现在AltiumDesigner自带的所有库中都没有找到STC的单片机原理图。...
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

MATLAB柱状图在信号处理中的应用:可视化信号特征和频谱分析

![matlab画柱状图](https://img-blog.csdnimg.cn/3f32348f1c9c4481a6f5931993732f97.png) # 1. MATLAB柱状图概述** MATLAB柱状图是一种图形化工具,用于可视化数据中不同类别或组的分布情况。它通过绘制垂直条形来表示每个类别或组中的数据值。柱状图在信号处理中广泛用于可视化信号特征和进行频谱分析。 柱状图的优点在于其简单易懂,能够直观地展示数据分布。在信号处理中,柱状图可以帮助工程师识别信号中的模式、趋势和异常情况,从而为信号分析和处理提供有价值的见解。 # 2. 柱状图在信号处理中的应用 柱状图在信号处理
recommend-type

HSV转为RGB的计算公式

HSV (Hue, Saturation, Value) 和 RGB (Red, Green, Blue) 是两种表示颜色的方式。下面是将 HSV 转换为 RGB 的计算公式: 1. 将 HSV 中的 S 和 V 值除以 100,得到范围在 0~1 之间的值。 2. 计算色相 H 在 RGB 中的值。如果 H 的范围在 0~60 或者 300~360 之间,则 R = V,G = (H/60)×V,B = 0。如果 H 的范围在 60~120 之间,则 R = ((120-H)/60)×V,G = V,B = 0。如果 H 的范围在 120~180 之间,则 R = 0,G = V,B =
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。