用c语言给8051编程,8051单片机的C语言编程
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语言编程相关推荐
- 单片机的c语言ppt,第9章-单片机的C语言编程.ppt
第9章-单片机的C语言编程.ppt 第9章单片机的C语言编程 9 1C51编程语言简介9 2C51的数据类型9 3数据的存储器类型和存储器模式9 4SFR 位变量 存储器和I O接口的定义9 5C51 ...
- python微控制器编程从零开始-单片机可以使用Python语言来控制了!
告诉广大Python爱好者一个好消息,单片机可以使用Python语言来控制了. Arudino虽然在开源硬件领域非常流行,但是对于不懂C/C++编程语言的玩家来说,还是需要一段学习时间. Damien ...
- 单片机C语言数据存储原理,介绍单片机中C语言的数据存储与程序编写
一.五大内存分区: 内存分成5个区,它们分别是堆.栈.自由存储区.全局/静态存储区和常量存储区. 1.栈区(stack):FIFO就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区 ...
- c语言接口作用是什么,单片机接口C语言开发技术
单片机接口C语言开发技术 编辑 锁定 讨论 上传视频 <单片机接口C语言开发技术>是2009年清华大学出版社出版的图书,作者是龚运新.彭建军.[1] 书 名 单片机接口C语言开发技术 ...
- 单片机中用c语言编写 逻辑按位,.单片机的C语言中位操作用法.pdf
.单片机的C语言中位操作用法 风行下载2012 正式版官方下载:/ C C 单片机的CC语言中位操作用法 作者:郭天祥 来源:转自 更新时间:2008-12-421:50:22 在对单处机进行编程的过 ...
- c语言写红绿灯程序,51单片机用C语言实现交通灯(红绿灯)源程序
51单片机用C语言实现交通灯(红绿灯)源程序 交通灯,红黄绿灯交替亮,怎样实现呢?其实就是根据单片机定时器及倒计时的程序修改. 源程序如下: /* 1.程序目的:使用定时器学习 倒计时 红绿灯原理 主 ...
- 单片机c语言交通灯源程序,51单片机用C语言实现交通灯_红绿灯_源程序
单片机 AT STC C语言 C 89c51 89c52 设计 交通灯 仿真 毕业论文 程序设计 毕业设计 课题设计 51单片机用C语言实现交通灯(红绿灯)源程序 2009-10-29 23:00 交 ...
- c51语言case是什么意思,单片机入门-C51语言switch-case语句电路应用实例
原标题:单片机入门-C51语言switch-case语句电路应用实例 教学视频如下: 本例介绍switch-case选择语句的应用,用按钮控制LED灯作为实例,介绍如何使用该语句做设计.绘制了相应的电 ...
- c语言转换为stc程序,STC51单片机入门(C语言)
以前老资料,可继续下载参考. 目 录 第1篇 单片机KEIL开发环境 第1章 点亮LED实例与经典延时程序介绍(看不懂就从第2章动手) 1.1 51单片机最小系统与芯片引脚图 1.2 点亮LED ...
- 单片机汇编语言编程_单片机编程用C语言还是汇编?
单片机是一种可编程器件,单片机的出现使硬件设计变得更为简单,产品的功能也更强大,而程序就是单片机的灵魂.目前功能稍微复杂一点的电子产品,都是以单片机为核心,再加以不通的外设电路实现不通的功能需求.单片 ...
最新文章
- vscode 开发lua搭建
- THREE TRACKS AT UNIVERSITY
- 如何在Node.js(Javascript)中等待,我需要暂停一段时间?
- Razor.js,基于JavaScript的Razor实现
- python 数字转十六进制_在Python中将整数转换为十六进制
- Python 多进程 multiprocessing 使用示例
- View4.5测试参考文档1--测试环境规划
- vs如何运行外部 C++ 文件
- IO库----IO类,文件输入输出,string流
- linux fcntl函数,fcntl函数的使用详解
- 浏览器Cookie策略
- R语言source命令使用过程中遇到的某些错误的解决方法
- 浏览器下载文件的两种方式
- 特拉华大学计算机专业怎么样,最新美国大学CS专业薪资排名,也许这就是你择校的理由!...
- CKEditor富文本编辑器使用
- 腾讯云轻量服务器和虚拟主机VPS有什么区别?
- 通过U盘安装windows简易教程
- JVM进阶(六)——鲜为人知的二次标记
- 图数据库nebula
- 怎样删除pdf中的多页?pdf如何选择其中几页?pdf文档可以删除某一页
热门文章
- 变频技术在起重机上的应用
- Excel Sheet页相关操作(21.10现代设计体验)
- 日常学习之总结(1机器学习,2jupyter notebook,3语言类,4快捷键,5操作系统,6密码学,7Web安全,8Kali,9正则表达式,10计算机网络,11编程题目)
- 软件测试:购买商品类测试不可忽略的问题
- 深度学习:从2D卷积到3D卷积的简单理解
- [git]怎样git clone所有远程branch
- 3GPP TS 23501-g51 中英文对照 | 5.2.3 Identification and authentication
- 小米Note标配版 双网通刷原生安卓7.0教程(详细)
- 【Python】条件变量、信号变量、事件
- SEO图片代码优化技巧汇总