太阳能跟踪系统毕业论文(9)

2019-09-01 15:18

华北科技学院

void ISP_IAP_enable(void) /*打开 ISP,IAP 功能*/ {

EA =0; /* 关中断 */

ISP_CONTR = ISP_CONTR & 0x18; /* 0001,1000 */ ISP_CONTR = ISP_CONTR | WaitTime; /* 写入硬件延时 */ ISP_CONTR = ISP_CONTR | 0x80; /* ISPEN=1*/ }

void ISP_IAP_disable(void) /*关闭 ISP,IAP 功能*/ {

ISP_CONTR=ISP_CONTR & 0x7f; /* ISPEN = 0 */ ISP_TRIG= 0x00;

EA = 1; /* 开中断 */ }

void ISPgoon(void) {

ISP_IAP_enable(); /* 打开 ISP,IAP 功能

*/

ISP_TRIG =0x46; /* 触发ISP_IAP命令字节1 */ ISP_TRIG=0xb9; /* 触发ISP_IAP命令字节2*/ _nop_(); }

uchar byte_read(uint byte_addr) /* 字节写 {

ISP_ADDRH = (uchar)(byte_addr >> 8); /* 地址赋值 */ ISP_ADDRL = (uchar)(byte_addr & 0x00ff);

*/

第 35 页 共 54页

太阳能电池板自动跟踪系统设计

ISP_CMD = ISP_CMD ISP_CMD = ISP_CMD

& 0xf8; /* 清除低3位 */ | RdCommand; /* 写入读命令 */

ISPgoon(); /* 触发执行 */

ISP_IAP_disable(); /* 关闭ISP,IAP功能*/ return (ISP_DATA); /* 返回读到的数据 */ }

byte_write(addr ,temp); /*调用ISP写函数*/ addr++; }

uchar byte_read(uint byte_addr) {

ISP_ADDRH = (uchar)(byte_addr >> 8); /* 地址赋值 */ ISP_ADDRL = (uchar)(byte_addr & 0x00ff); ISP_CMD = ISP_CMD ISP_CMD = ISP_CMD

& 0xf8; /* 清除低3位 */ | RdCommand; /* 写入读命令*/

ISPgoon(); /* 触发执行 */

ISP_IAP_disable(); /* 关闭ISP,IAP功能*/ return (ISP_DATA); /* 返回读到的数据 */

5.4 程序设计要点及注意事项

Keil C51程序的一般结构与标准C语言相同,Keil C51程序由一个或多个函数构成,其中应至少包含一个main函数。

C51与标准C的主要区别如下:

(1)头文件的差异。51系列单片机厂家有多个,它们的差异在于内部资源如定时器、中断、I/O等数量以及功能的不同, Keil C51系列的头文件集中体现了各系列芯片的不同资源及功能。

(2)数据类型的不同。51系列单片机包含位操作空间和丰富的位操作指令,Keil C51与ANSI C相比又扩展了4种类型,以便能够灵活地进行操作。

第 36 页 共 54 页

华北科技学院

(3)数据存储类型的不同。C语言最初是为通用计算机设计的,在通用计算机中只有一个程序和数据统一寻址的内存空间,而51系列单片机有片内、外程序存储器,还有片内、外数据存储器。标准C并没有提供这部分存储器的地址范围的定义。此外,对于STC12C5A60S2单片机中大量的特殊功能寄存器也没有定义。

(4)标准C语言没有处理单片机中断的定义。

Keil C51与标准C的库函数有较大的不同:

由于标准C的中的部分库函数不适于嵌入式处理器系统,因此被排除在Keil C51之外,如字符屏幕和图形函数。有一些库函数可以继续使用,但这些库函数都必须针对51单片机的硬件特点来作出相应的开发,与标准C库函数的构成与用法有很大的不同。例如库函数printf和scanf,在标准C中,这两个函数通常用于屏幕打印和接收字符,而在Keil C51中,它们主要用于串行口数据的收发。 (6)程序结构的差异。由于51单片机的硬件资源有限,它的编译系统不允许太多的程序嵌套。其次,标准C所具备的递归特性不被Keil C51支持,在C51中,要使用递归特性,必须用reentrant进行声明才能使用。在C51语言程序中,有可能会出现在运算中数据类型不一致的情况。C51允许任何标准数据类型的隐式转换。

隐式转换的优先级顺序如下:

Bit→char→int→long→float→signed→unsigned

也就是说,当char型与int型进行运算时,先自动对char型扩展为int型,然后与int型进行运算,运算结果为int型。C51除了支持隐式类型转换外,还可以通过强制类型转换符“()”对数据类型进行人为的强制转换。

变量的数据类型选择的基本原则:

(1) 若能预算出变量的变化范围,可根据变量长度来选择变量的类 型,并尽量减少变量的长度。

(2) 如果程序中不需使用负数,则选择无符号数类型的变量。 (3) 若果程序中不需使用浮点数,则要避免使用浮点数变量。

第 37 页 共 54页

太阳能电池板自动跟踪系统设计

Keil C51的使用技巧: 1)使用短型变量

一个提高代码效率的最基本的方式就是减小变量的长度。使用C语言编程时若对循环控制变量使用int类型,int型数据为16位,这对8位单片机来说是一种极大的浪费。如果使用unsigned char型的变量,它只使用一字节(8位)。

2)使用无符号类型

由于51单片机不支持符号运算,所以程序中也不要使用带符号型变量的外部代码。除了根据变量长度来选择变量类型外,还要考虑变量是否会出现负数,如果程序中不需要负数,就可以把变量都声明成无符号类的。

3)使用位变量

对于某些标志位,应使用位变量而不是unsingned char 型变量,这将节省7位存储区,节省内存,而且在RAM中访问位变量只需要一个处理周期。

4)用局部变量代替全局变量

把变量声明成局部变量比声明成全局变量更有效,因为编译器在内部存储区中为局部变量分配存储空间,而在外部存储区中为全局变量分配存储空间,这会降低访问全局变量的速度。

5)为变量分配内部存储区

经常使用的变量防在内部RAM中时,可使程序执行的速度得到提高。除此之外,这样做还缩短了代码,因为写外部存储区寻址的指令相对要麻烦一些,考虑到存储速度,一般按下面的顺序使用存储器,既DATA,IDATA,PDATA,XDATA,同时要留出足够的堆栈空间。

6)使用特定指针

在程序中使用指针时,应指定指针的类型,确定他们指向哪个区域,如XDATA或CODE区,这样编译器就不必去确定指针所指向的存储区,所以代码也会更加紧凑。

7)使用宏替代函数

对小段代码,像使用某些电路或从锁存器中读取数据,可通过宏来替代函数,以使程序有更好的可读性。也可以把代码声明在宏中,这样看上去更像函数。编译器在碰到宏时,按照事先声明好的代码去替代宏。宏的名字应能够描述宏的操

第 38 页 共 54 页

华北科技学院

作。当需要改变宏时,只要在宏的声明处修改即可。

C51的扩展数据类型

(1)位变量bit;bit的值可以是1(true), 也可以是0(false)。

所有的bit变量放在80C51内部数据存储区的(20H~2FH)位段。因为这个区域只有16个字节长,所以在某个范围内最多只能定义128个位变量。

在格式中可以加上各种修饰,但注意存储器类型只能是bdata、data、idata。只能是片内RAM的可位寻址区,严格来说只能是bdata。 (2)特殊功能寄存器sfr

STC12C5A60S2特殊功能寄存器在片内RAM区的80H~FFH之间,“sfr” 数据类型占用一个内存单元。利用它可访问AT89C51内部的所有特殊功能寄存器。

例如:sfr P1=0x90这一语句定义P1口在片内的寄存器,在后面语句中可用“P1=0xff”(使P1的所有引脚输出为高电平)之类的语句来操作特殊功能寄存器。在等号(赋值号)的右边指定的地址必须是一个常数,不允许用带操作数的表达式。80C51系列支持SFR的地址范围为:0x80~0xFF。 (3)特殊功能寄存器sfr16

“sfr16”数据类型占用两个内存单元。sfr16和sfr一样用于操作特殊功能寄存器。所不同的是它用于操作占两个字节的特殊功能寄存器。 (4)特殊功能位 sbit

sbit 是指STC12C5A60S2片内特殊功能寄存器的可寻址位。例如: sfr PSW=0xd0 ;/*定义PSW寄存器地址为0xd0*/ sbit PSW ^2 = 0xd2 ;/*定义OV位为PSW.2*/

符号“^”前面是特殊功能寄存器的名字,“^”的后面数字定义特殊功能寄存器可寻址位在寄存器中的位置,取值必须是0~7。

程序中的注释内容,修改时间和作者,方便理解的注释等。注释内容应简练,清楚,明了,对一目了然的语句不加注释。

2、命名:命名必须具有一定的实际意义。 1.宏和常量的命名。

宏和常量的命名规则:单词的字母全部大写,各单词之间用下划线隔开。

第 39 页 共 54页


太阳能跟踪系统毕业论文(9).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:[最新推荐]建店50周年庆典讲话-word范文(2页)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: