51单片机架构

8051单片机的基本组成

(1)一个 ** **8 ** **位微处理器 ** **CPU ** **。

(2)片内数据存储器 ** **RAM ** **和特殊功能寄存器 ** **SFR ** **。

(3)片内程序存储器 ** **ROM ** **。

(4 )两个定时/计数器 ** **T0 ** **、 ** **T1 ** **,可用作定时器,也可用以对外部脉冲进行计数。

(5)四个8位可编程的并行 ** **I/O ** **端口,每个端口既可作输入,也可作输出。

(6)一个串行端口,用于数据的串行通信。

(7)中断控制系统。

(8)内部时钟电路。

51单片机架构_第1张图片

01 CPU

CPU内部组成;主要由三极管组成的逻辑电路;构成运算器;控制器

三极管原理

** **三极管在cpu中主要作用:开关 ** **(构成逻辑门电路)

三极管的集电极电流在一定范围内随基极电流呈线性变化,这就是放大特性。当基极电流高过此范围时,三极管集电极电流会达到饱和值 (导通),基极电流低于此范围时,三极管会进入截止状态(断路), 这种导通或截止的特性在电路中可起到开关作用;

三极管共有有三种工作方式,根据其可搭建逻辑门电路

** **逻辑非 ** **
51单片机架构_第2张图片

** **逻辑与 ** **

51单片机架构_第3张图片

** **逻辑或 ** **

51单片机架构_第4张图片

根据逻辑门可搭建简单加法器

1位加法器(也称之为半加法器),

51单片机架构_第5张图片

在此基础上可实现全加法器。

在计算机中负数以补码表示;
原码:将一个整数,转换成二进制,就是其原码。
如单字节的5的原码为:0000 0101;-5的原码为1000 0101。
反码:正数的反码就是其原码;负数的反码是将原码中,除符号位以外,每一位取反。
如单字节的5的反码为:0000 0101;-5的反码为1111 1010。
补码:正数的补码就是其原码;负数的反码+1就是补码。
如单字节的5的补码为:0000 0101;-5的原码为1111 1011。
在计算机中,正数是直接用原码表示的,如单字节5,在计算机中就表示为:0000 0101。
负数用补码表示,如单字节-5,在计算机中表示为1111 1011。
乘法运算;除法运算均可转化为“+”运行算;最终将数学运算转换成逻辑运算;
51单片机架构_第6张图片

运算器

运算器以算术逻辑单元ALU为核心,加上累加器ACC、暂存寄存器TMP和程序状态字寄存器PSW等所组成。ALU主要用于完成二进制数据的算术和逻辑运算,并通过对运算结果的判断影响程序状态字寄存器PSW中有关位的状态。

控制器

控制器包括程序计数器PC、指令寄存器、指令译码器、数据指针DPTR、堆栈指针SP、缓冲器以及定时与控制电路等。控制电路完成指挥控制工作,协调单片机各部分正常工作。

**程序计数器 ** **PC ** : 当一条指令按PC所指向的地址从程序存储器中取出之后,PC的值会自动增量,即指向下一条指令。

**堆栈指针 ** **SP ** : 用来指示堆栈的起始地址。80C51单片机的堆栈位于片内RAM中,而且属于“上长型”堆栈,复位后SP被初始化为07H,使得堆栈实际上由08H单元开始。

指令译码器: 当指令送入指令译码器后,由译码器对该指令进行译码,CPU根据译码器输出的电平信号使定时控制电路产生执行该指令所需要的各种控制信号。

**数据指针寄存器 ** DRTR: 它是一个16位寄存器,由高位字节DPH和低位字节DPL组成,用来存放16位数据存储器的地址,以便对片外64kB的数据RAM区进行读写操作。

02 时钟电路

单片机时钟电路通常有两种形式:

1.内部振荡方式:8051单片机片内有一个用于构成振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别是此放大器的输入端和输出端。把放大器与作为反馈元件的晶体振荡器或陶瓷谐振器连接,就构成了内部自激振荡器并产生振荡时钟脉冲。

2.外部振荡方式:外部振荡方式就是把外部已有的时钟信号引入单片机内。

51单片机架构_第7张图片

1.振荡周期:为单片机提供时钟信号的振荡源的周期。

2.时钟周期:振荡源信号经二分频后形成的时钟脉冲信号,为振荡周期的2倍。

3.机器周期:完成一个基本操作所需的时间,通常为12个振荡周期。

4.指令周期:指CPU执行一条指令所需要 的时间,一个指令周期通常含有1~4个 机器周期。

外接晶振为12MHz四个周期的具体值

振荡周期=1/12μs

时钟周期=1/6μs

机器周期=1μs

指令周期=1~4μs

51单片机架构_第8张图片

03 中断系统

中断寄存器

中断允许寄存器IEXICON

51单片机架构_第9张图片

51单片机架构_第10张图片

51单片机架构_第11张图片

中断优先级控制寄存器IP/XICONIPH

51单片机架构_第12张图片

PX3H, PX3: 外部中断3优先级控制位。

​ 当PX3H=0且PX3=0时,外部中断3为最低优先级中断(优先级0)
​ 当PX3H=0且PX3=1时,外部中断3为较低优先级中断(优先级1)
​ 当PX3H=1且PX3=0时,外部中断3为较高优先级中断(优先级2)
​ 当PX3H=1且PX3=1时,外部中断3为最高优先级中断(优先级3)

PX2H, PX2: 外部中断2优先级控制位。
当PX2H=0且PX2=0时,外部中断2为最低优先级中断(优先级0)
当PX2H=0且PX2=1时,外部中断2为较低优先级中断(优先级1)
当PX2H=1且PX2=0时,外部中断2为较高优先级中断(优先级2)
当PX2H=1且PX2=1时,外部中断2为最高优先级中断(优先级3)

PT2H, PT2: 定时器2中断优先级控制位。
当PT2H=0且PT2=0时,定时器2中断为最低优先级中断(优先级0)
当PT2H=0且PT2=1时,定时器2中断为较低优先级中断(优先级1)
当PT2H=1且PT2=0时,定时器2中断为较高优先级中断(优先级2)
当PT2H=1且PT2=1时,定时器2中断为最高优先级中断(优先级3)

PSH, PS: 串口1中断优先级控制位。
当PSH=0且PS=0时,串口1中断为最低优先级中断(优先级0)
当PSH=0且PS=1时,串口1中断为较低优先级中断(优先级1)
当PSH=1且PS=0时,串口1中断为较高优先级中断(优先级2)
当PSH=1且PS=1时,串口1中断为最高优先级中断(优先级3)
PT1H, PT1: 定时器1中断优先级控制位。
当PT1H=0且PT1=0时,定时器1中断为最低优先级中断(优先级0)
当PT1H=0且PT1=1时,定时器1中断为较低优先级中断(优先级1)
当PT1H=1且PT1=0时,定时器1中断为较高优先级中断(优先级2)
当PT1H=1且PT1=1时,定时器1中断为最高优先级中断(优先级3)
PX1H, PX1: 外部中断1优先级控制位。
当PX1H=0且PX1=0时,外部中断1为最低优先级中断(优先级0)
当PX1H=0且PX1=1时,外部中断1为较低优先级中断(优先级1)
当PX1H=1且PX1=0时,外部中断1为较高优先级中断(优先级2)
当PX1H=1且PX1=1时,外部中断1为最高优先级中断(优先级3)
PT0H, PT0: 定时器0中断优先级控制位。
当PT0H=0且PT0=0时,定时器0中断为最低优先级中断(优先级0)
当PT0H=0且PT0=1时,定时器0中断为较低优先级中断(优先级1)
当PT0H=1且PT0=0时,定时器0中断为较高优先级中断(优先级2)
当PT0H=1且PT0=1时,定时器0中断为最高优先级中断(优先级3)
PX0H, PX0: 外部中断0优先级控制位。
当PX0H=0且PX0=0时,外部中断0为最低优先级中断(优先级0)
当PX0H=0且PX0=1时,外部中断0为较低优先级中断(优先级1)
当PX0H=1且PX0=0时,外部中断0为较高优先级中断(优先级2)
当PX0H=1且PX0=1时,外部中断0为最高优先级中断(优先级3)

中断优先级控制寄存器IP和IPH的各位都由可用户程序置“1”和清“0”。但IP寄存器可
位操作,所以可用位操作指令或字节操作指令更新IP的内容。而IPH寄存器的内容只能用字节
操作指令来更新。STC89C51RC/RD+系列单片机复位后IP和IPH均为00H,各个中断源均为低
优先级中断。

51单片机架构_第13张图片

04 定时器/计数器

定时器/计数器 0/1

定时器相关寄存器

51单片机架构_第14张图片

51单片机架构_第15张图片

51单片机架构_第16张图片

定时器0;

三种工作方式;均可实现

模式0;(13位定时器/计数器)

​ 模式下的3位寄存器包含TH0全部8个位及TL0的低5位。TL0的高3位不定

模式1(16位定时器/计数器)

​ 此模式下,定时器配置为16位定时器/计数器,由TL0的8位和TH0的8位所构成。TL0的8位溢出向TH0进位,TH0计数溢出置位TCON中的溢出标志位TF0。

模式2—自动装载模式(8位定时器/计数器)

TL0的溢出不仅置位TF0,而且将TH0内容重新装入TL0,TH0内容由软件预置,重装时TH0内容不变。

#include "reg52.h"
typedef unsigned int u16;	//对系统默认数据类型进行重定义
typedef unsigned char u8;


sbit LED=P2^5;
u8 i=0;
void main()
{
	TMOD=0xf0;	//设置T0为工作方式0
	TH0=0XE3;   //1ms
	TL0=0X30;
	/*Timer0工作在模式0下时为13位定时/计数器,
	TL0只使用前5位,	*/
 
	EA=1;		//开总中断
	ET0=1;	   	//开定时器0中断
	TR0=1;	   	//启动定时器0
	while(1);	//程序停止,等待中断请求
		
}

/******T0中断函数******/
void Timer0()interrupt 1
{
	TH0=0;
	TL0=0;
	i++;
	while(i>=216)
	{
	   	
	}
}
/*/*******************************************************************************/*/
//void timer1()
//{
//    EA=1;       //打开总中断
//    ET0=1;      //打开定时器0 中断允许
//    TMOD|=0X01; //选择为定时器0 模式,工作方式1//16位计数,TH0*8,TL0*8
//    
//    TH0=0XFC; //给定时器赋初值,定时1ms//1000是1ms
//    TL0=0X18;

//    TR0=1;//打开定时器//定时器被允许后,从初值开始+1到溢出;
//}
//void main()
//{
//    //timer1();
//    timer0();
//    //timer2();
//    while(1)
//    {
//        
//        
//    }
//}
1 1011 1010 1110
//void timer_interrupt1_0() interrupt 1 //定时器中断1
//{
//    static u16 i;//定义静态变量i
    TH0=0XFC; //给定时器赋初值,定时1ms//工作方式1
    TL0=0X66;
//    
//    TH0=0Xdd; //给定时器赋初值,定时1ms//工作方式0
//    TL0=0X0e;
//    i++;
//    if(i==1000)
//{
//    i=0;
//    LED=!LED;
//}
//}

/*/**********************************************************************************/*/
//工作方式2
    
//sbit led1=P2^0;
//uint num;
// 
//void TIM0init(void)
//{
//     TMOD=0x02;    //设置定时器0为工作方式2
//     TH0=0;   //装入初值
//     TL0=0;    
//     EA=1;    //开总中断
//     ET0=1;   //开定时器中断
//     TR0=1;   //启动定时器0
//}
// 
//void T0_time()  interrupt 1      
//{
//     //相比上面的方式0,这里不需要认为加入重装初值的代码
//     num++;
//}
//						  
//void main()
//{
//    TIM0init(); 
//    while(1)
//    {
//	  if(num==3600)     //如果到了3600,说明1秒时间到从0开始,3600次到1秒
//          {
//             num=0;
//	     led1=~led1;   //让发光管状态取反
//	  }
//    }
//}



05 I/O

并行端口

51单片机架构_第17张图片

8051单片机有4个双向并行的8位I/O口P0~P3。P0口为三态双向口,可驱动8个TTL电路,P1、P2、P3口为准双向口(作为输入时,需要先向口锁存器写入1,故称为准双向口),其负载能力为4个TTL电路。

串行端口

工作方式0
工作方式1波特率可变

​ 当软件设置SCON的SM0、SM1为“01”时,串行通信则以模式1工作。此模式为8位
UART格式,一帧信息为10位:1位起始位,8位数据位(低位在先)和1位停止位。波特率可
变,即可根据需要进行设置。TxD(TxD/P3.1)为发送信息,RxD(RxD/P3.0)为接收端接收信息,
串行口为全双工接受/发送串行口。

51单片机架构_第18张图片

​ 模式1的发送过程:串行通信模式发送时,数据由串行发送端TxD输出。当主机执行一条
写“SBUF“的指令就启动串行通信的发送,写“SBUF”信号还把“1”装入发送移位寄存器
的第9位,并通知TX控制单元开始发送。发送各位的定时是由16分频计数器同步。
移位寄存器将数据不断右移送TxD端口发送,在数据的左边不断移入“0”作补充。当
数据的最高位移到移位寄存器的输出位置,紧跟其后的是第9位“1”,在它的左边各位全为
“0”,这个状态条件,使TX控制单元作最后一次移位输出,然后使允许发送信号“SEND”
失效,完成一帧信息的发送,并置位中断请求位TI,即TI=1,向主机请求中断处理。

#include "reg52.h"

typedef unsigned int u16;	//对系统默认数据类型进行重定义
typedef unsigned char u8;
//串口助手发送数据给单片机,单片机原封不动转发给串口助手显示
//注意事项:使用黄色跳线帽将CH340旁的P5端子的UTX和P30短接,URX和P31短接,出厂默认已短接好	
/*******************************************************************************
* 函 数 名       : uart_init
* 函数功能		 : 串口通信中断配置函数,通过设置TH和TL即可确定定时时间
* 输    入       : baud:波特率对应的TH、TL装载值
* 输    出    	 : 无
*******************************************************************************/
void uart_init(u8 baud)
{
	TMOD|=0X20;	//设置计数器工作方式2
	SCON=0X50;	//设置为工作方式1
	PCON=0X80;	//波特率加倍
	TH1=baud;	//计数器初始值设置
	TL1=baud;
	ES=1;		//打开接收中断
	EA=1;		//打开总中断
	TR1=1;		//打开计数器		
}

/*******************************************************************************
* 函 数 名       : main
* 函数功能		 : 主函数
* 输    入       : 无
* 输    出    	 : 无
*******************************************************************************/
void main()
{	
	uart_init(0XFA);//波特率为9600

	while(1)
	{			
							
	}		
}

void uart() interrupt 4 //串口通信中断函数
{
	u8 rec_data;

	RI = 0;			//清除接收中断标志位
	rec_data=SBUF;	//存储接收到的数据
	SBUF=rec_data;	//将接收到的数据放入到发送寄存器
	while(!TI);		//等待发送数据完成
	TI=0;			//清除发送完成标志位				
}
工作方式2 波特率固定
工作方式3 波特率可变(实现多机通信)

当SM0、SM1两位为11时,即串行口工作在模式3;

其一帧的信息由11位组成:1位起始位,8位数据位(低位在先),1位可编程位(第9位数据)和1位停止位发送时可编程位(第9位数据)由SCON中的TB8提供,可软件设置为1或0,或
者可将PSW中的奇/偶校验位P值装入TB8(TB8既可作为多机通信中的地址数据标志位,又可作
为数据的奇偶校验位)。接收时第9位数据装入SCON的RB8。TxD为发送端口,RxD为接收端
口,以全双工模式进行接收/发送。

其波特率计算方式;

51单片机架构_第19张图片
模式3和模式1相比,除发送时由TB8提供给移位寄存器第9数据位不同外,
其余功能结构均基本相同,其接收发送操作过程及时序也基本相同。

当接收器接收完一帧信息后必须同时满足下列条件:

·RI=0
·SM2=0或SM2=1,并且接收到的第9数据位RB8=1。)多机通信RB8,区分地址/数据

当上述两条件同时足时,将接收到的移位寄存器的数据装入SBUF和RB8中,并置位
RI=1,向主机请求中断处理。如果上述条件有一个不满足,则刚接收到移位寄存器中的数据无
效而丢失,也不置位RI。无论上述条件满足与否,接收器又重新开始 检测RxD输入端口的跳变
信息,接收下一帧的输入信息。

在模式3中,接收到的停止位与SBUF、RB8和RI无关。(硬件实现)

模式3多机通信

请添加图片描述

模式3,主机向从机发送广播数据;1个起始位,8个数据位存地址,第九位TB8=1(地址帧为1,数据帧为0),;终止;从机们收到后;进入中断服务程序;将8位数据位的地址与自身比较;若相同则发送应答ack信号;并且;SM2=0;用以接收数据,若不同则仍SM2=1;

主机接着发送数据帧;此时除SM2=0(应答从机);其他从机都不会进入中断服务程序;接收不到数据帧;

多机通信RB8,区分地址/数据

当上述两条件同时足时,将接收到的移位寄存器的数据装入SBUF和RB8中,并置位
RI=1,向主机请求中断处理。如果上述条件有一个不满足,则刚接收到移位寄存器中的数据无
效而丢失,也不置位RI。无论上述条件满足与否,接收器又重新开始 检测RxD输入端口的跳变
信息,接收下一帧的输入信息。

在模式3中,接收到的停止位与SBUF、RB8和RI无关。(硬件实现)

模式3多机通信

51单片机架构_第20张图片

模式3,主机向从机发送广播数据;1个起始位,8个数据位存地址,第九位TB8=1(地址帧为1,数据帧为0),;终止;从机们收到后;进入中断服务程序;将8位数据位的地址与自身比较;若相同则发送应答ack信号;并且;SM2=0;用以接收数据,若不同则仍SM2=1;

主机接着发送数据帧;此时除SM2=0(应答从机);其他从机都不会进入中断服务程序;接收不到数据帧;

你可能感兴趣的:(51单片机,架构,嵌入式硬件)