`
fanjava
  • 浏览: 235797 次
  • 来自: ...
文章分类
社区版块
存档分类
最新评论

初学C51者应注意的地方

阅读更多
这里讲述一些初学者学习C51的一些误区和注意事项。高手的特别应用不包括在内。

1)C忌讳绝对定位。
常看见初学者要求使用_at_,这是一种谬误,把C当作ASM看待了。在C中变量的定位是编译器的事情,初学者只要定义变量和变量的作
用域,编译器就把一个固定地址给这个变量。怎么取得这个变量的地址?要用指针。比如unsigned char data x;后,x的地址就是&x,
你只要查看这个参数,就可以在程序中知道具体的地址了。所以俺一看见要使用绝对定位的人,第一印象就是:这大概是个初学者。

2)设置SP的问题。
原因和1差不对,编译器在把所有变量和缓冲区赋予地址后,自动把最后一个字节开始的地方,作为SP的开始位置,所以初学者是不必
要去理会的。这体现C的优越性,很多事情C编译时候做了。

3)用C的主程序结构:
#include <reg52.h>

void main(void)
{
while(1);
}

这是个最小的成功的C程序,包括头部文件和程序主体。
头部文件的名词解释:引用的外部资源文件,这个文件包括了硬件信息和外部模块提供的可使用的函数和变量的说明。可以用文本方
式打开reg52.h,仔细研究下,会有一些写程序的体会。

4)这样构成一个C项目
在C中,常用项目来管理。项目一般分为两大块:C文件块和头部文件块。
我们常把不同功能写在不同的C文件中,依靠项目的管理,最后把所有文件连接起来,这样就可以得到可以烧录的HEX文件或BIN文件。
这些C文件中,有且只有唯一一个包括main()函数,和3)中一样的C文件。
用头部文件把各个不同的C互相连接起来。一个C文件基本上要对应有一个H头部文件,这个H文件就包含本C文件中可以提供给外面使
用的变量和函数,没有在H文件中列出的文件,可以算是该C文件的内部函数和变量,外部C不能使用。
例子:a.C:

unsigned char i;
unsigned char mWork;

void Test1(void)
{
mWork++;
}

void Test2(void)
{
i++;
}

a.h文件中:
extern unsigned char i;
extern void Test1(void);
这样主程序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读写。这个比较特殊,而且C51好象有对此BUG,
建议少用。但也有他的优点,具体用法属于中级问题,这里不提。

8)startup.a51的作用
和汇编一样,在C中定义的那些变量和数组的初始化就在startup.a51中进行,如果你在定义全局变量时带有数值,如unsigned chardata xxx=100;,那startup.a51中就会有相关的赋值。如果没有=100,startup.a51就会把他清0。(startup.a51==变量的初始化)。
这些初始化完毕后,还会设置SP指针。对非变量区域,如堆栈区,将不会有赋值或清零动作。
有人喜欢改startup.a51,为了满足自己一些想当然的爱好,这是不必要的,有可能错误的。比如掉电保护的时候想保存一些变量,但改startup.a51来实现是很笨的方法,实际只要利用非变量区域的特性,定义一个指针变量指向堆栈低部:0xff处就可实现。,
为什么还要去改?
可以这么说:任何时候都可以不需要改startup.a51,如果你明白它的特性

分享到:
评论

相关推荐

    初学c51者读 学习51单片机的经验

    ### 初学C51者读:学习51单片机的经验 对于初学者来说,掌握51单片机及C51编程是一项既有趣又挑战性的任务。本文将从标题与描述中提及的关键点出发,详细介绍学习51单片机的一些经验和技巧。 #### 一、了解C51的...

    c51电子教案 初学者的美味午餐

    这份"c51电子教案 初学者的美味午餐"是一份专为初学者设计的教程,旨在帮助新手快速掌握C51编程的基础知识和实际应用技巧。 首先,C51的语法结构与标准C相似,但包含了一些特定于8051硬件的扩展。在教案中,你可能...

    初学c51单片机的重要程序和仿真 包含定时器,中断等程序

    C51单片机是基于8051内核的微控制器,对于初学者来说,理解和掌握其基本程序设计及仿真技术是至关重要的。在这个压缩包中,我们重点关注的是定时器和中断这两个核心功能,它们在单片机应用中扮演着不可或缺的角色。 ...

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

    "初学者学习C51的一些误区和注意事项" 本文旨在为初学者学习C51提供一些误区和注意事项的指南,帮助初学者避免常见的错误和提高编程效率。 1.忌讳绝对定位 在C51编程中,初学者经常犯的一个错误就是使用_at_来...

    keil c51初学视频

    这个初学视频教程很适合那些希望踏入嵌入式系统编程领域的初学者,它将引导你逐步了解如何使用Keil C51进行8051微控制器的程序开发。 在Keil C51的初学者教程中,你可能会学到以下关键知识点: 1. **安装与配置**...

    C51单片机学习教程(适合初学者使用)

    51单片机是电子工程领域中非常基础且广泛应用的微控制器,尤其适合初学者入门。这个"C51单片机学习教程"旨在提供一个友好的起点,帮助新接触单片机的人理解其基本概念和操作。教程可能包含了理论讲解、代码示例以及...

    c51程序35个 初学者用

    总的来说,这个压缩包提供了丰富的实践素材,通过学习和分析这些C51程序,初学者能够快速提升单片机编程和硬件交互的能力,为将来更深入的嵌入式系统开发打下坚实的基础。在学习过程中,不仅要理解代码的逻辑,还要...

    C51-时钟观测-初学

    "基于C51的内置时钟观测程序"可能包含了示例代码,这些代码将帮助初学者理解如何初始化计数器,设置计数模式,以及处理中断。通过阅读和运行这些代码,初学者可以加深对C51和8051时钟系统的理解。 8. **调试技巧**...

    c51基础部分c51基础部分c51基础部分

    本资料主要针对C51的基础部分进行讲解,适合那些希望入门学习8051微控制器编程的初学者。 在C51语言中,我们首先需要了解的是它的基本语法结构,这包括变量声明、数据类型、运算符、流程控制语句等。8051微控制器有...

    c51基本资料、对于初学者是一个很好的材料

    "c51基本资料"的标题表明这是一份针对C51编程的基础教程,适合初学者入门学习。 在描述中提到的"怎样将1个子程序段定位在1个固定的地址位置",这是单片机编程中的一个重要概念。在C51中,由于单片机的内存空间有限...

    单片机初学者学习C51时的一些误区和注意事项

    在学习C51编程的过程中,初学者常常会遇到一些误区和需要注意的事项。首先,对于“C忌讳绝对定位”的概念,初学者可能会误解C语言的内存管理和汇编语言的区别。在C语言中,使用_at_声明变量的绝对地址是不必要的,...

    keil5 C51安装包

    此外,Keil5 C51还提供了丰富的示例代码和详细的文档,可以帮助初学者快速上手和理解8051微控制器的编程。 总的来说,无论你是8051微控制器的开发者,还是电子和嵌入式系统的学习者,Keil5 C51都是一个非常有价值的...

    Keil_c51_v802.rar_Keil_c51_v8_Keil_c51_v802_keil软件

    Keil C51是一款强大的51系列单片机开发工具,尤其对于初学者和专业工程师来说,它是不可或缺的。此软件包"Keil_c51_v802.rar"包含了Keil C51的第8版,即版本8.02,这是一款经过多次迭代优化的稳定版本,为51单片机的...

    c51的简易计算器(已通过实测)初学者参考.pdf

    从给出的文件信息中,我们可以提炼出以下知识点: 1. **C51微控制器基础**: - 文档标题中提到的C51指的是基于8051内核的...这些内容对于初学者来说是非常宝贵的参考资料,可以加深对微控制器编程和硬件控制的理解。

    Python编程初学者指南.pdf

    Python编程初学者指南.pdf

    C51单片机入门教程

    C51单片机入门教程是一份针对初学者设计的教育资源,由大虾电子出品,旨在帮助新手快速理解和掌握C51单片机的基本概念、编程及应用。这份教程共包含30个章节,涵盖了从基础到进阶的多个主题,以PDF格式呈现,易于...

    BOX2D 物理游戏编程初学者指南 陈文登(高清,带目录)

    高清带目录《Box2D物理游戏编程初学者指南》系统地梳理学习Box2D物理游戏编程的各个知识点,并通过图解、问答、举例等形式深入浅出地讲解初学者觉得晦涩难懂的概念、术语。  《Box2D物理游戏编程初学者指南》最后,...

    c51 实例代码及汇编代码

    总之,这个压缩包是一个宝贵的资源,它提供了C51编程的实战示例,无论你是初学者还是有经验的开发者,都可以从中受益。通过深入研究这些代码,你可以提升在8051微控制器上的编程能力,为各种嵌入式系统项目打下坚实...

    keil C51完全版

    在"keil C51完全版"中,包含了所有必要的组件,让初学者能够快速上手,深入理解51单片机的编程和应用。 首先,我们来详细了解keil C51的主要组成部分: 1. **keil μVision IDE**:这是keil C51的集成开发环境,...

    C51单片机学习教程

    本教程旨在帮助初学者深入理解C51单片机的基本原理和应用。 首先,我们需要了解8051单片机的结构。8051是一款8位微处理器,包含CPU、内存、定时器/计数器、串行接口、中断系统等组成部分。它的内部RAM有128字节,...

Global site tag (gtag.js) - Google Analytics