0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

51单片机的寄存器如何赋值

GReq_mcu168 来源:未知 作者:佚名 2017-12-31 08:32 次阅读

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

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

所以,你在看别人写的程序的时候,会经常看到给单片机寄存器赋值的语句。下面就以最简单的控制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码进行相加计算,听这里很迷糊吧。举个例子就明白了。

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

0S44MP1-0.jpg

从上表看出,把寄存器的“位”,从高到低排列,然后以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输出高电平,其它引脚输出低电平,那么对应的值如下图所示:

0S44J113-1.jpg

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

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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    30

    文章

    5015

    浏览量

    117571
  • 51单片机
    +关注

    关注

    269

    文章

    5647

    浏览量

    120551

原文标题:控制单片机里面的寄存器,要怎么玩?

文章出处:【微信号:mcu168,微信公众号:硬件攻城狮】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    C语言玩转单片机寄存器操作技巧

    由于寄存器中有时会有连续几个寄存器位用于控制某个功能,现假设我们需要把寄存器的某几个连续位清零,且其它位不变,代码如下。
    发表于 03-07 11:36 270次阅读

    tle9854的CPU_AIRCR寄存器的系统复位请求位置1,单片机怎么没有复位?

    英飞凌tle9854的CPU_AIRCR寄存器的系统复位请求位置1,单片机怎么没有复位啊
    发表于 02-02 07:29

    如何在sdk的软件开发中给寄存器赋值

    想请问,在hbird-e-sdk软件开发平台中,怎么在c文件中给寄存器赋值,用指针会赋值失败
    发表于 01-10 07:51

    AD5420AREZ使用AT89S52单片机移植官方程序,为什么无法写入数据寄存器

    AD5420AREZ使用AT89S52单片机移植官方程序,在Proteus下仿真没有问题,实际电路可以复位,可以写入控制寄存器,但是无法写入数据寄存器
    发表于 12-20 06:34

    MCU外设寄存器谨慎赋值

    今天给大家介绍的是改动i.MXRT1xxx里IOMUXC_GPR寄存器保留位可能会造成系统异常。
    的头像 发表于 12-12 09:14 348次阅读
    MCU外设<b class='flag-5'>寄存器</b>谨慎<b class='flag-5'>赋值</b>法

    能否使用通过编写代码检测单片机寄存器存在问题?

    如题,能否使用通过编写代码检测单片机寄存器存在问题????
    发表于 10-27 08:30

    可以修改单片机寄存器的默认值吗?

    可以修改单片机寄存器的默认值么
    发表于 10-23 07:20

    8051单片机ram的通用寄存器(00H-1FH)能做位寻址吗?

    8051单片机ram的通用寄存器(00H-1FH)能做位寻址么?
    发表于 10-17 07:38

    单片机程序状态寄存器PSW中F0怎么用?

    求问???单片机程序状态寄存器PSW是什么,有什么用,具体第六位F0是如何使用的?具体一些,拜托​
    发表于 10-08 06:33

    51单片机的定时结构及工作原理详细说明

    由两个8位特殊功能寄存器TH0、TL0、TH1、TL1构成。工作方式寄存器TMOD:用于设置定时的工作模式和工作方式;控制寄存器TCON:用于启动和停止定时
    发表于 09-25 08:23

    什么是51单片机最小系统

    1.什么是51单片机 51 内核单片机是 指兼容Intel 的8051指令系统的单片机统称;从诞生到现在的几十年时间,已成为一款经过市场考验
    的头像 发表于 09-11 10:51 1483次阅读
    什么是<b class='flag-5'>51</b><b class='flag-5'>单片机</b>最小系统

    8051单片机寄存器是什么样的

    CPU中使用寄存器来临时存储信息,这些信息可以是要处理的数据,也可以是指向要获取的数据的地址。在8051单片机中,有一种数据类型是8位,从MSB(最高有效位)D7到LSB(最低有效位)D0。对于8 位数据类型,任何大于 8 位的数据类型都必须在处理之前分成 8 位块。
    的头像 发表于 07-07 12:24 1304次阅读
    8051<b class='flag-5'>单片机</b>的<b class='flag-5'>寄存器</b>是什么样的

    详解PIC系列单片机数据存储器转换寄存器的指令

    A/D转换寄存器 这里摘录一段笔者从网上下载的用PIC16F877单片机芯片(带Flash存储器的)完成有关A/D转换的源程序部分指令,并用它说明有关A/D转换寄存器在指令中的用法。
    的头像 发表于 06-25 13:42 632次阅读

    单片机寄存器编程与位运算

    这次一起来学习一下单片机开发时必备技术——位运算和寄存器编程。
    发表于 06-21 11:11 975次阅读
    <b class='flag-5'>单片机</b>的<b class='flag-5'>寄存器</b>编程与位运算

    51单片机计时#单片机

    单片机51单片机
    jf_51133201
    发布于 :2023年04月28日 22:26:24