单片机积累

一.寄存器点灯

1.1使能 GPIO 时钟

1.2配置 GPIO 输入输出模式

1.1.1输入模式

在这里插入图片描述

  1. 浮空输入:输入浮空(GPIO_Mode_IN_FLOATING),不经过上拉下拉电阻,经过TTL施密特触发器(边沿转换电路),转换成上升沿或者下降沿,在储存在寄存器,供内部读取
  2. -输入上拉(GPIO_Mode_IPU),输入下拉(GPIO_Mode_IPD),顾名思义,经过上拉或下拉电阻,经过TTL施密特触发器(边沿转换电路),转换成上升沿或者下降沿,在储存在寄存器,供内部读。
  3. 模拟输入(GPIO_Mode_AIN),直接输入模拟信号,不需要转换,直接输入到内部

1.1.2输出模式

在这里插入图片描述

  1. 开漏输出(GPIO_Mode_Out_OD),输出端相当于三极管的集电极. 要得到高电平状态需要上拉电阻才行. 适合于做电流型 的驱动,其吸收电流的能力相对强(一般20ma以内).

    输出 0 时,N-MOS 导通,P-MOS 不被激活,输出0。
    输出 1 时,N-MOS 高阻, P-MOS 不被激活,输出1(需要外部上拉电路);可以读IO输入电平变化,此模式 可以把端口

  2. 开漏复用功能(GPIO_Mode_AF_OD) :复用功能的开漏输出_AF_OD–片内外设功能(TX1,MOSI,MISO.SCK.SS),可以理解为GPIO口被用作第二功能时的配置情况(即并非作为通用IO口使用)。端口必须配置成复用功能输出模式(推挽或开漏)

  3. 推挽式输出(GPIO_Mode_Out_PP),可以输出高,低电平,连接数字器件。

     				输出 0 时,N-MOS 导通,P-MOS 高阻,输出0。	
     				输出 1 时,N-MOS 高阻,P-MOS 导通,输出1(不需要外部上拉电路)。
    
    1. 推挽式复用功能(GPIO_Mode_AF_PP):复用功能的推挽输出 --片内外设功能(I2C的SCL,SDA),可以理解为GPIO口被用作第二功能时的配置情况(并非作为通用IO口使用)

1.3 配置输入输出

  • 查手册,看初始地址和偏移地址

1.3.1GPIO的主要寄存器

  • 每个GPIO端口都有

     -两个32位配置寄存器(GPIOx_CRL  ,  GPIOx_CRH)
    
     -两个32位数据寄存器(GPIOx_IDR  和  GPIOx_ODR)
    
     -一个32位置位/复位寄存器(GPIOx_BSRR)
    
     -一个16位复位寄存器(GPIOx_BRR)
    
     -一个32位锁定寄存器(GPIOx_LCKR)
    
  • 每个I/O端口位可以自由编程,然而I/O端口寄存器必须按32位字被访问(不允许半字或字节访问)

1.3.2端口配置

  • 端口配置低寄存器(GPIOx_CRL)
    在这里插入图片描述

  • 端口配置高寄存器(GPIOx_CRH)
    在这里插入图片描述

  • 端口输入数据寄存器(GPIOx_IDR)
    在这里插入图片描述

  • 端口输出数据寄存器(GPIOx_ODR)
    在这里插入图片描述

二.中断(以52为例)

在这里插入图片描述

2.1 中断系统示意图(51)

2.2中断查询次序

2.3 中断服务函数

在这里插入图片描述

2.4 中断相关寄存器

在这里插入图片描述

2.4.1 IE中断允许寄存器和XICON辅助中断控制寄存器(可位寻址)

在这里插入图片描述

  1. EA:CPU总中断允许控制位,EA = 1开放中断,EA = 0,屏蔽中断请求。形成两级控制,即:受EA总控制,又受个各断源自己的中断允许控制
  2. ET2:定时/计数器T2的溢出中断允许位,ET2 = 1,允许T2中断。ET2 = 0,禁止T2中断。
    cpu运行,和定时器是并行进行的.。cpu在工作中,得到了定时中断,那么它停止手头的工作去中断请求中服务,完成服务,返回原来的断点位置继续工作
  3. ES:串口一中断允许位。ES = 1,允许中断。
  4. ET1:同上T1
  5. EX1:外部中断允许位
  6. ET0:同上T0
  7. EX0:外部中断0

在这里插入图片描述

  1. PX3:置位表明外部中断3的优先级为高。
  2. EX3:置1,允许外部中断3中断
  3. IE3:外部中断3中断请求标志位,由硬件自动清零。
  4. IT3:外部中断3,中断源类型选择。IT3 = 0,低电平触发。IT3 = 0,下降沿触发。
  5. PX2:同上
  6. EX2:同上
  7. IE2:同上
  8. IT2:同上

2.4.2 TCON 定时器/计数器0/1控制寄存器(可位寻址)

在这里插入图片描述

  1. TF1:T1溢出中断标志位。
    T1允许计数后,从初值开始加1计数,溢出后,由硬件置1。然后TF1向CPU请求中断,CPU响应中断时,才由硬件置0.(也可由软件查询置0
  2. TR1定时器1的运行控制位
  3. TF0:同上
  4. TR0:同上
  5. IE1:外部中断0,请求源标志(INT0/P3.2),IE1 = 1,请求中断。响应时由硬件清0.
  6. IT1:外部中断1,中断源类型选择。IT1 = 0,低电平触发。IT1 = 0,下降沿触发。
  7. IE0:同上
  8. IT0:同上

2.4.3 SCON 串行口控制寄存器(可位寻址)

在这里插入图片描述

  1. RI:串行口1接收中断标志,RI = 1 ,表示正向CPU申请中断,RI必须由中断服务程序清0
  2. TI:串行口1发送中断标志,同上。
  3. 其它位与中断无关。

2.4.4 T2CON 定时器/计数器2控制寄存器(可位寻址)

在这里插入图片描述

  1. TF2:定时器2溢出标志,溢出时置位,必须由软件清除。当TCLK/RCLK = 1时,将不会置位。
  2. EXF2:定时器2外部标志,EXEN2 = 1 且T2EX的负跳变产生捕获或重装时,置位。定时器2中断使能时,EXF2 = 1将使CPU执行中断子程序。必须由软件清0。在递增/递减计数器模式(DCEN = 1),EXF2不会引起中断
  3. RCLK:接收时钟标志。RCLK = 1,将定时器2溢出脉冲作为作为串行口模式1和模式3的接收时钟。RCLK = 0,将定时器1的溢出脉冲作为接收时钟。
  4. TCLK:发送时钟标志。同上。
  5. EXEN2:定时器外部使能标志。
  6. TR2:定时器2启动/停止控制位。
  7. C/T2:定时器/计数器选择。(定时器2),0表示内部定时器,1表示外部事件计数器(下降沿触发)
  8. CP/RL2:捕获/重装标志。置位:EXEN2 = 1时,T2EX的负跳变,产生捕获。清0:EXEN2 = 0时,定时器2溢出或T2EX的负跳变,都可使定时器自动重装。当RCLK/TCLK = 1 时,该位无效,且定时器强制为溢出时自动重装。

2.4.5 中断优先级控制器IP,IPH,XICON

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.5 应用举例,相关寄存器配置中断

#include<REG52.H>
#include"delay500ms.h"
#include"int0.h"

sbit LED = P1^1;

//中断
void int0_init(){

	EA =1;//开启总中断
	EX0 = 1;//开启EX0外部中断
	IT0 = 1;//低电平触发方式

}

//中断服务函数
void int0() interrupt 0
{


		LED = 0;
	
		Delay500ms();
	
		LED= 1;
	

}

三.定时器配置

在这里插入图片描述

在这里插入图片描述

3.1定时器/计数器0/1的相关寄存器

在这里插入图片描述

3.1.1 定时器/计数器控制计数器TCON

在这里插入图片描述

  • 见中断TCON,一样

3.1.2 定时器/计数器工作模式寄存器TMOD(不可位寻址)

在这里插入图片描述

在这里插入图片描述

3.1.3 TH0,TH1,TLO,TL1

  • TH0,TH1,TH0,TL1,用来计数的寄存器,两两配合(TH0和TH0,TH1和TH1),分别表示高八位和低八位

3.2 应用(可以使用STC-ISP辅助设置)

#include<REG52.H>
#include"delay500ms.h"
#include"Timer0.h"

sbit LED = P1^1;



//配置定时器
void Timer0_Init(){

			TMOD   &= 0xF0; //高四位不变,低四位置1
			TMOD   |=  0x01; //高四位不变,末尾置1  XXXX 0001
			TF0     = 0; //手动关闭中断溢出标志位,防止一开始就发生中断
			TR0     = 1;//开启定时器0
			//2的16次方位65536,计数1000等于1us,所以每触发一次中断,从64535到65535计数1000次,计时1ms。
	        TH0     = 64535/256;//TCON高八位
			TL0     = 64535%256;//TCON低八位
			
	        ET0     = 1; //打开定时器/计数器中断0
			EA      = 1; //打开总中断
			PT0     = 1;    //中断优先级
}


//中断服务函数

void  Tmer0_Routine()  interrupt 1
{

			static unsigned int T0Count = 0;
	
			TH0 = 64535/256;//高八位
			TL0 = 64535%256;//低八位
			T0Count++;
			if(T0Count >= 1000){
			
				LED = 0;
				Delay500ms();
				LED= 1;
				
				T0Count = 0;
			}

}

四.串行口通信

在这里插入图片描述

在这里插入图片描述

4.1 常用通信接口比较

在这里插入图片描述
在这里插入图片描述

4.2 51单片机UART

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.3串口相关寄存器

在这里插入图片描述

4.3.1 串口控制寄存器SCON和PCON

  • 在这里插入图片描述

在这里插入图片描述

4.3.2 其它

  • 参考中断

4.4 应用

#include<REG52.H>
#include"uart.h"

//串口初始化
void Uart_Init(){

		PCON     |= 0x80;//配置波特率加倍
		SCON      = 0x50;//配置串口控制寄存器
	
	//配置T1定时器
			TMOD   = 0; //高四位清零,低四位不变 0000 xxxx
			TMOD   |=  0x20; //0010 xxxx
			TR1     = 1;//打开定时器1
			TL1     = 0xF4;//用计数器,配置波特率,这里是配的4800
			TH1     = 0xF4;	
	    	ET1     = 0; //打开定时器1中断
			
			ES      =1;//打开串口控制
			EA      = 1;//打开总控制
			



}


//串口发
void UART_SendByte(unsigned char Byte){

				SBUF = Byte;
				while(TI == 1){
					
					TI =0;
				}
}

//中断服务函数,读取数据
void UART_Rountine() interrupt 4 {

		if(RI == 1){ 
			P1 = SBUF;
			UART_SendByte(SBUF);	
			RI = 0;
		}

}





五. LCD 1602显示屏

一.概述

1.1 LCD 1602 ( Liquid Crystal Display)

	液晶显示屏,是一种字符型液晶显示模块。可以显示ASCll码的标准字符和其它一些内置特殊符号。还可以有8个自定义字符。

1.2 显示容量:

	16 X 2 个字符,每个字符为5*7点阵。

在这里插入图片描述

1.3 引脚功能

在这里插入图片描述

1.4 字符显示流程

在这里插入图片描述

1.5 指令集

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.6 操作时序图

在这里插入图片描述

二.显示一个字符

2.1 LCD 1602 操作流程

  • 指令初始化
    1. 发送指令0x38,八位数据接口,两行显示,5*7点阵
    2. 发送指令0x0C,显示开,光标开,闪烁关
    3. 发送指令0x06,数据读写操作后,光标 自动加1,画面不动
    4. 发送指令0x01,清屏
  • 显示字符
    1. 0x80|AC,设置光标位置
    2. 发送数据 ,发送要显示的字符数据
    3. …
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

elaot

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值