欢迎来到天天文库
浏览记录
ID:39969451
大小:652.81 KB
页数:66页
时间:2019-07-16
《keilc及其程序设计(二)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、(3)片外程序存储器code:外部程序存储器的64KB空间。程序存储区用来存放程序代码、数据及表格(数据及表格中的数据是不变的)。程序的代码(CODE)存储区是只读的,不能写入。硬件决定最多可能有64KB的程序存储区。【因为是16位】用code标识符来访问片内、片外统一编址的程序存储区,寻址范围为0~65535。对单片机编程,正确地定义数据类型以及存储类型,是所有编程者在编程前都需要首先考虑的问题。在资源有限的条件下,如何节省存储单元并保证运行效率,是对开发者的一个考验。只有对C51中的各种数据类型以及存储类型非常熟练的掌握,才能运用自如。11定义变量类型应考虑如下问题:程序运行时该变量
2、可能的取值范围,是否有负值,绝对值有多大,以及相应需要的存储空间大小。在够用的情况下,尽量选择8位即一个字节的char型,特别是unsigedchar。对于51系列这样的定点机而言,浮点类型变量将明显增加运算时间和程序长度,如果可以的话,尽量使用灵活巧妙的算法来避免浮点变量的引入。定义数据的存储类型通常遵循如下原则:只要条件满足,尽量选择内部直接寻址的存储类型data,然后选择idata即内部间接寻址。对于那些经常使用的变量要使用内2部寻址。在内部数据存储器数量有限或不能满足要求的情况下才使用外部数据存储器。选择外部数据存储器可先选择pdata类型,最后选用xdata类型。扩展片外存储器
3、,原理上虽很简单,但在实际开发中,很多时候,会带来不必要的麻烦,如可能降低系统稳定性、增加成本、拉长开发和调试周期等,推荐充分利用片内存储空间。通常的单片机应用都是面对小型的控制,代码比较短,对于程序存储区的大小要求很低,常常是片内RAM很紧张而片内FlashROM很富裕,因此如果实时性3要求不高,可考虑使用宏,以及将一些子函数的常量数据做成数据表,放置在程序存储区,当程序运行时,进入子函数动态调用下载至RAM即可,退出子函数后立即释放该内存空间。43.2.3一个简单的C51程序一个C51源程序是由一个个模块化的函数所构成,函数是指程序中的一个模块,main()函数为程序的主函数,其他若
4、干个函数可以理解为一些子程序。一个C51源程序无论包含了多少函数,它总是从main()函数开始执行,不论main()函数位于程序的什么位置。程序设计者就是编写一系列的函数模块,并在需要的时候调用这个函数,实现程序所要求的功能。51.C51程序与函数下面通过一个简单C51程序,认识C51程序与函数。【例3-1】在STC89C51的P1.0脚接有一只发光二极管,二极管的阴极接P1.0脚,阳极通过限流电阻接+5V,现在让发光二极管每隔800ms闪灭,占空比为50%。已知单片机时钟晶振为12MHz,即每个机器周期1μs,采用软件延时的方法,参考程序如下:6#include//包
5、含reg51.h头文件sbitP10=P1^0;//定义位变量P1.0,也可使用sbitP10=0x90voiddelay(unsignedintcount)//延时函数delay(),count是形式参数{//两个花括号之间为函数delay()的函数体unsignedinti,j;//定义变量i,jfor(i=0;i6、ain()*/{while(1)/*主程序轮询*/{P10=1;/*P1.0输出高电平,发光二极管灭*/delay(800);/*将实际参数800传递给形式参数i,延时800ms*/P10=0;/*P1.0输出低电平,发光二极管亮*/delay(800)/*将实际参数800传递给形式参数i,延时800ms*/}}如果把voiddelay(unsignedintcount)改为voiddelay(unsignedcharcount),是否可行?8下面对程序进行简要说明。程序的第1行是“文件包含”,是将另一个文件“reg51.h”的内容全部包含进来。文件“reg51.h”包含了51单片机全部7、的特殊功能寄存器的字节地址及可寻址位的位地址定义。程序包含reg51.h的目的就是为了使用P1这个符号,即通知程序中所写的P1是指STC89C51的P1端口,而不是其他变量。9打开reg51.h文件可以看到“sfrP1=0x90;”,即定义符号P1与地址0x90对应,而P1口的地址就是0x90。虽然这里的“文件包含”只有一行,但C编译器在处理的时候却要处理几十行或几百行。程序的第2行用符号P10来表示P1.0引脚。在C51中,如果直
6、ain()*/{while(1)/*主程序轮询*/{P10=1;/*P1.0输出高电平,发光二极管灭*/delay(800);/*将实际参数800传递给形式参数i,延时800ms*/P10=0;/*P1.0输出低电平,发光二极管亮*/delay(800)/*将实际参数800传递给形式参数i,延时800ms*/}}如果把voiddelay(unsignedintcount)改为voiddelay(unsignedcharcount),是否可行?8下面对程序进行简要说明。程序的第1行是“文件包含”,是将另一个文件“reg51.h”的内容全部包含进来。文件“reg51.h”包含了51单片机全部
7、的特殊功能寄存器的字节地址及可寻址位的位地址定义。程序包含reg51.h的目的就是为了使用P1这个符号,即通知程序中所写的P1是指STC89C51的P1端口,而不是其他变量。9打开reg51.h文件可以看到“sfrP1=0x90;”,即定义符号P1与地址0x90对应,而P1口的地址就是0x90。虽然这里的“文件包含”只有一行,但C编译器在处理的时候却要处理几十行或几百行。程序的第2行用符号P10来表示P1.0引脚。在C51中,如果直
此文档下载收益归作者所有