找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1086|回复: 8
收起左侧

对这段单片机程序不理解,求指教

[复制链接]
ID:881715 发表于 2022-4-24 12:30 | 显示全部楼层 |阅读模式
     void UartInit(void)                //19200bps@32MHz{
        PCON &= 0x7F;                //波特率不倍速
        SCON = 0x50;                //8位数据,可变波特率
        AUXR |= 0x40;                //定时器时钟1T模式
        AUXR &= 0xFE;                //串口1选择定时器1为波特率发生器
        TMOD &= 0x0F;                //设置定时器模式
        TMOD |= 0x20;                //设置定时器模式
        TL1 = 0xCC;                //设置定时初始值
        TH1 = 0xCC;                //设置定时重载值
        ET1 = 0;                //禁止定时器%d中断
        TR1 = 1;                //定时器1开始计时
        TI=1;                        // 很关键,使用printf函数时必须有此命令
}
     各位大神大家好,这是一个串口通讯初始化的程序我有一些不理解特此求教!
PCON &= 0x7F;AUXR |= 0x40;AUXR &= 0xFE;TMOD &= 0x0F;TMOD |= 0x20;                这几句为什么串口软件计算器生成的代码不写成这样PCON = 0x7F;AUXR = 0x40;
AUXR = 0xFE;TMOD = 0x0F;TMOD = 0x20;直接赋值呀??
               

回复

使用道具 举报

ID:401564 发表于 2022-4-24 14:00 | 显示全部楼层
=是直接赋值,会影响寄存器的所有位
|是位或,只改变你想要改变的某个位而已,&也一样的道理
回复

使用道具 举报

ID:390416 发表于 2022-4-24 15:23 | 显示全部楼层
你串口用的是定时器T1,那么定时器T0呢?它也是需要TMOD这个寄存器的,并且不能位操作,只能字节一起操作,为了不影响T0,就必须按位与拉低、按位或拉高,而不能直接赋值。
回复

使用道具 举报

ID:752974 发表于 2022-4-24 16:55 | 显示全部楼层
        PCON &= 0x7F;                //最高位清零
     
        AUXR |= 0x40;                //第二位置1
        AUXR &= 0xFE;                //最低位清零
        TMOD &= 0x0F;                //高4位清零
        TMOD |= 0x20;                //第一位置1
为什么要这样操作?目的是修改寄存器中要修改的位并保持其它位的值不变。
      
回复

使用道具 举报

ID:883242 发表于 2022-4-24 17:27 | 显示全部楼层
初始化的时候直接赋值就可以了,你说得对。&=、|=这样的写法适合于中间要改变寄存器的值,看上去更加直观。
回复

使用道具 举报

ID:119238 发表于 2022-4-24 17:50 | 显示全部楼层
使用位赋值可能使代码更易于阅读吧
回复

使用道具 举报

ID:881715 发表于 2022-4-26 11:49 | 显示全部楼层
Hephaestus 发表于 2022-4-24 17:27
初始化的时候直接赋值就可以了,你说得对。&=、|=这样的写法适合于中间要改变寄存器的值,看上去更加直观。

多谢您的指导
回复

使用道具 举报

ID:881715 发表于 2022-4-26 11:49 | 显示全部楼层
多谢大家指教
回复

使用道具 举报

ID:123289 发表于 2022-4-26 17:14 | 显示全部楼层
完全可以!
不过,它们都有8个位,每个位有着各自的作用。
你这样做,你看到的位是对了,未看到的位也被你强制修改了啊。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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