产品选型

51单片机bit 51单片机bit,sbin,sfr,sfr_16有什么区别

小编 2024-10-06 产品选型 23 0

51单片机bit、sbin、sfr、sfr_16有什么区别

1.bit和sbit都是C51扩展的变量类型。

bit和int char之类的差不多,只不过char=8位, bit=1位而已。都是变量,编译器在编译过程中分配地址。除非你指定,否则这个地址是随机的。这个地址是整个可寻址空间,RAM+FLASH+扩展空间。bit只有0和1两种值,意义有点像Windows下VC中的BOOL。

sbit是对应可位寻址空间的一个位,可位寻址区:20H~2FH。一旦用了sbi xxx = REGE^6这样的定义,这个sbit量就确定地址了。sbit大部分是用在寄存器中的,方便对寄存器的某位进行操作的。

2.bit位标量

bit位标量是C51编译器的一种扩充数据类型,利用它可定义一个位标量,但不能定义位指针,也不能定义位数组。它的值是一个二进制位,不是0就是1,类似一些高级语言中的Boolean类型中的True和False。

3.sfr特殊功能寄存器

sfr也是一种扩充数据类型,点用一个内存单元,值域为0~255。利用它可以访问51单片机内部的所有特殊功能寄存器。如用sfr P1 = 0x90这一句定P1为P1端口在片内的寄存器,在后面的语句中我们用以用P1 = 255(对P1端口的所有引脚置高电平)之类的语句来操作特殊功能寄存器。

sfr P1 = 0x90; //定义P1 I/O 口,其地址90H

sfr 关键定后面是一个要定义的名字,可任意选取,但要符合标识符的命名规则,名字最好有一定的含义如P1 口可以用P1 为名,这样程序会变的好读好多.等号后面必须是常数,不允许有带运算符的表达式,而且该常数必须在特殊功能寄存器的地址范围之内(80H-FFH),具体可查看附录中的相关表.

sfr 是定义8 位的特殊功能寄存器而sfr16 则是用来定义16 位特殊功能寄存器,

如8052 的T2 定时器,可以定义为:

sfr16 T2 = 0xCC; //这里定义8052 定时器2,地址为T2L=CCH,T2H=CDH

用sfr16 定义16 位特殊功能寄存器时,等号后面是它的低位地址,高位地址一定要位于物

理低位地址之上.注意的是不能用于定时器0 和1 的定义.

sbit 可定义可位寻址对象.如访问特殊功能寄存器中的某位.其实这样应用是经常要

用的如要访问P1 口中的第2 个引脚P1.1.我们可以照以下的方法去定义:

(1) sbit 位变量名=位地址

sbit P1_1 = Ox91;

这样是把位的绝对地址赋给位变量.同sfr 一样sbit 的位地址必须位于80H-FFH 之间.

(2) sbit 位变量名=特殊功能寄存器名^位位置

sft P1 = 0x90;

sbit P1_1 = P1 ^ 1; //先定义一个特殊功能寄存器名再指定位变量名所在的位置,当可

寻址位位于特殊功能寄存器中时可采用这种方法

(3) sbit 位变量名=字节地址^位位置

sbit P1_1 = 0x90 ^ 1;

这种方法其实和2 是一样的,只是把特殊功能寄存器的位址直接用常数表示. 在C51

存储器类型中提供有一个bdata 的存储器类型,这个是指可位寻址的数据存储器,位于单

片机的可位寻址区中,可以将要求可位录址的数据定义为bdata,如:

unsigned char bdata ib; //在可位录址区定义ucsigned char 类型的变量ib

int bdata ab[2]; //在可位寻址区定义数组ab[2],这些也称为可寻址位对象

sbit ib7=ib^7 //用关键字sbit 定义位变量来独立访问可寻址位对象的其中一位

sbit ab12=ab[1]^12;

操作符"^"后面的位位置的最大值取决于指定的基址类型,char0-7,int0-15,long0-31.

sfr 并标准C 语言的关键字,而是Keil 为能直接访问80C51 中的SFR 而提供了一个新

的关键词,其用法是:

sfrt 变量名=地址值。

单片机、Arduino、Microbit有什么不同?

一.单片机

1.定义

单片机(Single-Chip Microcomputer)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。从上世纪80年代,由当时的4位、8位单片机,发展到现在的300M的高速单片机。

这是百度百科的内容,简单来说就是一块芯片,上面有像计算机电脑一样的CPU(当然性能很弱)、RAM(内存)、ROM(硬盘)等等,同时芯片上还集成了各种各样的模块,包括AD转换、PWM输出、CAN总线通讯等模块。

经典的51单片机

2.应用

单片机广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等领域。

单片机的各类应用

3.开发难度

单片机需要专用的软件、编译器、编程器、电路等装置,需要操作底层寄存器,开发难度大,开发周期长,不同型号单片机各有各的系统,兼容性不好,一般为专业工程师开发专业项目使用,不适合机器人教育领域使用。

二.Arduino

1.定义

Arduino是以AVR型号单片机作为基础,在单片机的基础上对电路、软件库进行封装,这样为业余爱好者提供极大的方便,Arduino是一款便捷灵活、方便上手的开源硬件产品,具有丰富的接口,有数字I/O口,模拟I/O口,同时支持SPI,IIC,UART串口通信。能通过各种各样的传感器来感知环境,通过控制灯光、马达和其他装置来反馈、影响环境。它没有复杂的单片机底层代码,没有难懂的汇编,只是简单而实用的函数。而且具有简便的编程环境IDE,极大的自由度,可拓展性能非常高!标准化的接口模式为它的可持续发展奠定了坚实的基础。

2.应用

Arduino有多个系列,它是一款优质平台,同时它有丰富的衍生课程,可以用于青少年儿童的编程教育。

arduino教育套装

arduino机器人

3.开发

可以使用图形化编程软件,包括但不限于Mixly、Scratch、mblock、mind+等。

也可以使用C语言编译器,Arduino-IDE软件。

电路需要外接传感器进行扩展。

4.缺点

外围传感器比较少,需要复杂的接线。

三.Microbit

1.定义

microbit由英国广播电视公司为青少年编程教育研发的一款微型计算机,是微软、三星、ARM研发的微型电脑。

功能:25颗可编程点阵灯、2个编程按钮、温度速度传感器、蓝牙、电子罗盘、USB接口等。

2.应用

同Arduino应用几乎差不多,主要用于创客、机器人、编程教育等领域

3.开发

可以使用Makecode图形化编程软件开发,也可以使用Python语言开发。

4.对比

针对上图中说arduino 适合高中以上,那确实危言耸听了,arduino如果不学C语言程序设计,四年级以上的学生是完全可以接受的。

相关问答

单片机 BIT 是什么意思?

在单片机中,BIT是二进制位(BinaryDigit)的缩写,它是计算机数据存储的基本单位,表示了一个二进制数中的一位,只能存储0或1两种状态。在单片机编程中,BIT通...

bitflag是什么,编程语言的一种吗?

51单片机,支持对““一个二进制位””,进行操作。程序中,可以定义““位变量””。bitflag,就是声明了一个位变量。这和inti,j,k;,声明整型变量,道...5...

【LCD1602判忙函数原理( 单片机 )bitLCD_Check_Busy(void){Dat...

[最佳回答]这是针对51单片机的编写的程序吧?你的老师应该强调过,在读取一个端口状态之前必须先向这个端口写1,否则读回的状态可能不正确,这是51单片机的端口结...

51单片机 直接寻址的区域?

直接寻址,是把数据直接写入当前地址,或者把当前地址的内容读出如:MOVA,90H,就是把地址90H中的内容写入到寄存器A中。位寻址是位操作命令,写入和读出的是一...

51单片机 ie寄存器每一位含义?

51单片机的IE寄存器各位的含义如下:Bit7:EA。当EA=0时,所有中断禁止(即不产生中断);当EA=1时,各中断的产生由个别的允许位决定。Bit6:ET2。定时2溢出...

51单片机 和stm单片机的区别?

两者的主要区别如下:1、内核:51单片机采用的是51Core,8Bit@2MHzMax(分频后),0.06DMIPS;STM32采用的是ARMCortex-M3,32Bit@72MHz,1....

【一些 单片机 的选择题()1.MCS 51 指令:MOVA,#40H;表示将立即数...

[最佳回答]1.Y2.Y3.N4.N5.Y6.Y7.N8.Y仅供参考!

51单片机 怎么用定时器实现四位数字逐渐+1?

在51单片机中,可以使用定时器来实现四位数字逐渐增加的功能。首先,我们需要选定一个合适的定时器,例如定时器0。然后,我们需要配置定时器的计数方式和计数频...

求一个 51单片机 的程序:一个按键控制led灯闪烁,就是按一下灯闪,再按灯就灭了?

LEDBITP1.0KEYBITP1.1ORG0000HLJMPMAINORG0030HMAIN:CLR00HMAIN1:JBKEY,LOOPJNBKEY,$CPL00H...

51单片机 怎样用一个定时器输出两路方波 - 155****4249 的回...

兄弟,你有没有编译通过?1、主函数mian()->main();2、P1_0、P1_1->P1^0、P1^1;试试!你的程序只有一处错误,我已通过测试,请将mian改为main.另外,如...

猜你喜欢