查看: 2387|回复: 7

[其他] 【基础帖】寄存器赋值问题

[复制链接]
  • TA的每日心情
    郁闷
    2021-3-10 19:44
  • 签到天数: 7 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    126

    主题

    525

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    2018
    最后登录
    2023-12-25
    发表于 2015-11-22 12:21:36 | 显示全部楼层 |阅读模式
    最近在带下一级的学弟和学妹,昨晚根据他们存在的问题写了一篇基础帖,仅仅给新手看的~
    单片机,就是写程序控制单片机里面的寄存器,然后通过引脚表现出来完成各种电子产品。
    所以,你在看别人写的程序的时候,会经常看到给单片机寄存器赋值的语句。下面就以最简单的控制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码进行相加计算即可。
    举个例子就明白了。
    你可以做一个这样的表格:
    QQ截图20151122121719.png
    从上表看出,把寄存器的“位”,从高到低排列,然后以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输出高电平,其它引脚输出低电平,那么对应的值如下图所示:
    QQ截图20151122121653.png
    我们看寄存器的高四位,取对应1上面的码8+2=10,10对应十六进制的A,再看寄存器的低四位,取对应1上面的码2+1=3,3对应的十六进制还是3,所以结果就是0XA3,这是,你写P1=0不管是51XA3,就可以使得引脚该高的高,该低的低了。
    的8位寄存器,还是ARM的32位寄存器,寄存器中的每一个位都有一定的用意,这些用意可以查看单片机的用户手册得知,你只需要按照你的要求,给对应的位写1或者0,然后利用上面的方法得出结果,就可以操作单片机的寄存器了。

    我知道答案 目前已有7人回答

    评分

    参与人数 1NXP金币 +15 收起 理由
    小七 + 15 赞一个!

    查看全部评分

    很开心
    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    2

    帖子

    0

    新手上路

    Rank: 1

    积分
    16
    最后登录
    2017-3-26
    发表于 2015-11-22 12:48:17 来自手机 | 显示全部楼层
    不就是用二进制转化成十六进制来达到对八个IO口控制输入高低电平的虐狗么
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    2

    帖子

    0

    新手上路

    Rank: 1

    积分
    16
    最后登录
    2017-3-26
    发表于 2015-11-22 12:48:53 来自手机 | 显示全部楼层
    不就是用二进制转化成十六进制来达到对八个IO口控制输入高低电平的目的么
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2016-12-4 23:20
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    9

    主题

    573

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1785
    最后登录
    2017-3-3
    发表于 2015-11-22 19:32:33 | 显示全部楼层
    谢谢分享.png
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2017-1-24 09:50
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    654

    主题

    3262

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    13258
    最后登录
    2019-1-27
    发表于 2015-11-23 09:46:31 | 显示全部楼层
    不错
    回复

    使用道具 举报

    该用户从未签到

    9

    主题

    642

    帖子

    0

    高级会员

    Rank: 4

    积分
    748
    最后登录
    1970-1-1
    发表于 2015-11-23 10:27:00 | 显示全部楼层
    感谢分享哦
    104930kli5jsmlssemljli.png
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-2-14 16:49
  • 签到天数: 296 天

    连续签到: 1 天

    [LV.8]以坛为家I

    241

    主题

    2239

    帖子

    6

    金牌会员

    Rank: 6Rank: 6

    积分
    4473
    最后登录
    2020-4-14
    发表于 2015-11-23 16:35:36 | 显示全部楼层
    清楚的阐述,有助于新手学习。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    61

    主题

    965

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    2394
    最后登录
    1970-1-1
    发表于 2015-11-29 11:30:25 | 显示全部楼层
    谢谢分享            
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-9-2 04:14 , Processed in 0.107998 second(s), 30 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表