8051的C语言编程和传统的C语言编程是类似的。当然其中有些数据类型是不一样的,我们知道8051支持强大的位寻址能力,因此8051的C语言编程增加了一些新的数据类型,为了不使的8051的能力被浪费。下面给出新增的数据类型。

bit   ——用于定义1个位变量,用于8051的位寻址空间(仅仅限于内部RAM的20H——2FH的字节空间(00H——7FH的位地址空间)).(不得不说8051的地址重叠搞得人很烦)

例如:bit  flag  = 0;    定义flag为一个位变量,并且初始化为0.

sbit  ——用于定义一个位变量,用于8051的特殊功能寄存器(内部RAM的80H——FFH的字节空间)

例如:sbit CY  =  0xD7;

sbit  P0_0 = 0x80^0;

上面的bit和sbit是两种不同的数据类型,bit是用于给某一位地址赋值,而sbit是用于给某一个特殊功能寄存器的某一位的位地址起名字。

sfr  ——用于定义一个特殊功能寄存器变量。

例如:sfr  PSW  = 0xD0;

当有了上面的定以后,可以这样来使用PSW的每一位,例如:PSW^0;表示PSW的第0位,即奇偶校验位P。

sfr16  ——用于定义16位的特殊功能寄存器变量。

例如:sfr16  DPTR  = 0x82;

通过上面引入的数据类型,使得8051的C语言编程变得和普通的C语言编程基本一致。也充分利用了8051的特点。

现在,我们的集成开发环境都很人性化,把8051的特殊功能寄存器,可位寻址特殊功能寄存器的控制位都定义在一个名为reg51.h的头文件里面。下面我们给出该头文件的内容。

/*--------------------------------------------------------------------------

REG51.H

Header file for generic 80C51 and 80C31 microcontroller.

Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc.

All rights reserved.

--------------------------------------------------------------------------*/

#ifndef __REG51_H__

#define __REG51_H__

/*  BYTE Register  */

sfr P0   = 0x80;

sfr P1   = 0x90;

sfr P2   = 0xA0;

sfr P3   = 0xB0;

sfr PSW  = 0xD0;

sfr ACC  = 0xE0;

sfr B    = 0xF0;

sfr SP   = 0x81;

sfr DPL  = 0x82;

sfr DPH  = 0x83;

sfr PCON = 0x87;

sfr TCON = 0x88;

sfr TMOD = 0x89;

sfr TL0  = 0x8A;

sfr TL1  = 0x8B;

sfr TH0  = 0x8C;

sfr TH1  = 0x8D;

sfr IE   = 0xA8;

sfr IP   = 0xB8;

sfr SCON = 0x98;

sfr SBUF = 0x99;

/*  BIT Register  */

/*  PSW   */

sbit CY   = 0xD7;

sbit AC   = 0xD6;

sbit F0   = 0xD5;

sbit RS1  = 0xD4;

sbit RS0  = 0xD3;

sbit OV   = 0xD2;

sbit P    = 0xD0;

/*  TCON  */

sbit TF1  = 0x8F;

sbit TR1  = 0x8E;

sbit TF0  = 0x8D;

sbit TR0  = 0x8C;

sbit IE1  = 0x8B;

sbit IT1  = 0x8A;

sbit IE0  = 0x89;

sbit IT0  = 0x88;

/*  IE   */

sbit EA   = 0xAF;

sbit ES   = 0xAC;

sbit ET1  = 0xAB;

sbit EX1  = 0xAA;

sbit ET0  = 0xA9;

sbit EX0  = 0xA8;

/*  IP   */

sbit PS   = 0xBC;

sbit PT1  = 0xBB;

sbit PX1  = 0xBA;

sbit PT0  = 0xB9;

sbit PX0  = 0xB8;

/*  P3  */

sbit RD   = 0xB7;

sbit WR   = 0xB6;

sbit T1   = 0xB5;

sbit T0   = 0xB4;

sbit INT1 = 0xB3;

sbit INT0 = 0xB2;

sbit TXD  = 0xB1;

sbit RXD  = 0xB0;

/*  SCON  */

sbit SM0  = 0x9F;

sbit SM1  = 0x9E;

sbit SM2  = 0x9D;

sbit REN  = 0x9C;

sbit TB8  = 0x9B;

sbit RB8  = 0x9A;

sbit TI   = 0x99;

sbit RI   = 0x98;

#endif

8051单片机有多重存储方式,内部RAM,内部ROM,外部RAM,外部ROM。有时候我们希望知道该变量在哪儿。

上面这张表给出了变量,函数等被放在8051的那个存储区。

例如:char  code  str[] = "hello  world!";定义一个数组,被放在ROM中。

当然了,上面的定义方式会导致在访问的时候速度是不一样的,比如data就比xdata要快。如果数据是放在外部RAM的,可以考虑使用xdata或者是pdata。

如果忘记声明存储在哪儿,8051会默认是small的存储模式。该模式将所有数据放在内部RAM中。详细请看下表

在程序中可以通过#program来选择设置哪一种模式。否则默认是small。

最后,还是要谈到关于指针的问题,8051的C语言编程实际上还是很像汇编语言的,需要我们对内存区域进行直接操作。

指针在C语言里本来就很灵活,在这里我们还是要看看指针的存储类型。

例如: int  *xdata  numptr = #    指针指向int类型的数据,但它本身是在外部RAM中存储着。

int  data  *xdata  numptr  =  #   指针指向存储在内部RAM中的int类型数据,指针本身在外部RAM中。

还有一点很重要,C语言的数据类型在8051中占据的大小。

以上的结果表明:

char类型在8051中占据了1个字节

int类型在8051中占据了2个字节

float类型在8051中占据了4个字节

double类型在8051中占据了4字节

指针是最有意思的一个。从上面的结果来看,如果没有指定指针所指向的数据存储在哪块儿,则指针在8051中占据3字节。其中第一个字节存储了它所对应的数据的存储类型

如果指明了在内部RAM,则占据一个字节,在外部RAM则是占用2个字节。

未定义数据存储类型的指针变量第1字节中的数据和数据存储类型的对应关系

用c语言给8051编程,8051单片机的C语言编程相关推荐

  1. 单片机的c语言ppt,第9章-单片机的C语言编程.ppt

    第9章-单片机的C语言编程.ppt 第9章单片机的C语言编程 9 1C51编程语言简介9 2C51的数据类型9 3数据的存储器类型和存储器模式9 4SFR 位变量 存储器和I O接口的定义9 5C51 ...

  2. python微控制器编程从零开始-单片机可以使用Python语言来控制了!

    告诉广大Python爱好者一个好消息,单片机可以使用Python语言来控制了. Arudino虽然在开源硬件领域非常流行,但是对于不懂C/C++编程语言的玩家来说,还是需要一段学习时间. Damien ...

  3. 单片机C语言数据存储原理,介绍单片机中C语言的数据存储与程序编写

    一.五大内存分区: 内存分成5个区,它们分别是堆.栈.自由存储区.全局/静态存储区和常量存储区. 1.栈区(stack):FIFO就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区 ...

  4. c语言接口作用是什么,单片机接口C语言开发技术

    单片机接口C语言开发技术 编辑 锁定 讨论 上传视频 <单片机接口C语言开发技术>是2009年清华大学出版社出版的图书,作者是龚运新.彭建军.[1] 书    名 单片机接口C语言开发技术 ...

  5. 单片机中用c语言编写 逻辑按位,.单片机的C语言中位操作用法.pdf

    .单片机的C语言中位操作用法 风行下载2012 正式版官方下载:/ C C 单片机的CC语言中位操作用法 作者:郭天祥 来源:转自 更新时间:2008-12-421:50:22 在对单处机进行编程的过 ...

  6. c语言写红绿灯程序,51单片机用C语言实现交通灯(红绿灯)源程序

    51单片机用C语言实现交通灯(红绿灯)源程序 交通灯,红黄绿灯交替亮,怎样实现呢?其实就是根据单片机定时器及倒计时的程序修改. 源程序如下: /* 1.程序目的:使用定时器学习 倒计时 红绿灯原理 主 ...

  7. 单片机c语言交通灯源程序,51单片机用C语言实现交通灯_红绿灯_源程序

    单片机 AT STC C语言 C 89c51 89c52 设计 交通灯 仿真 毕业论文 程序设计 毕业设计 课题设计 51单片机用C语言实现交通灯(红绿灯)源程序 2009-10-29 23:00 交 ...

  8. c51语言case是什么意思,单片机入门-C51语言switch-case语句电路应用实例

    原标题:单片机入门-C51语言switch-case语句电路应用实例 教学视频如下: 本例介绍switch-case选择语句的应用,用按钮控制LED灯作为实例,介绍如何使用该语句做设计.绘制了相应的电 ...

  9. c语言转换为stc程序,STC51单片机入门(C语言)

    以前老资料,可继续下载参考. 目   录 第1篇 单片机KEIL开发环境 第1章  点亮LED实例与经典延时程序介绍(看不懂就从第2章动手) 1.1 51单片机最小系统与芯片引脚图 1.2 点亮LED ...

  10. 单片机汇编语言编程_单片机编程用C语言还是汇编?

    单片机是一种可编程器件,单片机的出现使硬件设计变得更为简单,产品的功能也更强大,而程序就是单片机的灵魂.目前功能稍微复杂一点的电子产品,都是以单片机为核心,再加以不通的外设电路实现不通的功能需求.单片 ...

最新文章

  1. vscode 开发lua搭建
  2. THREE TRACKS AT UNIVERSITY
  3. 如何在Node.js(Javascript)中等待,我需要暂停一段时间?
  4. Razor.js,基于JavaScript的Razor实现
  5. python 数字转十六进制_在Python中将整数转换为十六进制
  6. Python 多进程 multiprocessing 使用示例
  7. View4.5测试参考文档1--测试环境规划
  8. vs如何运行外部 C++ 文件
  9. IO库----IO类,文件输入输出,string流
  10. linux fcntl函数,fcntl函数的使用详解
  11. 浏览器Cookie策略
  12. R语言source命令使用过程中遇到的某些错误的解决方法
  13. 浏览器下载文件的两种方式
  14. 特拉华大学计算机专业怎么样,最新美国大学CS专业薪资排名,也许这就是你择校的理由!...
  15. CKEditor富文本编辑器使用
  16. 腾讯云轻量服务器和虚拟主机VPS有什么区别?
  17. 通过U盘安装windows简易教程
  18. JVM进阶(六)——鲜为人知的二次标记
  19. 图数据库nebula
  20. 怎样删除pdf中的多页?pdf如何选择其中几页?pdf文档可以删除某一页

热门文章

  1. 变频技术在起重机上的应用
  2. Excel Sheet页相关操作(21.10现代设计体验)
  3. 日常学习之总结(1机器学习,2jupyter notebook,3语言类,4快捷键,5操作系统,6密码学,7Web安全,8Kali,9正则表达式,10计算机网络,11编程题目)
  4. 软件测试:购买商品类测试不可忽略的问题
  5. 深度学习:从2D卷积到3D卷积的简单理解
  6. [git]怎样git clone所有远程branch
  7. 3GPP TS 23501-g51 中英文对照 | 5.2.3 Identification and authentication
  8. 小米Note标配版 双网通刷原生安卓7.0教程(详细)
  9. 【Python】条件变量、信号变量、事件
  10. SEO图片代码优化技巧汇总