avr学习笔记十四、模块化程序设计2

avr学习笔记十四、模块化程序设计2

ID:33826959

大小:51.00 KB

页数:8页

时间:2019-03-01

avr学习笔记十四、模块化程序设计2_第1页
avr学习笔记十四、模块化程序设计2_第2页
avr学习笔记十四、模块化程序设计2_第3页
avr学习笔记十四、模块化程序设计2_第4页
avr学习笔记十四、模块化程序设计2_第5页
资源描述:

《avr学习笔记十四、模块化程序设计2》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、AVR学习笔记十四、模块化程序设计(二)14.1程序模块化设计(二)14.1.1、实例功能在前面一讲里,我们已经初步了解了模块化程序设计的简单知识,今天我们再深入探讨一下模块化程序设计。我们先回顾一下前面一讲的主要内容:模块化程序设计是指将实现同一功能的程序整合起来,封装到一个程序模块中,这样在使用该功能的时候,可以直接调用该模块中的相关函数进行操作。我们在单片机编程中经常用到的按键检测、液晶显示、数码管显示、串口通信、DS18B20温度检测、DS1302实时时钟等经常用到的程序都可以实现模块化。模块化编程的最大优点是:思路

2、清晰、移植方便、程序简化。通常的做法是将某一模块中所有用到的端口定义,函数声明,函数定义等一起写到一个“.h”或者“.c”文件中,然后在主程序里面使用“#include”预编译指令将这些内容包含到主程序中,这样做调用虽然简单,但是对于模块化程序设计来说还是显得有些不太直观,因为我们调用模块中的函数的时候,需要在这一个模块文件中很费劲的找出需要的函数。同样对于移植到别的单片机系统中的时候,需要遍历该模块文件,然后一一更改。如果不小心,很容易造成错误。更为标准的做法是我们将某一个功能模块的端口定义,函数声明这些内容放在一个“.h

3、”文件中,而把具体的函数实现(执行具体操作的函数)放在一个“.c”文件中。这样我们在编写主程序文件的时候,可以直接使用“#include”预编译指令将“.h”文件包含进主程序文件中,而在编译的时候将“.c”文件和主程序文件一起编译。这样做的优点是,我们可以直接在“.h”文件中查找到我们需要的函数名称,从而在主程序里面直接调用,而不用去关心“.c”文件中的具体内容。如果我们要将该程序移植到不同型号的单片机上,我们同样只需在“.h”文件中修改相应的端口定义即可。在这一讲中,我们继续学习一下模块化程序设计。本实例有两个功能模块:●

4、继续了解模块化程序设计的思路和方法。●编写串口通信的模块化程序。通过本实例的学习,掌握以下知识点:●初步掌握模块化程序设计的方法。●了解模块化程序设计中需要注意的一些问题14.2模块化程序设计需要注意的两点14.2.1模块化程序设计中的重复声明在编写模块程序的过程中,我们在编写具体函数实现的“.c”文件时,需要调用包含相关的端口定义和函数声明的“.h”文件,调用时,我们使用使用“#include”预编译指令来调用“.h”文件。同样的,在编写主程序文件时,我们仍然需要将需要调用模块的“.h”文件包含到主程序中,这样就出现了一个

5、单片机系统程序中同一个文件被多次调用的情况,这在很多编译系统中进行编译的时候会有“某某.h”文件被重复调用的编译警告或错误提示。事实上,再同一个单片机系统程序中,在编译的时候出现任何的警告或者错误提示都表示我们的程序编写的有问题,虽然有些警告信息不会影响程序的最终运行结果,但我们希望编译程序的时候不出现任何的警告或者错误提示。那这种重复调用的情况该怎么避免呢?一种解决方法是,当我们在调用某一个程序文件时,先判断一下在前面的程序里面是否已经定义或者调用了这个文件,如果这个文件没有被定义或者调用,那么我们就执行调用指令,否则我们

6、就略过调用指令。要实现这种判断,我们需要用到条件预编译指令。“#ifndef”,“#define”,“#endif”这三条指令使用格式如下:#ifndefxxxxx语句块1#definexxxxxx语句块2#endif具体作用是://如果没有定义文件xxxxxx以及语句块1;#ifndefxxxxx(该处可以为文件名)语句块1//定义文件xxxxxx以及语句块2#definexxxxxx语句块2//结束文件xxxxxx以及语句块的定义#endif举例如下:下面是文件“usart.h”的避免重复定义的书写方法,具体作用是,先判

7、断是否定义了文件“usart.h”,如果没有定义(#ifndef)文件“usart.h”,则定义文件“usart.h”,并且填写文件“usart.h”的具体内容(即需要定义的内容);填写完需要定义的内容后,使用#endif结束定义。#ifndef__USART_H__//如果usart.h没有定义#define__USART_H__//则定义usart.h//下面是usart.h的内容#include#include//中断函数头文件//常量声明#defineBAUD96

8、00//函数声明voidPort_Init(void);//端口初始化配置voidUsart_Init(void);//USART寄存器设置voidUsart_PutChar(unsignedcharcTXData);//字节发送函数voidUsart_PutString(unsigned

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。