简易数字直流电压表电路及程序
[09-11 23:01:46] 来源:http://www.88dzw.com 单片机学习 阅读:8334次
文章摘要:2.前4个I/OCLOCK周期的下降沿输出前次转换结果的第2、第3、第4和第5个最高有效位。在I/OCLOCK第4个高电平至低电平的跳变之后,片内采样和保持电路开始对模拟输入采样。采样操作主要包括内部电容器充电到模拟输入电压的电平。3.其后再把三个I/OCLOCK周期加至I/OCLOCK端,在这些时钟周期的下降沿,第6、第7和第8个转换位被移出。4.最后(第8个)时钟周期被加至I/OCLOCK。此时钟周期高电平至低电平的跳变使片内采样和保持电路开始保持功能。保持功能在接着四个内部系统时钟周期内继续进行,在此之后保持功能结束且在下面32个系统时钟周期内完成转换,总共为36个周期。在第8个I/OC
简易数字直流电压表电路及程序,标签:单片机开发,单片机原理,单片机教程,http://www.88dzw.com2.前4个I/OCLOCK周期的下降沿输出前次转换结果的第2、第3、第4和第5个最高有效位。在I/OCLOCK第4个高电平至低电平的跳变之后,片内采样和保持电路开始对模拟输入采样。采样操作主要包括内部电容器充电到模拟输入电压的电平。
3.其后再把三个I/OCLOCK周期加至I/OCLOCK端,在这些时钟周期的下降沿,第6、第7和第8个转换位被移出。
4.最后(第8个)时钟周期被加至I/OCLOCK。此时钟周期高电平至低电平的跳变使片内采样和保持电路开始保持功能。保持功能在接着四个内部系统时钟周期内继续进行,在此之后保持功能结束且在下面32个系统时钟周期内完成转换,总共为36个周期。在第8个I/OCLOCK周期之后,CS必须变为高电平,否则I/OCLOCK必须保持低电平达至少36个系统时钟周期以供保持和转换功能的完成。在多个转换周期内CS可保持低电平。在多个转换周期内使CS保持低电平时必须特别注意防止I/OCLOCK线上的噪声闪变。如果在I/OCLOCK上发生闪变,那么在微处理器/控制器和器件之间的I/O时序将失去同步。此外,如果CS变为高电平,那么它必须保持高电平直至转换结束为止。否则,CS的有效高电平至低电平跳变将引起复位,它使正在进行的转换失败。
在36个系统时钟周期发生之前,通过完成步骤1至4可以启动新的转换,同时正在进行的转换中止。此操作产生先前的转换结果而不是正在进行的转换结果。
(3)分析软件任务要求,写出程序设计思路,分配单片机内部资源,画出程序流程图
软件的任务包括定时器的定时功能、AD转换器TLC549的控制与数据的读取,数码管的动态扫描。程序设计思路,采用查询定时器中断标志的方式来启动AD转换器TLC549的工作,在读取AD转换器的数据之后,再对数据进行计算换算为对应的电压值。
需要分配的单片机存储资源包括AD转换器数据的暂存变量(re_data)、定时器溢出次数的计数变量(T_cnt)、数据换算的系数(xishu)以及电压值(volt)等。
主程序的流程图如图3-19所示。由于采用查询中断标志的方式来响应的中断,所以主程序要循环完成如下任务:中断标志的查询、AD转换器数据的读取、电压值的换算以及数码管的动态扫描显示。

图3-19数字电压表的主程序流程图
(4)设计系统软件调试方案、硬件调试方案及软硬件联合调试方案
软件调试方案:伟福软件中,在“文件\新建文件”中,新建C语言源程序文件,编写相应的程序。在“文件\新建项目”的菜单中,新建项目并将C语言源程序文件包括在项目文件中。
在 “项目\编译”菜单中将C源文件编译,检查语法错误及逻辑错误。在编译成功后,产生以 “*.hex”和“*.bin” 后缀的目标文件。
硬件调试方案:在设计平台中,将单片机的P1.0接TLC549的CLK管脚,P1.1接TLC549的DOUT管脚,P1.2接TLC549的CS管脚。
在伟福中将程序文件编译成目标文件后,将下载线安装在实验平台上,运行“MCU下载程序”,选择相应的flash 数据文件,点击“编程”按钮,将程序文件下载到单片机的Flash中。
然后,上电重新启动单片机,检查所编写的程序是否达到题目的要求,是否全面完整地完成试题的内容。
3.6.2 模块2 程序设计
//晶振:11.0592MHz,定时器T0每50ms中断一次,每隔0.1秒读ADC一次
/* AD转换器使用 TLC549
p1.0-Clock
p1.1-Data out
p1.2-CS
*/
#include "reg51.h"
#include "intrins.h"
#include "math.h"
sbit ad_clk=P1^0;
sbit ad_dout=P1^1;
sbit ad_cs=P1^2;
unsigned char data re_data;
unsigned int data T_cnt;
double volt,xishu;
char code led_seg_code[10]={0x3f,0x06,0x05b,0x04f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//led_seg_code[0-9]代表0-9的7段码
//---------------
void delay(unsigned int i)//延时
《简易数字直流电压表电路及程序》相关文章
- › 简易数字直流电压表电路及程序
- 在百度中搜索相关文章:简易数字直流电压表电路及程序
- 在谷歌中搜索相关文章:简易数字直流电压表电路及程序
- 在soso中搜索相关文章:简易数字直流电压表电路及程序
- 在搜狗中搜索相关文章:简易数字直流电压表电路及程序