上一讲中,直接通过变量sbit来控制P2口中一个LED的亮灭。除了可以通过sbit位控制来设置LED,我们还可以通过P2口,直接控制P2口的LED。
下面的代码可以实现上一讲一样的功能,控制led0亮。
#include "reg52.h"
void main(){
P2 = 0xfe;
}
从上面的代码中,将0xfe直接赋值给P2为什么实现的功能跟位操作的一样?而我们学习的C语言中,貌似没有都见过sbit,P2这两个东西。
在《标准C与C51》的文章中,提到为发挥C51单片机的特性,编译器会增加对MCS51单片特性的支持,而sbit与P2就是为了发挥MCS51单片机增加的特性支持。有兴趣的,可以通过下面的连接看到《标准C与C51》这篇文章
标准C与C51
无论是单片机或者计算机,我们在操作数据实际上,都是某地址上的数据。计算机通过某地址操作的某个地址数据,实际上是操作地址上整个Byte的数据(8位数据),但MCS单片机中为了操作数据方便,除了可以支持整个Byte数据操作,结构上增加硬件上的位寻址来支持位操作(一个Byte的某一位)。位寻址区在RAM的20H~2FH以及特殊功能寄存器的字节地址能够被8整除的特殊寄存器。
为了支持硬件上的位寻址功能,C51对标准C进行扩展,增加位变量定义sbit,通过控制sbit控制位数据(也就是上一讲的sbit控制led)。
在上面的代码可以看到 P2 = 0xfe,0xfe刚好一个字节,通过字节控制LED。但是P2貌似没有没有定义啊,为什么可以直接使用P2进行赋值?
选中P2,点击右键出现下拉菜单,选中Go to definition,查看P2定义。
如下图所示
跳转到"reg52.h",可以看到 sfr P2 = 0xA0;
SFR是Special Function Register(特殊功能寄存器)的缩写,很明显这个关键字sfr也是在标准C不存在的,是C51为了支持MCS51单片机的特性增加的。
sfr定义为 P2的地址为0xA0,在C51中可以直接调用P2执行赋值,赋值是给改地址赋值,而不是改变P2的地址。在MCS51的P2口控制LED,当改变P2口的值时,也控制P2口上的LED。
总结:为了支持MCS51的特性,C51增加了位变量sbit,特殊寄存器地址sfr,更加方便操作控制I/O口。
关键字:C51 编程 输出电 点亮LED
引用地址:
C51编程2-输出电平(点亮LED2)
推荐阅读最新更新时间:2024-11-07 11:31
lcd液晶12232F的串口C51程序(ST7920)
由于12232F这个显示器用得比较平常,但平常见到的是一些并口的汇编程序,并且也没有对应于12232F的并口程序,串口的C51程序极少见,为了方便大家使用,所以本站把它调试了一个出来,大家多多指教! /******************************************************/ /* */ /* 12232F串口驱动程序C51,11.0592M晶振 */ /*使用这款LCD应该要注意的问题: */ /*一定要在VO与VDD及VSS这三个脚间接一个20K的电位器, */ /*电位器的中间脚接VO,其它二脚接VDD和VSS。 */ /*然后调节电位器的大小,直到有显示为止。若是不接的话,
[单片机]
ISP和IAP两种编程方式有何区别?
细说ISP和IAP的区别 但两者的操作方式,结果和应用场合有什么区别 什么是ISP: 用写入器将code烧入,不过,芯片可以在目标板上,不用取出来,在设计目标板的时候就将接口设计在上面,所以叫 在系统编程 ,即不用脱离系统; 什么是IAP: 在应用编程,有芯片本身(或通过外围的芯片)可以通过一系列操作将code写入,比如一款支持Iap的单片机,内分3个程序区,1作引导程序区,2作运行程序区,3作下载区,芯片通过串口接收到下载命令,进入引导区运行引导程序,在引导程序下将new code内容下载到下载区,下载完毕并校验通过后再将下载区内容复制到2区,运行复位程序,则Iap完成; 应用场合: 1,ISP 程序升级需要到现场
[单片机]
2007年度调查揭开嵌入式市场的真相!
嵌入式市场发展趋势的年度同比肯定会引起你的注意。人们在考虑Linux?不对。品牌忠诚度?也不是。那么,到底人们关注的是什么呢? 《Embedded Systems Design》进行了一次非常全面的年度市场调查。你们可能已经知道了这个消息,因为你已经参加了这次调查。事实上,已经有四位读者成为我们随机抽签的中奖者。 这个调查是在全球范围内进行的,大部分是通过电子邮件在今年年初进行的。调查被发给本刊物(美国版本和欧洲版本)和《EE Times》(《电子工程专辑》姊妹刊物)的部分订阅者以及我们举行的嵌入式系统研讨会(Embedded Systems Conferences)的部分出席者,超过1,000位嵌入式系统设计工程师对调查进行
[焦点新闻]
P89C669 串口C51源程序
#include REG669.H #include STRING.H #include INTRINS.H #include INC\UART.H unsigned char xdata BaudRate = 0; unsigned char xdata Uart0_Counter = 0; unsigned char xdata Uart1_Counter = 0; unsigned char xdata Uart0_Buff ; unsigned char xdata Uart1_Buff ; /************************************************************
[单片机]
仿真人型机器人正在快速发展之中
最近我在芝加哥参观了Robots和Vision展览。尽管展厅的大部分都是优良的工业机器人应用,但在仿真仿真人型机器人领域取得的进步确实照亮了可做灵巧动作的机器人的未来。 美国国家航空和宇宙航行局(NASA)的Michael Lutomski在开展第一天的主题演讲中对航天机器人Robonaut进行了一番颇有诱惑力的介绍。该航天机器人是NASA Johnson航天中心机器人系统科技部与美国国防高级研究计划局(DARPA)合作建造的仿真仿真人型机器人。航天机器人是一个工程学上的奇迹,它可以熟练的操作工具和处理修理任务,这一类任务对宇航员来说是非常危险的活动。它的活动范围和灵巧程度与穿着太空服的宇航员相当。 主/从电机控制的
[医疗电子]
基于stm32f103zet6点亮LED之启动文件
终于开始点亮第一个LED了,惯用思维,从模仿开始!前两天一直在做最小系统板,今天上午才调试出来,测试程序也是的别人的,从现在开始就来仔细分析一下这第一个点灯大法吧! 由于在开始学习stm32之前已经接触过相关的指导书了,所以现在学起来还是比较轻松的,废话不多说,直接从启动文件开始吧! 启动文件这部分和arm11的还是很类似的,是开发板上电后执行的第一段代码,唯一不同的感觉的就是比arm11的启动文件简单多了,下面的一些代码解释都是和arm11对照来说的,上代码吧,声明,我使用的是3.5的库!芯片的具体型号是stm32f103zet6!这里我不适用keil自带的启动代码,为什么,百度能搜到原因! 首先明白一点自己所用的板子的简单介绍
[单片机]
C语言嵌入式系统编程修炼之一:背景篇!
不同于一般形式的软件编程,嵌入式系统编程建立在特定的硬件平台上,势必要求其编程语言具备较强的硬件直接操作能力。无疑,汇编语言具备这样的特质。但是,归因于汇编语言开发过程的复杂性,它并不是嵌入式系统开发的一般选择。而与之相比,C语言--一种 高级的低级 语言,则成为嵌入式系统开发的最佳选择。笔者在嵌入式系统项目的开发过程中,一次又一次感受到C语言的精妙,沉醉于C语言给嵌入式开发带来的便利。 图1给出了本文的讨论所基于的硬件平台,实际上,这也是大多数嵌入式系统的硬件平台。它包括两部分: (1)以通用处理器为中心的协议处理模块,用于网络控制协议的处理; (2)以数字信号处理器(DSP)为中心的信号处理模块,用于调制、解调
[单片机]
单片机的图形化编程方法分析
单片机可以用汇编语言编程,也可以用高级语言C、Basic编程,也可以用图形化语言编程。工业控制中普遍采用可编程控制器,其CPU模块内的微控制器往往是普通的单片机,而可编程控制器可以梯形图编程,或者用流程图编程。现在的智能教育机器人控制器均用单片机,而这些机器人的编程大多支持流程图编程。上海广茂达电子信息有限公司的能力风暴系列机器人采用VJC可视化流程图与C语言编程;中鸣机器人系列采用机器人快车软件编程,该软件也是可视化流程图与C语言编程;西米亚公司的乐高系列、博思威龙机器人、美国的VEX系列机器人、双龙公司的机器人DIY系列均可以采用可视化流程图与C语言编程。而这些机器人的控制系统核心均为单片机。由此可知,普通单片机的开发一定
[单片机]