51单片机定时器、串口、中断

举报
JeckXu666 发表于 2022/01/15 22:14:34 2022/01/15
【摘要】 文章目录 MCS-51功能单元一、定时器&计数器二、并行口&串行口三、中断系统 MCS-51功能单元 一、定时器&计数器 数量:两个可编程的16位的定时器/...

MCS-51功能单元

一、定时器&计数器

  1. 数量:两个可编程的16位的定时器/计数器T0和T1;都是16位加法计数结构;分为高8位和低8位;TH0、TL0,TH1、TL1;
    定时器/计数器T0、T1是80C51的中断源之一,当数据寄存器溢出,则向CPU申请中断。数据寄存器的复位状态为0。为使计数值或定时值满足自己的要求,需预先将数据寄存器赋值,称为初值设定,中断中也要重新设定初值。

  2. 定时器和计数器本质:都是计数器,对下降沿进行计数,计数达到溢出后置为标志位或者进入中断;

  3. 两者的区别:

    定时器是对内部的机械周期脉冲进行计数,每个脉冲都是一个机械周期;定时时间=机器周期*(2^L-初值) (L=13,16,8)

    计数器则是通过外部IO口进行脉冲计数,一个脉冲加一个数;对应IO口:T0-P3.4,T1-P3.5;

    计数长度:计数长度=(2^L-初值) (L=13,16,8)

    两者的模式切换通过TMOD控制

  4. TMOD结构图:

在这里插入图片描述

  1. TMOD详解

    GATE:门控位

    ​ GATE =1,由中断引脚INT0(P3.2)、INT1(P3.3)和TCON中的位TR0、TR1共同控制来启动定时器/计数器

    ​ GATE =0,由TR0和TR1置位来启动定时器/计数器**(一般为0)**

    C/!T:模式选择位:

    ​ 1时,计数器模式;

    ​ 0时,定时器模式;

    M0 & M1共同控制工作方式:

在这里插入图片描述

项目开发一般用01,考试大概率考00;

  1. 启动停止与中断控制寄存器TCON

在这里插入图片描述

TFx:定时器或者计数器溢出时置位1,请求中断,中断程序进入后自动清零;

TRx:定时器启动控制位,当其等于1时定时器/计数器启动;

  1. 中断允许控制寄存器:IE
    在这里插入图片描述

    ETx:定时器/计数器的中断允许位
    EA:CPU总中断的允许位

  2. 定时器/计数器使用:(重点)

    工作方式的设置:

    ​ 伪代码:

    //设置定时器0工作在16位模式
    //C语言
    	TMOD=0x01;				//定时器
    //汇编
    	MOV		TMOD,	#01H;	
    
        
       
    • 1
    • 2
    • 3
    • 4
    • 5

    计数初值的计算+装载:

    ​ 伪代码:

    //机械周期1us,设置500us中断一次为FE0C
    //C语言
    	TH0=0xFE;
        TL0=0x0C;
    //汇编
    	MOV 	TH0,	#0FEH	;
        MOV		TL0,	#0cH	;
    
    
        
       
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    中断允许位的设置:
    伪代码:

    //C 	
    	EA=1;
    	ET0=1;
    //assembly
    	SETB	EA		;turn on all interrupt
        SETB	ET0		;turn on 0 interrupt
    
        
       
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    开启定时器:
    伪代码:

    //c
    	TR0=1;
    
    //assembly
    	SETB 	TR0		;turn on
            
    	CLR 	TR0		;turn off !
    
        
       
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
  3. 使用实例:

    定时器使用方式(中断方式):

    ORG		0000H;
    		AJMP	MAIN;
    ORG		001BH;
    		AJMP	IRQ1;
    MAIN:	
            MOV		TMOD,	#00H	;工作模式0,高8+低5
            MOV		TH1,	#0FCH
            MOV		TL1,	#03H
            SETB	TR1;
            SETB	ET1;
            SETB	EA;
            AJMP	$;
            
    IRQ1:	        
    		MOV		TMOD,	#00H
            MOV		TH1,	#0FCH
            CPL		P1.0
            RETI	;中断返回一定要加!
            
    
        
       
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    计数器使用方式(中断方式):

    ORG		0000H;
    		AJMP	MAIN;
    ORG		001BH;
    		AJMP	IRQ1;
    		
    MAIN:   
    		MOV		TMOD,	#04H	;计数器模式
            MOV		TH1,	#0FCH	;一千个下降沿中断一次
            MOV		TL1,	#03H
            SETB	TR1;
            SETB	ET1;
            SETB	EA;
            AJMP	$;
            
    IRQ1:	        
    		MOV		TMOD,	#00H
            MOV		TH1,	#0FCH
            CPL		P1.0
            RETI			;中断返回一定要加!
    
        
       
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    查询方式则是判断TF溢出标志,变高后进入自定义韩式处理数据,清空标志;

二、并行口&串行口

​ 并行口:并行传输数据(不常用)
​ 占据资源大,错误率高,但快

串行口:(重要)

​ 稳定,占据IO口小,准确,稍微慢

  1. 串行口控制寄存器SCON:
    在这里插入图片描述
    ​ SM0和SM1:串行口方式选择位;
    ​ 00-移位寄存器方式
    ​ 01-8位UART,波特率可变
    ​ 10-9位UART,波特率为fosc/64或fosc/32(PCON决定)
    ​ 11-9位UART,波特率可变
    ​ 方式1为常用通信方式;方式2、3为多机通信,方式0为移位寄存器,不常用

     重要标志位:
     TI:发送完成标志
     RI:接收完成标志
    
        
       
    • 1
    • 2
    • 3
  2. 串口波特率与定时器1关联,公式如下:
    波特率=2^SMOD * fosc / [32 * 12(2^K-初值)];(fosc系统主频)

波特率翻倍寄存器:PCON
​ 只有最高位(SMOD)有效:为1时波特率翻倍,为0时不翻倍

方式1串口通信接收代码:

ORG		0000H
LJMP	MAIN
ORG		0023H
LJMP	RX_TI

MAIN:
		MOV		SCON,		#50H
		MOV		PCON,		#00H
		MOV		TMOD,	#02H
		MOV		TH1,		#0FDH
		MOV		TL1,			#0FDH
		SETB	TR1
		SETB	EA
		SETB	ES
		
RX_TI:
		PUSH		ACC
		MOV		TH1,		#0FDH
		MOV		TL1,			#0FDH
		MOV		A,		SBUF
		;处理
		POP			ACC
		RETI

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

发送套用代码:

MOV		SBUF,	A
JNB		TI,		$
CLR		TI
RET

  
 
  • 1
  • 2
  • 3
  • 4

三、中断系统

所有中断控制位:
​ TCON:
在这里插入图片描述

​ TF1、TF0:定时器溢出标志、请求中断:
​ IE1、IE0:外部中断溢出请求:
​ IT1、IT0:外部中断触发方式选择-1下降沿触发、0低电平触发

​ SCON:
​ 内部TI、RI触发接收发送中断。

所有中断允许位:

位序号 EX0 ET0 EX1 ET1 ES ET2 / EA
说明 外部中断0 定时/计数0 外部中断1 定时/计数1 串行口中断 定时2溢出中断(8052用) 全局中断允许位

中断处理跳转地址:

中断源 矢量单元
外部中断0 0003H
定时器0溢出中断 000BH
外部中断1 0013H
定时器1溢出中断 001BH
串行口 0023H
定时器2溢出中断 002BH

注:进入中断后一般需要对现场进行保护:

使用PUSH和POP做现场保护

;对A和PSW压栈保护
PUSH 	ACC
PUSH	PSW

;对A和PSW出栈保护
POP		PSW
POP		ACC

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

文章来源: blog.csdn.net,作者:JeckXu666,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/qq_45396672/article/details/112250463

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。