Linux内核之特殊寄存器

内部高128个字节是SFR区21个SFR(特殊功能寄存器)离散分布(只能使用直接寻址的方式) 。
至于什么叫不可寻址,则是指不能单独进行每一位的操作,如TMOD定时器工作模式及工作方式寄存器,在进行操作时,只能写TMOD=0xXX  。
关于能否进行位操作,可以通过查相关资料知道,当然还有个技巧就是其字节地址换成10 进制后能否被“8 ”整除,能被“8 ”整除的就能进行位操作,不能被“8 ”整除就不能,如P1 地址为90H ,10 进制为144 , 144/8=18 ,能被整除,所以可以位操作 。再如TMOD 地址为89H , 10 进制为137 ,137/8=17.125 ,不能被整除,所以不可以位操作 。
特殊寄存器

Linux内核之特殊寄存器

文章插图
 

Linux内核之特殊寄存器

文章插图
 
(1)ACC——累加器通常用A表示 。该标志常用于程序分支转移的判断条件 。
(2)B——一个寄存器在做乘、除法时放乘数或除数 。
(3)PSW——程序状态字存放CPU工作时的状态 。
D7
D6
D5
D4
D3
D2
D1
D0
CY
AC
F0
RS1
RS0
OV
 
P
用途 :
  • CY :进位标志 。
  • AC :辅助进、借位(高半字节与低半字节间的进、借位) 。
  • F0 :用户标志位,由用户(编程人员)决定什么时候用,什么时候不用 。
  • RS1 、RS0 :工作寄存器组选择位 。
  • OV :溢出标志位 。运算结果按补码运算理解 。有溢出,OV=1;无溢出,OV=0 。
  • P :奇偶校验位:它用来表示ALU运算结果中二进制数位“1”的个数的奇偶性 。
(4)DPTR(DPH、DPL) ——数据指针可以用它来访问外部数据存储器中的任一单元,如果不用,也可以作为通用寄存器来用,由我们自已决定如何使用 。分成DPL(低8位)和DPH(高8位)两个寄存器 。用来存放16位地址值,以便用间接寻址或变址寻址的方式对片外数据RAM或程序存储器作64K字节范围内的数据操作 。(5)P0、P1、P2、P3——四个并行输入/输出口的寄存器 。(6)IE——中断充许寄存器按位寻址,地址:A8H 。
B7
B6
B5
B4
B3
B2
B1
B0
EA
-
ET2
ES
ET1
EX1
ET0
EX0
  •  
  • EA (IE.7): EA=0时,所有中断禁止(即不产生中断)
    EA=1时,各中断的产生由个别的允许位决定
  • -(IE.6) :保留
  • ET2(IE.5):定时2溢出中断充许(8052用)
  • ES (IE.4):串行口中断充许(ES=1充许,ES=0禁止)
  • ET1(IE.3):定时1中断充许
  • EX1(IE.2):外中断INT1中断充许
  • ET0(IE.1):定时器0中断充许
  • EX0(IE.0):外部中断INT0的中断允许
中断的自然优先级 :
中断函数编号
中断名称
中断标志位
中断使能位
中断向量地址
默认优先级
0
外部中断0
IE0
EX0
03H
1(最高)
1
定时器T0中断
TF0
ET0
0BH
2
2
外部中断1
IE1
EX1
13H
3
3
定时器T1中断
TF1
ET1
1BH
4
4
UART中断(串口)
T1/R1
ES
23H
5
(7)TCON——定时器/计数器控制寄存器字节地址为88H,可以位寻址 。
位序号
D7
D6
D5
D4
D3
D2
D1
D0
位符号
TF1
TR1
【Linux内核之特殊寄存器】TF0
TR0
IE1
IT1
IE0
IT0
位地址
8FH
8EH
8DH
8CH
8BH
8AH
89H
88H
TF1: 定时器1溢出标志位,当定时器1计满溢出时,由硬件将TF1置1,并申请中断;进入中断服务程序后,由硬件自动清零 。


推荐阅读