0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

初次学习C51的一些误区和注意事项详细概述

Wildesbeast 来源:未知 作者:金色雨水 2019-10-04 12:46 次阅读

这里讲述一些初学者学习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 char

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

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

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

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

为什么还要去改?

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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C51
    C51
    +关注

    关注

    5

    文章

    279

    浏览量

    57644
  • 编译器
    +关注

    关注

    1

    文章

    1577

    浏览量

    48614
  • 变量
    +关注

    关注

    0

    文章

    595

    浏览量

    28112
收藏 人收藏

    评论

    相关推荐

    C51一些误区注意事项

    C51一些误区注意事项: 1) C忌讳绝对定位。 常看见初学者要求使用_at_,这是种谬误
    发表于 07-23 09:21

    FPGA学习一些误区

    FPGA学习一些误区
    发表于 08-12 11:46

    C51一些误区注意事项

    存储器放在内部:89c(S)51..,有的增加了RAM:89c(S)52..,有的增加 了一些专用硬件80C552...,有的改变时钟时序W
    发表于 06-29 12:04

    张工分享学习C51单片机的一些误区注意事项

    和变量的说明。可以用文本方 式打开reg52.h,仔细研究下,会有一些写程序的体会。4) 这样构成C项目 在C中,常用项目来管理。项目
    发表于 11-05 10:28

    C51一些误区注意事项

    C51一些误区注意事项: 1) C忌讳绝对定位。 常看见初学者要求使用_at_,这是种谬误
    发表于 12-28 17:10

    C51一些误区注意事项

    做了几年的开发工程师,小编总结了下51单片机的误区注意事项,大家起交流下!1) C忌讳绝对定位。 常看见初学者要求使用_at_,这是
    发表于 09-20 14:25

    C51一些误区注意事项

    C51一些误区注意事项: 1) C忌讳绝对定位。 常看见初学者要求使用_at_,这是种谬误
    发表于 11-07 15:19

    C51一些误区注意事项盘点

    程序存储器放在内部:89c(S)51..,有的增加了RAM:89c(S)52..,有的增加 了一些专用硬件80C552...,有的改变时钟时
    发表于 07-13 08:33

    使用WiFi模块的一些细节及注意事项

    注意事项使用WiFi模块的一些细节及注意事项模块使用3.3V供电,注意电源的稳定,一些USB
    发表于 07-19 08:42

    介绍一些用电时的注意事项和防护措施

    电力给人类带来了光明,给世界带来了动力,但对人的生命也带来了新的危险——触电。在这里,小编为大家准备了份安全用电指南,介绍了在工作和生活中一些用电时的注意事项和防护措施,希望大家建立科学用电、安全
    发表于 09-08 07:12

    谈谈电容的一些基本应用及注意事项

    单片机外围电路设计之二:电容电容,作为电子电路的又基本元器件,大家也是熟悉不过的了。下面我们谈谈电容的一些基本应用及注意事项。但是,由于电容的应用非常广泛,未必能面面俱到,如果有网友觉得没有谈到
    发表于 11-10 07:15

    关于STM32F103C8T6 Systick的一些注意事项

    开发板:普中A7开发板STM32核心板:STM32F103C8T6关于Systick的一些注意事项都在下面的备注中。/*******************************************************
    发表于 01-07 07:52

    初次使用电冰箱注意事项

    初次使用电冰箱的注意事项 对照装箱单,清点附件是否齐全。详细阅读产品使用说明书,按照说明书的要求进行全面检查。    电冰箱
    发表于 02-21 17:48 1359次阅读

    C51一些误区51单片机的寻址方式及10个你可能没用过的Linux命令

    本文档的主要内容详细介绍的是C51一些误区注意事项51单片机的寻址方式10 个你可能没用过
    发表于 06-27 17:34 6次下载
    <b class='flag-5'>C51</b>的<b class='flag-5'>一些</b><b class='flag-5'>误区</b>和<b class='flag-5'>51</b>单片机的寻址方式及10个你可能没用过的Linux命令

    调制驱动器初次使用注意事项

    初次使用调制驱动器时,有几个注意事项需要考虑。
    的头像 发表于 07-10 11:47 445次阅读