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个时钟周期