历史上的今天
返回首页

历史上的今天

今天是:2025年06月07日(星期六)

2020年06月07日 | 如何计算给单片机寄存器赋的值

2020-06-07 来源:elecfans

在以前的文章中,我提到过,单片机在电学里面,属于很简单的一种器件,外表看,就是一个芯片,长着很多的脚。内部,就是一堆寄存器。不同的单片机,外部表现就是形状和引脚数量和引脚名称可能不一样,内部,就是寄存器名称不一样。


我们要做的,就是写程序控制单片机里面的寄存器,然后通过引脚表现出来完成各种电子产品。


所以,你在看别人写的程序的时候,会经常看到给单片机寄存器赋值的语句。下面就以最简单的控制51单片机引脚高低电平来说明一下。(不要总是存在51单片机已经淘汰的想法,51单片机至今任然是出货量最大的单片机,并且各大公司每年都有新款的51单片机推出,功能越来越强劲,做产品,要选最合适的单片机,而不要总想用牛逼的单片机。)


例如,单片机P1口有8个引脚,分别为P1.0~P1.7,如果想让P1口的8个引脚都输出高电平,是这么写:P1=0XFF;如果想让P1口的8个引脚都输出低电平,是这么写:P1=0X00;如果只让P1.0输出高电平,其他引脚输出低电平,是这么写:P1=0X01......


这些值是怎么来的呢?


计算方法:

一个数,前面以0X开头,标示后面的数是十六进制数。所以首先,我们先要知道十进制和十六进制的转换。


十六进制:0 1 2 3 4 5 6 7 8 9 A  B  C  D  E  F

十进制:  0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

以上十六进制和十进制是对应关系,例如B对应11.

单片机和计算机一样,是以“位”为最小单片机,例如,P1是一个8位的寄存器。


P1寄存器的8个位名称分别是:

P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0

上面的0X开头的数,是以4个“位”为一个单位进行计算,以8421码进行相加计算,听这里很迷糊吧。举个例子就明白了。


你可以做一个这样的表格:

从上表看出,把寄存器的“位”,从高到低排列,然后以4个为一组,对应的8421码如上图所示。


给寄存器写值,实际上就是给它的每个位写0或者1,例如要使得哪个引脚为高电平,就给对应的位写1;要使得哪一个引脚为低电平,就给对应的位写0。然后把对应为1的8421加起来,以4个位为一组。


例如,我们要让每一个引脚都输出高电平,就是每个位的值都为1,那对应寄存器的高四位,8+4+2+1=15,15对应的是十六进制的F,再看寄存器的低四位,8+4+2+1=15,还是对应F,所以最后的值就是0xFF.


再看,如果让每一个引脚都输出低电平,就是每个位的值都是1,前面说过,只有对应位是1,才把它们的8421加起来,现在都是0,所以都不用加,结果就是0x00.


再看,如果只让P1.0引脚是高电平,其他引脚输出低电平,那么,只有P1.0对应的位是1,其它的位是0,所以,只需要取P1.0上面的1码,所以结果就是0x01。


再看,如果让P1.0、P1.1、P1.7、P1.5输出高电平,其它引脚输出低电平,那么对应的值如下图所示:

我们看寄存器的高四位,取对应1上面的码8+2=10,10对应十六进制的A,再看寄存器的低四位,取对应1上面的码2+1=3,3对应的十六进制还是3,所以结果就是0XA3,这是,你写P1=0XA3,就可以使得引脚该高的高,该低的低了。


不管是51的8位寄存器,还是ARM的32位寄存器,寄存器中的每一个位都有一定的用意,这些用意可以查看单片机的用户手册得知,你只需要按照你的要求,给对应的位写1或者0,然后利用上面的方法得出结果,就可以操作单片机的寄存器了。

推荐阅读

史海拾趣

淩志比高公司的发展小趣事

随着国内市场的逐渐饱和,淩志比高公司开始将目光投向海外市场。公司制定了国际化战略,积极拓展海外市场,与多家国际知名企业建立了合作关系。通过不断的市场拓展和品牌推广,淩志比高逐渐在国际市场上获得了认可。

西安航天民芯公司的发展小趣事

在宇航领域,动力电池管理芯片的性能要求极高。西安航天民芯凭借其在集成电路设计领域的深厚积累,成功研发出全国第一颗宇航级动力电池管理芯片。这一突破不仅打破了国外垄断的局面,也为中国宇航事业的发展做出了重要贡献。

启臣微(Chip)公司的发展小趣事

在人才方面,启臣微一直把人才作为公司发展的核心驱动力。公司建立了一套完善的人才培养机制,为员工提供广阔的职业发展空间和良好的工作环境。同时,公司还积极引进国内外优秀人才,为公司的创新发展注入了新的活力。这些优秀人才的加入,不仅提升了公司的技术水平和管理能力,也为公司的发展注入了新的动力。

ETRI公司的发展小趣事

自1976年成立以来,ETRI一直致力于打造高效便捷的智慧产业生态圈。在汽车制造、轨道交通等行业中,电气和机械设备是必不可少的。ETRI凭借其卓越的技术实力,为这些行业提供了在各种恶劣环境下都能保持稳定性的产品。无论是在电机马达、编码器、传感器,还是在泵、阀、流量计以及温度计压力表等广泛使用的设备中,ETRI都展现了其行业领先的解决方案。

Emerson Embedded Power公司的发展小趣事

随着全球市场的不断扩大,Emerson Embedded Power积极寻求新的增长点。通过与全球知名电子制造商的合作,该公司成功将其产品打入国际市场,并赢得了众多国际客户的信赖。此外,公司还通过并购和战略合作,进一步拓宽了业务范围,提高了市场竞争力。

泰科天润(GPT)公司的发展小趣事

随着数字化技术的快速发展,Emerson Embedded Power紧跟时代潮流,积极推动数字化转型。该公司利用大数据、云计算等先进技术,优化产品设计、生产和供应链管理,提高了生产效率和产品质量。同时,公司还积极探索数字化营销和服务模式,为客户提供更加便捷、高效的服务体验。

问答坊 | AI 解惑

关于单片机控制步进电机的资料很经典

本帖最后由 paulhyde 于 2014-9-15 03:14 编辑 关于单片机控制步进电机的资料很经典包含各种程序、讲解资料  …

查看全部问答>

【藏书阁】上海交大精品课件

包括: rc暂态响应 单管放大实验 实验课件 147页 84.3M PPT版: …

查看全部问答>

开关控制LED——ARM的Proteus实验

实验原理ARM的P0.1口接按钮,再通过P0.0控制LED的亮、灭。本实验的电路图以及实验均在上一个实验基础之上修改。其中电路图只多了一个开关。 Proteus仿真电路图 实验步骤略(与上一实验相同) C语言源程序/************************************* ...…

查看全部问答>

车辆主动防碰撞控制系统的设计

一、引言   随着社会的不断进步,汽车正为越来越多的人所使用,而相应的,交通事故也越来越多。全球每年由交通事故造成的人员和财产损失的数目是惊人的,因此,车辆安全问题已引起人们的高度重视。对大量交通事故的分析表明,80%以上的车祸是由 ...…

查看全部问答>

各位大侠,给个CE6下添加CELLCORE组件的完整流程,谢谢

各位大侠,给个CE6下添加CELLCORE组件的完整流程,谢谢。…

查看全部问答>

WINCE的调试信息异常

Loaded symbols for \'D:\\WINCE500\\PBWORKSPACES\\VIA500_FAB\\RELDIR\\CEPC_X86_RELEASE\\ATAPI.DLL\' Unloaded symbols for \'D:\\WINCE500\\PBWORKSPACES\\VIA500_FAB\\RELDIR\\CEPC_X86_RELEASE\\ATAPI.DLL\' Loaded symbols for \'D:\\W ...…

查看全部问答>

有没有用过PIML的GPRS模块的,这个问题太邪门

发现个很郁闷的问题。用TCP发送数据。数据中如果有 0x0D 0x0A的话,模块会给你做些处理,收到以后就变成了 0x0D,0x0D,0x0A.或者0x0D,0x0A,0x0A. 发短信,用文本方式时也有这样的问题 大家有没有出现同样问题的?…

查看全部问答>

关于多文件的组织中的define

刚刚看到了我们的辛大斑竹写的一个帖子,我就把我最近看的一个问题贴出来,程序是我的一个学长写的,一般我们在写单片机程序的时候是把不同功能的文件写成一个模块,即.c文件,然后再写出对应的.h文件作出对外的接口和函数申明,当在别人地方需要使 ...…

查看全部问答>

mega16 超声波接收问题

以下是我的超声波程序,无论怎么弄都接收不了。请各大神帮忙挖掘错误?谢谢!(小弟是初学者) #define F_CPU 1000000UL #include #include #define uint unsigned int #define uchar unsigned char #define ulong unsigned long const char ...…

查看全部问答>