打印
[STM8]

高手们能否详细讲解下下面程序

[复制链接]
774|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xxrs|  楼主 | 2021-4-1 21:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
UART2->CR1 &= (u8)(~UART2_CR1_UARTD);
         UART2->CR1 &= (u8)(~UART2_CR1_UARTD);
         TIM1->BKR |= TIM1_BKR_MOE;
         TIM1->CCER1 |= TIM1_CCER1_CC1E;

使用特权

评论回复
沙发
llljh| | 2021-4-1 21:55 | 只看该作者
我们现在一般都是用库函数操作,很少用寄存器去操作,你可以多看看手册,说不定会有什么收获

使用特权

评论回复
板凳
dingy| | 2021-4-1 21:56 | 只看该作者
看规格书,代码已经很清楚了

使用特权

评论回复
地板
pengf| | 2021-4-1 21:58 | 只看该作者
你是问C语言的问题,还是问单片机寄存器

使用特权

评论回复
5
renyaq| | 2021-4-1 22:01 | 只看该作者
C语言问题,很容易,位的逻辑操作,。

使用特权

评论回复
6
supernan| | 2021-4-1 22:03 | 只看该作者

按位取反“~”:按位取反1变0,0变1
~按位取反
5二进制00000101,取反11111010,代表-6
所以~5值-6

~是按位取反,例如整数3,二进制形式是
00000000000000000000000000000011,按位取反后就是
11111111111111111111111111111100

使用特权

评论回复
7
houcs| | 2021-4-1 22:05 | 只看该作者

nt a = 35;
int b = 900;
a |= b;


==>a = a|b

|是按位或操作,就是只要有一个1就是1,两个都是0才是0,如上例

35 的二进制为:00000000 00000000 00000000 00100011
900的二进制为:00000000 00000000 00000011 10000100

----------------------------------------------------
按位或的结果:00000000 00000000 00000011 10100111
也就是935

使用特权

评论回复
8
wyjie| | 2021-4-1 22:09 | 只看该作者

x|=y; 等价于x=x|y; 为位运算里面的或
x&=~y 等价于 x=x&(~y); 先对y取反 再和x做与运算

使用特权

评论回复
9
zwll| | 2021-4-1 22:13 | 只看该作者
C语音的基础,怎么讲。

使用特权

评论回复
10
zhuhuis| | 2021-4-1 22:14 | 只看该作者
程序只是C语言操作寄存器,你应该不理解的是这段程序是怎么操作寄存器的吧

使用特权

评论回复
11
xxrs|  楼主 | 2021-4-1 22:16 | 只看该作者


哦,那我就知道怎么回事了,多谢大家

使用特权

评论回复
12
guanjiaer| | 2021-5-1 11:17 | 只看该作者
楼主哪里看不懂啊

使用特权

评论回复
13
观海| | 2021-5-1 11:18 | 只看该作者
这就是 一般的寄存器操作啊

使用特权

评论回复
14
八层楼| | 2021-5-1 11:19 | 只看该作者
是看不明白计算过程吗

使用特权

评论回复
15
heimaojingzhang| | 2021-5-1 11:22 | 只看该作者
单步运行 看看寄存器状态变化就知道了

使用特权

评论回复
16
keaibukelian| | 2021-5-1 11:23 | 只看该作者
看寄存器配置那块

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

405

主题

7415

帖子

1

粉丝