2021-12-13-寄存器怪谈

发布时间 2023-09-17 19:47:06作者: Yecgaa1
layout: post
title: 寄存器怪谈
categories: 日志
tags: 
    - 日志 
    - 大二
BGImage: 'https://github.xutongxin.me/https://raw.githubusercontent.com/xutongxin1/PictureBed/master/img0/20220310123346.png'
jekyll-theme-WuK:
    musicid: '34367899'

基本的操作规则

&与 |或 !!非

这三个都是对两端数值的二进制操作

即便你看到的两边是十进制

b0001 & 0x8 和 b0001 & 1000是等价的

(0x8就是把8换成16进制计数,就是8*16^0=8,记住0x8不是只能计数0-15)

GPIO1->DR &= ~(1<<3);/* 将 GPIO1_DR 的 bit3 清零 */

GPIO1->DR |= (1<<3);/* 将 GPIO1_DR 的 bit3 置 1 */

左移运算符(<<)

定义:将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)。

设 a=1010 1110,a = a<< 2 将a的二进制位左移2位、右补0,即得a=1011 1000。

若左移时舍弃的高位不包含1,则每左移一位,相当于该数乘以2。

右移运算符(>>)

定义:将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。

例如:a=a>>2 将a的二进制位右移2位,左补0 或者 左补1得看被移数是正还是负。

操作数每右移一位,相当于该数除以2。

时钟周期,机械周期,指令周期,状态周期,总线周期

时钟周期就是

1/单片机频率

如stm32就是1/72m

状态周期是时钟周期的2倍,由时钟周期二分频得到。

完成一个基本操作所需要的时间称为机器周期

每个单片机都不同

指令周期是指取出并完成一条指令所需的时间,一般由若干个机器周期组成,分为单周期指令,双周期指令和多周期指令。每个单片机都不同

通常把CPU通过总线对微处理器外部(存贮器或 I/O接口)进行一次访问所需时间称为一个总线周期。一个总线周期一般包含4个时钟周期,这4个时钟周期分别称4个状态即T1状态、T2状态、T3状态和 T4状态。

对于51,这些量的关系是一个机器周期=6个状态周期=12个时钟周期