新闻中心

EEPW首页>嵌入式系统>设计应用> 初学者学习C51的一些误区和注意事项

初学者学习C51的一些误区和注意事项

作者: 时间:2013-05-30 来源:网络 收藏

这样主程序M.c中:

#include >reg52.h /*C编译器内部自带的H文件,使用>*/

#include "a.h" /*自定义的H文件,一般用""*/

void main(void)

{

Test1(); /*使用a.c模块文件中的函数*/

while(1){

i++; /*使用a.c模块文件中的变量*/

}

}

5)51家族

核心都是基于8031的,有很多在此核心上进行扩展,有的把程序存储器放在内部:89c(S)51..,有的增加了RAM:89c(S)52..,有的增加

了一些专用硬件80C552...,有的改变时钟时序W77E58...。市面上现在常用的主要有ATMEL公司的AT89X系列,PHILIPS的P87(89)x,台

湾WINBOND的w77(78)x系列,Cygnal的C8051Fx系列。

6)51单片机结构的C描述

这里不讲51的具体结构,只是引导快速理解51单片机的物理结构。寄存器和IO及其它硬件设备的地址名称,在相应的C头部文件

中可以找到。51为reg51.h,52为reg52.h,以次类推,比如winbond的78E58就为w78e58.h这些H文件中的描述:

srf,定义一个8位的设备。

srf16,定义一个16位的设备。

sbit,定义一个位的设备。

用这些语句定义后,就可以在C中象汇编一样使用这些硬件设备,这是单片机应用比标准C特殊的地方,其它差别很少。

7)在51系列中data,idata,xdata,pdata的区别

data:固定指前面0x00-0x7f的128个RAM,可以用acc直接读写的,速度最快,生成的代码也最小。

idata:固定指前面0x00-0xff的256个RAM,其中前128和data的128完全相同,只是因为访问的方式不同。idata是用类似C中的指针方式

访问的。汇编中的语句为:mox ACC,@Rx.(不重要的补充:c中idata做指针式的访问效果很好)

xdata:外部扩展RAM,一般指外部0x0000-0xffff空间,用DPTR访问。

pdata:外部扩展RAM的低256个字节,地址出现在A0-A7的上时读写,用movx ACC,@Rx读写。这个比较特殊,而且好象有对此BUG,

建议少用。但也有他的优点,具体用法属于中级问题,这里不提。

8)startup.a51的作用

和汇编一样,在C中定义的那些变量和数组的初始化就在startup.a51中进行,如果你在定义全局变量时带有数值,如unsigned char

data xxx=100;,那startup.a51中就会有相关的赋值。如果没有=100,startup.a51就会把他清0。(startup.a51==变量的初始化)。

这些初始化完毕后,还会设置SP指针。对非变量区域,如堆栈区,将不会有赋值或清零动作。

有人喜欢改startup.a51,为了满足自己一些想当然的爱好,这是不必要的,有可能错误的。比如掉电保护的时候想保存一些变量,

但改startup.a51来实现是很笨的方法,实际只要利用非变量区域的特性,定义一个指针变量指向堆栈低部:0xff处就可实现。,

为什么还要去改?

可以这么说:任何时候都可以不需要改startup.a51,如果你明白它的特性。


上一页 1 2 下一页

关键词:初学者C51误区

评论


相关推荐

技术专区

关闭