我的毕业设计_labViEW与单片机
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3
SourcesFiles;运行 Keil,点击
,进行设置,
选着鼠标所指的“Select Folder for Objects”,选着文件夹 OutputFiles,同样 list 也是这样进行选择文件夹 ProjectList。
1-4 把不同的功能的程序放在不同的目录中,如图所示,这样管理起来很方 便。
如果您觉得哪里写的不够清楚,可以联系我,我的邮箱:452914287@qq.com
1
目录
1、养成一个好的编程风格 ------------------------- 2 2、芯片简介 ------------------------------------- 7
1-1 单片机 STC12C5A60S2 简介...................8 1-2 温度传感器 18B20 简介......................8 1-3 时钟芯片 DS1302 简介.......................10 3、定时器多任务 --------------------------------- 12 4、CRC 循环冗码校验 ------------------------------ 19 5、串口与 FIFO 进行收发数据 ---------------------- 23 6、labVIEW 编写上位机程序 ------------------------ 26 7、参考文献下载地址 ----------------------------- 32
4
在 project 的方框中(上图 任意位置),单击右键,选择 Manage Component,
这样就可以添加所需要的目录了。
1-5 头文件与 C 文件分开这个是很有必要的,如果要查看哪个 C 文件有什么 功能,可以直接看头文件;有个技巧很好,说一下,将所有头文件放置在一个主 头文件中,如 HeadFile.h,
下面我来介绍一下我的风格…… 1-1 写一个属于自己程序的版本号,比如“我的毕业设计 V1.0.421”,我的 版本号命名规则 A.B.BCD;A 为主版本号,程序有重大修改进行更改,B 为次版本 号,一般添加或删除功能时修改,BCD 为修改日期;我的版本命名规则能过满足 我的要求。这是我的目录,查找起来很方便,看起来也很舒服。
是高速/低功耗/超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快 8-12倍。内部集成MAX810专用复位电路,2路PWM,8路高速10位A/D转换,针对电机控制,强 干扰场合,增强型 8051 CPU,1T,单时钟/机器周期,指令代码完全兼容传统8051……
1-2 温度传感器 18B20 DS18B20 是单总线的数字温度传感器。其与单片机的接口只需要一根数据线
备注:无
**********************************************/
void OS_Open(void)
{
TR0 = 1 ;
// 开启定时器
ET0 = 1 ; // 开启定时器中断
EA = 1 ;
// 开启总中断开关
}
/**********************************************
2
1、 养成一个好的编程风格
为什么从这说起呢? 因为一个好的编程风格,可以减少自己的麻烦,能过 很好的维护代码,比如很久以前写的一个程序,由于没有写注释,自己都不知道 为什么要这样安排,像是在看别人的程序一样,所以注释是很重要的;这样别人 进行二次开发也比较容易,还有命名很重要,很多人喜欢使用拼音甚至拼音缩写, 还是觉得使用英文比较好,将来说不定还能走出去;缩进尽量使用 Tab 键,比空 格键好用,这是网上老师说的(mars 老师)。
这里讨论),谁能够控制一批脱缰的马呢?对了,有中断,中断能够让CPU 回到 特定的位置,设想,能不能用一个定时中断,周期性的将 CPU 这匹运行着的脱 缰的马召唤回来,重新给它安排特定的任务,事实上,任务切换就是这样实现的。
12
定时中断实现任务切换
如图所示,CPU 在空闲任务循环等待,定时中断将 CPU 周期性唤回,根据任务
详细的可以看芯片的 datasheet,这里就不细讲。。。
11
3、定时器多任务
使用多任务在程序设计中是很有必要的,比如串口收发数据为一个任务,温 度读取并显示为一个任务,时间显示为一个任务,读取键盘并响应为一个任务, 这样,一个大程序就可以分割为几个小程序,便于维护管理。。。
多任务复杂流程图 首先需要理解,CPU 一旦运行起来,就无法停止(硬件支持时钟停止的不在
ET0 = 0 ; // 关闭定时器中断
EA = 0 ;
// 关闭总中断开关
}
14
/********************************************** 函数功能:系统OS定时中断服务 输入:无 输出:无 作者:小鹰fighting 创建日期:-----最后修改时间:2012年3月18日 备注:无 **********************************************/ void OS_Timer0(void) interrupt 1 {
即可。当然连线简单意味着软件处理上可能要麻烦一点。下面来看看它的优点:
8
DS18B20 的内部存储器分为以下几部分 ROM:存放该器件的编码。前8 位为单线系列的编码(DS18B20 的编码是19H)后面 48 位为芯片的唯一序列号。在出场的时候就已经设置好,用户无法更改。最后8 位是以上56 位的CRC 码。
uchar i ;
for(i = 0 ;i < MAX_TASK ; i++)
// 任务延wenku.baidu.com变量归零
TASK_DELAY[i] = 0 ;
TMOD = (TMOD & 0XF0) | 0X01 ;
// 定时器0工作在模式1,
16Bit定时器模式
TH0 = 256 - CLOCK/TIME_PER_SEC/12/256 ; // 定时器0赋初值
这个设计虽然简单,但涉及到了很多方法,比如比如多任务,FIFO 收发数 据,CRC 检验等,还有一些程序编写习惯问题,我也会说下我的编程习惯,每 个人都有自己的编程风格,但一个好的风格给人一看,就知道你将来是否能成为 高手……
下面我来主要介绍一下:我的这个设计硬件包括 STC12C5A60S2 单片机、 18B20 温度传感器和 DS1302 时钟芯片;软件采用利用定时器中断运行多任务, 使用队列建立缓存进行串口收发数据,添加 CRC 检验;上位机采用 labVIEW 进 行编写,下面我来详细讲解一下。
函数功能:关闭系统OS
输入:无
输出:无
作者:小鹰fighting
创建日期:2012年3月18日
最后修改时间:2012年3月18日
备注:无
**********************************************/
void OS_Close(void)
{
TR0 = 0 ;
// 关闭定时器
TL0 = 256 - CLOCK/TIME_PER_SEC/12%256 ;
}
/**********************************************
函数功能:开启系统OS
输入:无
输出:无
作者:小鹰fighting
创建日期:2012年3月18日
最后修改时间:2012年3月18日
设计了不同的响应频度,满足条件的任务将获得CPU 资源,CPU 为不同任务“关
照”完成后,再次返回空闲任务,如此周而复始,对于各个任务而言,好像各自
拥有一个独立的CPU,各自独立运行。用这种思想构建的程序框架,最大的好处
是任务很容易裁剪,系统能够做得很复杂。
下面写出我的os_c.c程序
#include "..\MainFunction\HeadFile.h"
DS18B20 的复位时序图
9
读操作的时序图
写操作的时序图
根据时序图写出程序,这里就不贴程序了。 1-3 DS1302 时钟芯片 DS1302 是美国 DALLAS 公司推出的一种高性能、低功耗的实时时钟芯片,附 加 31 字节静态 RAM,采用 SPI 三线接口与 CPU 进行同步通信,并可采用突发方
5
如果再添加 C 文件,直接加入#include "XXXX\HeadFile.h",很方便,不会 漏掉所需要的文件。
1-6 readme.txt 很重要,在我下载的很多软件中,都有 readme 这个说明文 件,所以我也加到我的程序中去了,这样别人首先就看 readme,把一些重要说 明写进去,比如程序功能,作者,创建时间等信息放进去。
10
式一次传送多个字节的时钟信号和 RAM 数据。实时时钟可提供秒、分、时、日、 星期、月和年,一个月小与 31 天时可以自动调整,且具有闰年补偿功能。工作 电压宽达 2.5~5.5V。采用双电源供电(主电源和备用电源),可设置备用电源 充电方式,提供了对后背电源进行涓细电流充电的能力。DS1302 的外部引脚分 配如图 1 所示及内部结构如图 2 所示。DS1302 用于数据记录,特别是对某些具 有特殊意义的数据点的记录上,能实现数据与出现该数据的时间同时记录,因此 广泛应用于测量系统中。
RAM:DS18B20 的内部暂存器共9 个字节。其中第一个和第二个字节存放转换后 的温度值。第二个和第三个字节分别存放高温和低温告警值。(可以用RAM 指令 将其拷贝到EEPROM 中)第四个字节为配置寄存器。第5~7 个字节保留。第9 个字 节为前8 个字节的CRC 码。 DS18B20 的温度存放如上图所示。其中S 位符号位。当温度值为负值时,S = 1 , 反之则S = 0 。 我们把得到的温度数据乘上对应的分辨率即可以得到转换后的温度值。 DS18B20 的通讯协议: 在对DS18B20 进行读写编程时,必须严格保证读写的时序。否则将无法读取测温 结果。根据DS18B20 的通讯协议,主机控制DS18B20 完成温度转换必须经过3 个 步骤:每一次读写之前都要对DS18B20 进行复位,复位成功后发送一条ROM 指令, 最后发送RAM 指令。这样才能对DS18B20 进行预定的操作。 复位要求主机将数据线下拉500us,然后释放,DS18B20 收到信号后等待16~160us 然后发出60~240us的存在低脉冲,主机收到此信号表示复位成功。
labVIEW 与单片机温度采集
想了很久,该做一个什么样的毕业设计呢?在学校的时候,接触的东西太少 了,很多知识在学校的时候都没有听说过,比如 STC12C5A60S2 这块单片机就 很强大,1T 工作方式,比传统 51 在相同晶振下运行速度快 8~12 倍;还有 labVIEW,一款强大的软件,采用 G 语言进行软件开发,我主要是用它来进行上 位机开发,这些都是我快毕业的时候才看到的(后悔啊 ),主要还是因为网络的 原因,在学校的时候,也不怎么上网,也不还去逛一些电子论坛,现在我经常去 逛一下论坛,比如 bbs.elecfans.com 和 bbs.eeworld.com,经常逛一下,能过学到 很多知识,不懂的发帖讨论一下,这是种不错的学习方式。
6
1-7 每个函数都应有个说明,所以我的程序中函数一般是这样 一个好习惯就应该从细节做起,这样就可以养成一个好的风格,给人耳目一 新的感觉,是迈向优秀工程师重要的一步。。。。。。。
7
2、芯片简介
1-1 单片机 STC12C5A60S2 STC12C5A60S2系列单片机是宏晶科技生产的单时钟/机器周期(1T)的单片机,
1-2 程序文件夹,有一个好的程序文件夹,不仅看起来不乱,查找起来也很 容易。
将输出的都放在同一目录,工程列表放在同一目录,程序文件放在同一目录, 程序文件,我也分为 3 类,一种是底层驱动程序,一种是应用程序,一种是主程 序。
1-3 下面我来介绍一下怎么设置的,首先创建一个文件夹比如“我的毕业设 计 V1.0.421”,在创 建子目录 如 1-2 图所示,OutputFiles, ProjectList,
uchar TASK_DELAY[MAX_TASK];
// 定义任务延时量变量
/**********************************************
函数功能:定时器0初始化
输入:无
输出:无
作者:小鹰fighting
创建日期:------
最后修改时间:2012年3月18日
13
备注:无 **********************************************/ void OS_Timer0Iint(void) {
SourcesFiles;运行 Keil,点击
,进行设置,
选着鼠标所指的“Select Folder for Objects”,选着文件夹 OutputFiles,同样 list 也是这样进行选择文件夹 ProjectList。
1-4 把不同的功能的程序放在不同的目录中,如图所示,这样管理起来很方 便。
如果您觉得哪里写的不够清楚,可以联系我,我的邮箱:452914287@qq.com
1
目录
1、养成一个好的编程风格 ------------------------- 2 2、芯片简介 ------------------------------------- 7
1-1 单片机 STC12C5A60S2 简介...................8 1-2 温度传感器 18B20 简介......................8 1-3 时钟芯片 DS1302 简介.......................10 3、定时器多任务 --------------------------------- 12 4、CRC 循环冗码校验 ------------------------------ 19 5、串口与 FIFO 进行收发数据 ---------------------- 23 6、labVIEW 编写上位机程序 ------------------------ 26 7、参考文献下载地址 ----------------------------- 32
4
在 project 的方框中(上图 任意位置),单击右键,选择 Manage Component,
这样就可以添加所需要的目录了。
1-5 头文件与 C 文件分开这个是很有必要的,如果要查看哪个 C 文件有什么 功能,可以直接看头文件;有个技巧很好,说一下,将所有头文件放置在一个主 头文件中,如 HeadFile.h,
下面我来介绍一下我的风格…… 1-1 写一个属于自己程序的版本号,比如“我的毕业设计 V1.0.421”,我的 版本号命名规则 A.B.BCD;A 为主版本号,程序有重大修改进行更改,B 为次版本 号,一般添加或删除功能时修改,BCD 为修改日期;我的版本命名规则能过满足 我的要求。这是我的目录,查找起来很方便,看起来也很舒服。
是高速/低功耗/超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快 8-12倍。内部集成MAX810专用复位电路,2路PWM,8路高速10位A/D转换,针对电机控制,强 干扰场合,增强型 8051 CPU,1T,单时钟/机器周期,指令代码完全兼容传统8051……
1-2 温度传感器 18B20 DS18B20 是单总线的数字温度传感器。其与单片机的接口只需要一根数据线
备注:无
**********************************************/
void OS_Open(void)
{
TR0 = 1 ;
// 开启定时器
ET0 = 1 ; // 开启定时器中断
EA = 1 ;
// 开启总中断开关
}
/**********************************************
2
1、 养成一个好的编程风格
为什么从这说起呢? 因为一个好的编程风格,可以减少自己的麻烦,能过 很好的维护代码,比如很久以前写的一个程序,由于没有写注释,自己都不知道 为什么要这样安排,像是在看别人的程序一样,所以注释是很重要的;这样别人 进行二次开发也比较容易,还有命名很重要,很多人喜欢使用拼音甚至拼音缩写, 还是觉得使用英文比较好,将来说不定还能走出去;缩进尽量使用 Tab 键,比空 格键好用,这是网上老师说的(mars 老师)。
这里讨论),谁能够控制一批脱缰的马呢?对了,有中断,中断能够让CPU 回到 特定的位置,设想,能不能用一个定时中断,周期性的将 CPU 这匹运行着的脱 缰的马召唤回来,重新给它安排特定的任务,事实上,任务切换就是这样实现的。
12
定时中断实现任务切换
如图所示,CPU 在空闲任务循环等待,定时中断将 CPU 周期性唤回,根据任务
详细的可以看芯片的 datasheet,这里就不细讲。。。
11
3、定时器多任务
使用多任务在程序设计中是很有必要的,比如串口收发数据为一个任务,温 度读取并显示为一个任务,时间显示为一个任务,读取键盘并响应为一个任务, 这样,一个大程序就可以分割为几个小程序,便于维护管理。。。
多任务复杂流程图 首先需要理解,CPU 一旦运行起来,就无法停止(硬件支持时钟停止的不在
ET0 = 0 ; // 关闭定时器中断
EA = 0 ;
// 关闭总中断开关
}
14
/********************************************** 函数功能:系统OS定时中断服务 输入:无 输出:无 作者:小鹰fighting 创建日期:-----最后修改时间:2012年3月18日 备注:无 **********************************************/ void OS_Timer0(void) interrupt 1 {
即可。当然连线简单意味着软件处理上可能要麻烦一点。下面来看看它的优点:
8
DS18B20 的内部存储器分为以下几部分 ROM:存放该器件的编码。前8 位为单线系列的编码(DS18B20 的编码是19H)后面 48 位为芯片的唯一序列号。在出场的时候就已经设置好,用户无法更改。最后8 位是以上56 位的CRC 码。
uchar i ;
for(i = 0 ;i < MAX_TASK ; i++)
// 任务延wenku.baidu.com变量归零
TASK_DELAY[i] = 0 ;
TMOD = (TMOD & 0XF0) | 0X01 ;
// 定时器0工作在模式1,
16Bit定时器模式
TH0 = 256 - CLOCK/TIME_PER_SEC/12/256 ; // 定时器0赋初值
这个设计虽然简单,但涉及到了很多方法,比如比如多任务,FIFO 收发数 据,CRC 检验等,还有一些程序编写习惯问题,我也会说下我的编程习惯,每 个人都有自己的编程风格,但一个好的风格给人一看,就知道你将来是否能成为 高手……
下面我来主要介绍一下:我的这个设计硬件包括 STC12C5A60S2 单片机、 18B20 温度传感器和 DS1302 时钟芯片;软件采用利用定时器中断运行多任务, 使用队列建立缓存进行串口收发数据,添加 CRC 检验;上位机采用 labVIEW 进 行编写,下面我来详细讲解一下。
函数功能:关闭系统OS
输入:无
输出:无
作者:小鹰fighting
创建日期:2012年3月18日
最后修改时间:2012年3月18日
备注:无
**********************************************/
void OS_Close(void)
{
TR0 = 0 ;
// 关闭定时器
TL0 = 256 - CLOCK/TIME_PER_SEC/12%256 ;
}
/**********************************************
函数功能:开启系统OS
输入:无
输出:无
作者:小鹰fighting
创建日期:2012年3月18日
最后修改时间:2012年3月18日
设计了不同的响应频度,满足条件的任务将获得CPU 资源,CPU 为不同任务“关
照”完成后,再次返回空闲任务,如此周而复始,对于各个任务而言,好像各自
拥有一个独立的CPU,各自独立运行。用这种思想构建的程序框架,最大的好处
是任务很容易裁剪,系统能够做得很复杂。
下面写出我的os_c.c程序
#include "..\MainFunction\HeadFile.h"
DS18B20 的复位时序图
9
读操作的时序图
写操作的时序图
根据时序图写出程序,这里就不贴程序了。 1-3 DS1302 时钟芯片 DS1302 是美国 DALLAS 公司推出的一种高性能、低功耗的实时时钟芯片,附 加 31 字节静态 RAM,采用 SPI 三线接口与 CPU 进行同步通信,并可采用突发方
5
如果再添加 C 文件,直接加入#include "XXXX\HeadFile.h",很方便,不会 漏掉所需要的文件。
1-6 readme.txt 很重要,在我下载的很多软件中,都有 readme 这个说明文 件,所以我也加到我的程序中去了,这样别人首先就看 readme,把一些重要说 明写进去,比如程序功能,作者,创建时间等信息放进去。
10
式一次传送多个字节的时钟信号和 RAM 数据。实时时钟可提供秒、分、时、日、 星期、月和年,一个月小与 31 天时可以自动调整,且具有闰年补偿功能。工作 电压宽达 2.5~5.5V。采用双电源供电(主电源和备用电源),可设置备用电源 充电方式,提供了对后背电源进行涓细电流充电的能力。DS1302 的外部引脚分 配如图 1 所示及内部结构如图 2 所示。DS1302 用于数据记录,特别是对某些具 有特殊意义的数据点的记录上,能实现数据与出现该数据的时间同时记录,因此 广泛应用于测量系统中。
RAM:DS18B20 的内部暂存器共9 个字节。其中第一个和第二个字节存放转换后 的温度值。第二个和第三个字节分别存放高温和低温告警值。(可以用RAM 指令 将其拷贝到EEPROM 中)第四个字节为配置寄存器。第5~7 个字节保留。第9 个字 节为前8 个字节的CRC 码。 DS18B20 的温度存放如上图所示。其中S 位符号位。当温度值为负值时,S = 1 , 反之则S = 0 。 我们把得到的温度数据乘上对应的分辨率即可以得到转换后的温度值。 DS18B20 的通讯协议: 在对DS18B20 进行读写编程时,必须严格保证读写的时序。否则将无法读取测温 结果。根据DS18B20 的通讯协议,主机控制DS18B20 完成温度转换必须经过3 个 步骤:每一次读写之前都要对DS18B20 进行复位,复位成功后发送一条ROM 指令, 最后发送RAM 指令。这样才能对DS18B20 进行预定的操作。 复位要求主机将数据线下拉500us,然后释放,DS18B20 收到信号后等待16~160us 然后发出60~240us的存在低脉冲,主机收到此信号表示复位成功。
labVIEW 与单片机温度采集
想了很久,该做一个什么样的毕业设计呢?在学校的时候,接触的东西太少 了,很多知识在学校的时候都没有听说过,比如 STC12C5A60S2 这块单片机就 很强大,1T 工作方式,比传统 51 在相同晶振下运行速度快 8~12 倍;还有 labVIEW,一款强大的软件,采用 G 语言进行软件开发,我主要是用它来进行上 位机开发,这些都是我快毕业的时候才看到的(后悔啊 ),主要还是因为网络的 原因,在学校的时候,也不怎么上网,也不还去逛一些电子论坛,现在我经常去 逛一下论坛,比如 bbs.elecfans.com 和 bbs.eeworld.com,经常逛一下,能过学到 很多知识,不懂的发帖讨论一下,这是种不错的学习方式。
6
1-7 每个函数都应有个说明,所以我的程序中函数一般是这样 一个好习惯就应该从细节做起,这样就可以养成一个好的风格,给人耳目一 新的感觉,是迈向优秀工程师重要的一步。。。。。。。
7
2、芯片简介
1-1 单片机 STC12C5A60S2 STC12C5A60S2系列单片机是宏晶科技生产的单时钟/机器周期(1T)的单片机,
1-2 程序文件夹,有一个好的程序文件夹,不仅看起来不乱,查找起来也很 容易。
将输出的都放在同一目录,工程列表放在同一目录,程序文件放在同一目录, 程序文件,我也分为 3 类,一种是底层驱动程序,一种是应用程序,一种是主程 序。
1-3 下面我来介绍一下怎么设置的,首先创建一个文件夹比如“我的毕业设 计 V1.0.421”,在创 建子目录 如 1-2 图所示,OutputFiles, ProjectList,
uchar TASK_DELAY[MAX_TASK];
// 定义任务延时量变量
/**********************************************
函数功能:定时器0初始化
输入:无
输出:无
作者:小鹰fighting
创建日期:------
最后修改时间:2012年3月18日
13
备注:无 **********************************************/ void OS_Timer0Iint(void) {