reg51.h源码分析笔记

/*  特殊功能寄存器宏 */
sfr P0   = 0x80;//端口寄存器
sfr P1   = 0x90;
sfr P2   = 0xA0;
sfr P3   = 0xB0;
sfr PSW  = 0xD0;//程序状态字寄存器
sfr ACC  = 0xE0;//累加器A
sfr B    = 0xF0;
sfr SP   = 0x81;//堆栈指针
sfr DPL  = 0x82;//数据指针高字节
sfr DPH  = 0x83;//数据指针低字节
sfr PCON  = 0x87;//电源控制
sfr TCON  = 0x88;//定时器/计数器控制
sfr TMOD  = 0x89;//定时器/计数器方式控制
sfr TL0  = 0x8A;//定时器/计数器0(低字节)
sfr TL1  = 0x8B;//定时器/计数器1(低字节)
sfr TH0  = 0x8C;//定时器/计数器0(高字节)
sfr TH1  = 0x8D;//定时器/计数器1(高字节)
sfr IE   = 0xA8;//中断允许控制
sfr IP   = 0xB8;//中断优先级控制
sfr SCON = 0x98;//串行控制
sfr SBUF = 0x99;//串行数据缓存器

在51中有如下SFR寄存器,其中字节地址末位是0H或8H的支持位寻址。

SFR特殊功能寄存器

符号 名称与功能 字节地址 位地址
B B寄存器 F0H F7H-F0H
A/ACC 累加器A E0H E7H-E0H
PSW 程序状态字寄存器 D0H D7H-D0H
IP 中断优先级控制 B8H BFH-B8H
P3 P3口 B0H B7H-B0H
IE 中断允许控制 A8H AFH-A8H
P2 P2口 A0H A7H-A0H
SBUF 串行数据缓存器 99H
SCON 串行控制 98H 9FH-98H
P1 P1口 90H 97H-90H
TH1 定时器/计数器1(高字节) 8DH
TH0 定时器/计数器0(高字节) 8CH
TL1 定时器/计数器1(低字节) 8BH
TL0 定时器/计数器0(低字节) 8AH
TMOD 定时器/计数器方式控制 89H
TCON 定时器/计数器控制 88H 8FH-88H
PCON 电源控制 87H
DPH 数据指针高字节 83H
DPL 数据指针低字节 82H
SP 堆栈指针 81H
P0 P0口 80H 87H-80H

PSW寄存器 - 程序状态寄存器

  • Cy(PSW.7):即PSW的D7位,进位标志位。
  • AC(PSW.6):即PSW的D6位,辅助进位标志位。一般用于乘除法时。
  • F0(PSW.5):即PSW的D5位,用户自定义标志位;
  • RS1及RS0(PSW.4及PSW.3):即PSW的D4、D3位,工作寄存器组选择控制位;
  • OV(PSW.2):溢出标志;
  • F1(PSW·1):保留位,无定义;
  • P(PSW·0):奇偶校验标志位,由硬件置位或清0;存在ACC中的运算结果有奇数个1时P=1,否则P=0。
  • RS1及RS0控制的工作寄存器组

以下是位定义

/*  BIT Register  */
/*  PSW   */
sbit CY   = 0xD7;
sbit AC   = 0xD6;
sbit F0   = 0xD5;
sbit RS1  = 0xD4;
sbit RS0  = 0xD3;
sbit OV   = 0xD2;
sbit P    = 0xD0;

TCON、TMOD控制 百度知道

/*  TCON  */
sbit TF1  = 0x8F;
sbit TR1  = 0x8E;
sbit TF0  = 0x8D;
sbit TR0  = 0x8C;
sbit IE1  = 0x8B;
sbit IT1  = 0x8A;
sbit IE0  = 0x89;
sbit IT0  = 0x88;

IE中断允许寄存器

/*  IE   */
sbit EA   = 0xAF;
sbit ES   = 0xAC;
sbit ET1  = 0xAB;
sbit EX1  = 0xAA;
sbit ET0  = 0xA9;
sbit EX0  = 0xA8;

此处参考baidu经验
摘录:
单片机的中断系统提供两个中断优先级
由IP寄存器把各个中断源的优先级分为高优先级和低优先级
0 表示低优先级
1 表示高优先级
遵循下列两条基本规则:
(1)低优先级中断源可被高优先级中断源所中断,而高优先级中断源不能被任何中断源所中断;
(2)一种中断源(不管是高优先级或低优先级)一旦得到响应,与它同级的中断源不能再中断它。

/*  IP   */ 
sbit PS   = 0xBC;
sbit PT1  = 0xBB;
sbit PX1  = 0xBA;
sbit PT0  = 0xB9;
sbit PX0  = 0xB8;

P3口是一个特殊功能复用端口

/*  P3  */
sbit RD   = 0xB7;
sbit WR   = 0xB6;
sbit T1   = 0xB5;
sbit T0   = 0xB4;
sbit INT1 = 0xB3;
sbit INT0 = 0xB2;
sbit TXD  = 0xB1;
sbit RXD  = 0xB0;

SCON 串行口控制寄存器 详见baidu百科

/*  SCON  */
sbit SM0  = 0x9F;
sbit SM1  = 0x9E;
sbit SM2  = 0x9D;
sbit REN  = 0x9C;
sbit TB8  = 0x9B;
sbit RB8  = 0x9A;
sbit TI   = 0x99;
sbit RI   = 0x98;

  • 采用PQFP-44,PLCC-44封装的STC89C51/RD+系列单片机的P4口访问,如同访问常规的P1/P2/P3口一样,并均可位寻址,P4口的地址为E8h。
    P4端口的地址在E8H,P4口中的每一位均可位寻址,位地址如下:
- P4.6 P4.5 P4.4 P4.3 P4.2 P4.1 P4.0
位地址 EFh EEh EDh ECh EBh EAh E9h E8h
/* 代码如下: */
sfr P4 = 0XE8;   /*声明P4口特殊功能寄存器*/
sbit P40 = 0xE8; /*声明位地址*/
sbit P41 = 0xE9;
sbit P42 = 0xEA;
sbit P43 = 0xEB;
sbit P44 = 0xEC;
sbit P45 = 0xED;
sbit P46 = 0xEE;

你可能感兴趣的:(51单片机,源码分析)