51单片机学习之路 —— 1.6 单片机的中断(2)

发布者:CelestialSoul最新更新时间:2016-12-28 来源: eefocus关键字:51单片机  中断 手机看文章 扫描二维码
随时随地手机看文章

上一次我们简单了解了单片机的中断概念

这一次我们着重了解单片机的定时器中断

 

先补充点知识

补 : 单片机的几个周期

      1:时钟周期:也称振荡周期,就是外接晶振的倒数,如12M的晶振,时钟周期就是1/12um,他是最基本最小的时间单位。

       2:状态周期:时钟周期的两倍。

       3:机器周期。单片机的基本操作周期,在一个周期内单片机完成一项基本操作,他由12个时钟周期组成,比如12M的晶振,那么机器周期就是1um。其实机器周期就是完成一个单指令的时间。

       4:指令周期。他是指CPU执行一条指令所需的时间。比如有单周期指令,双周期指令三周期指令等等。

 

1  定时器简单概念了解

  

  1 定时器系统是单片机内部独立的一个硬件部分

  2 定时器与晶振cpu相连

  3 一但设置开始定时后,定时器在晶振的作用下自动开始计时

   

      

  

  

    注意:1 TMOD 的字节地址位89H是不可寻位址

        所以写代码的时候要不能位操作,只能TMOD = 0x01;这样子

       2 TMOD中高四位用于设置定时器1 低四位用于设置定时器0

       3 TMOD常用的模式有方式1(常用) 2(偶尔)其余几乎不用

       4 TMOD 只控制定时器的工作方式和功能选择

    举个栗子:

       TMOD = 0x01;// 0000 0001  

(定时器0,GATE=0 启动仅受寄存器TRX控制 C/T=0 定时器模式 M1=0 M0=1 工作模式1 16位定时器)

      

 2 TCON

    

    注意:1 TCON字节地址位88H 可进行位寻址

       2 单片机复位TCON全部被清零

    这里我们先着重记几个

       1 TF1 定时器1溢出标志位

       2 TF0 定时器0溢出标志位

         3 TR1 定时器1运行控制位  

       4 TR0 定时器0运行控制位 

 

3 工作原理

 

 

 

4  初值问题

    

      注意 :1 没有设置TH0和TL0 默认值都是0  

           所以要溢出需要65536个数  1111 1111 1111 1111

          (65535达到满值,65536则溢出将TF0 置1)

    举个栗子:

      假如我们要定时50ms(较常用的一个时间)

      单片机的晶振是12MHz  12个时钟周期位1个机器周期 (1/12MHz )*12 = 1微秒

      我们定时50ms一次  即装完初值后,在(50/1)*10^3 =50000个数后溢出

      所以初值为 65536-50000 = 15536个数

      15536 又要化成16进制 先分出高八位和低八位

      15536/256=60装入TH0 15536%256=176装入TL0

 

5   中断服务程序的写法

    

    

      定时器中断序号为3 定时器1

 

2  编程

   

   1 目标 : 实现第一个发光二极管以1s亮灭闪烁

     

   2 代码

#include

 2 #define uint unsigned int

 3 #define uchar unsigned char

 4 sbit LED1 = P1^0;

 5 uchar num;

 6 void main()

 7 {

 8     TMOD = 0x01; // 定时器0 工作方式1

 9     TH0  = (65536 - 45872)%256; 

10     TL0  = (65536 - 45872)/256;

11     EA   = 1;     //开关总断

12     ET0  = 1;     // 开定时器0中断

13     TR0  = 1;     //启动定时器0

14     while(1);     //程序停止等待中断发生

15 }

16 

17 void T0_time() interrupt 1

18 {

19     TH0  = (65536 - 45872)%256;

20     TL0  = (65536 - 45872)/256;

21     num++;

22     if(num == 20)

23     {

24         num = 0;

25         LED1 = ~LED1;

26     }

27 

28 }

 

   3 分析:

      

       1 设置好TMOD后 要对应ET0 TR0 TH0 TL0

       2 不要省事情把45872 写成 (5000/(12/11.0592))

       11.0592是小数,无法转化成 16进制

       3 为了确保定时器中断每次都是50ms 我们需要在中断函数中每次为TH0 和TL0

       重新装入初值

       4 定的是50ms 用一个变量num统计每二十次执行程序 即每1s亮灭

改良代码:

#include
 2 #define uint unsigned int
 3 #define uchar unsigned char
 4 sbit LED1 = P1^0;
 5 uchar num;
 6 void main()
 7 {
 8     TMOD = 0x01; // 定时器0 工作方式1
 9     TH0  = (65536 - 45872)%256; 
10     TL0  = (65536 - 45872)/256;
11     EA   = 1;     //开关总断
12     ET0  = 1;     // 开定时器0中断
13     TR0  = 1;     //启动定时器0
14     while(1);     //程序停止等待中断发生
15     if(num == 20)
16     {
17         num = 0;
18         LED1 = ~LED1;
19     }
20 
21 }
22 
23 void T0_time() interrupt 1
24 {
25     TH0  = (65536 - 45872)%256;
26     TL0  = (65536 - 45872)/256;
27     num++;    
28 }

 

留一个作业 大家可以自己写写看

用定时器0实现第一个发光二极管以200ms间隔闪烁 并且用定时器1 实现数码管前两位59s循环计时

      

 

以上的内容都是博主看书,自己的一些思考。大家还是应该多看些书籍才能够理解的更好


关键字:51单片机  中断 引用地址:51单片机学习之路 —— 1.6 单片机的中断(2)

上一篇:单片机模拟软件复位
下一篇:51单片机学习之路 —— 1.8 矩阵键盘

推荐阅读最新更新时间:2024-03-16 15:27

STM32CubeMX系列教程2:外部中断(EXIT)
这一章我们在前一章GPIO的工程修改。复制GPIO的工程,修改文件夹名。点击STM32F746I.ioc打开STM32cubeMX的工程文件重新配置。PA0管脚重新配置为GPIO_EXIT0模式。 WAKEUP按键已经外部下拉,按下是PA0为高电平。在GPIO配置中配置PA0为上升沿触发。内部既不上拉也不下拉,添加用户标签WAKEUP。 在NVIC(嵌套向量中断控制器)中,勾选EXIT Line0 interrupt使能PA0中断。右边两个选项设置抢占优先级和响应优先级。此处我们选择默认的,不修改。 在这里简单介绍一下NVIC(嵌套向量中断控制器)。NVIC就是控制中断响应的。主要由三个参数,一个是中断使能,
[单片机]
STM32CubeMX系列教程2:外部<font color='red'>中断</font>(EXIT)
基于51单片机的GPS公交车自动报站系统
一.硬件方案 本设计主要是制作出一款基于51单片机的GPS自动报站公交车,根据设计需求,硬件部分应该具有的功能有,GPS定位、语音播报、液晶显示、按键操作以及相应的指示灯提示,所以本次设计采用了STC89C58RC单片机作为主控芯片、GPS模块采用了VK2828U7G5LF、液晶显示部分采用了LCD12864液晶、音频播放部分采用了Miniplay模块,以及按键电路、指示灯提示电路还增加了时钟显示电路。整体硬件框图如图: 二.设计功能 (1)本设计播报主要有两种方式,其一是当到达播报站点时,司机按下对应按键进行播报;另一种是全自动语音播报方式,到达播报站点时,设计会自动进行播报。 (2)自带时钟显示,并且设有GPS自动校时
[单片机]
基于<font color='red'>51单片机</font>的GPS公交车自动报站系统
如何用51单片机来产生PWM波
89C51芯片没有自带PWM发生器,如果要用51来产生PWM波就必须要用软件编程的方法来模拟。方法大概可以分为软件延时和定时器产生两种方法。下面将逐一介绍。 1 软件延时法 利用软件延时函数,控制电平持续的时间,达到模拟pwm的效果。 程序如下: #include sbit pwm=P1^0; main() while(1) pwm=1; delayus(60);//置高电平后延时60us,占空比60% pwm=0; delayus(40); void delayus(uint x) while(x--); proteus软件仿真结果如下: 可见,用这种延时函数的方法就能简单地模拟出pwm输出。但是这种方法的缺点也相当明显
[单片机]
如何用<font color='red'>51单片机</font>来产生PWM波
51单片机入门——Proteus 8 Professional的使用
1.什么是Proteus 8 Professional ? Proteus是Lab Center Electronics公司推出的一个EDA工具软件。 Proteus具有原理布图、PCB自动或人工布线、SPICE电路仿真、互动电路仿真、仿真处理器及其外围电路等特点功能。 Proteus 8.9 安装包,内附安装教程 链接:https://pan.baidu.com/s/19YPyUeNt5bTVd7ch_15tig 提取码:qcyx 2.Proteus 8 Professional的使用 双击图标后进入主页面:如图: 首先我们要建立一个工程文件,点击左上角的图标或在开始设计中点击新建工程,如图: 选择合适的保
[单片机]
<font color='red'>51单片机</font>入门——Proteus 8 Professional的使用
8051单片机教程第五课:延时程序分析
上一次课中,我们已经知道,程序中的符号R7、R6是代表了一个个的RAM单元,是用来放一些数据的,下面我们再来看一下其它符号的含义。 DELAY:MOVR7,#250;(6) D1:MOVR6,#250;(7) D2:DJNZR6,D2;(8) DJNZR7,D1;(9) RET;(10) MOV:这是一条指令,意思是传递数据。说到传递,我们都很清楚,传东西要从一个人的手上传到另一个人的手上,也就是说要有一个接受者,一个传递者和一样东西。从指令MOVR7,#250中来分析,R7是一个接受者,250是被传递的数,传递者在这条指令中被省略了(注意:并不是每一条传递指令都会省的,事实上大部份数据传递指令都会有传递者
[单片机]
80<font color='red'>51单片机</font>教程第五课:延时程序分析
基于2051单片机串行数据采集传输模块的设计
在微机测控系统中,经常要用到A/D转换。常用的方法是扩展一块或多块A/D采集卡。当模拟量较少或是温度、压力等缓变信号场合,采用总线型A/D卡并不是最合适、最经济的方案。这里介绍一种以GNS97C2051单片机为核心,采用TLC2543 12位串行A/D转换器构成的采样模块,该模块的采样数据由单片机串口经电平转换后送到上位机(IBM PC兼容机)的串口COM1或COM2,形成一种串行数据采集串行数据传输的方式。经实践调试证实:该模块功耗低、采样精度高、可靠性好、接口简便,有一定实用价值。 1 主要器件介绍 1.1 TLC2543串行A/D转换器 模块采用TI公司的TLC2543 12位串行A/D转换器,使用开关电容逐次逼近技术完
[单片机]
基于20<font color='red'>51单片机</font>串行数据采集传输模块的设计
80c51是几位单片机 80c51单片机有几个中断
  80c51是几位单片机   80C51是一种8位微处理器,也被称为8051,由Intel公司推出。它是最早的商用单片机之一,由于它的简单易用、灵活可靠,被广泛应用于许多嵌入式系统中。在80C51系列中,最常见的型号包括AT89C51和AT89S52等。   80c51单片机寻址范围有多少   80C51单片机的寻址范围取决于其具体的型号和存储器结构。在最常见的AT89C51和AT89S52型号中,其寻址范围如下:   内部RAM寻址范围:0x00-0x7F(128字节)   内部ROM寻址范围:0x0000-0xFFFF(64KB)   特殊功能寄存器(SFR)寻址范围:0x80-0xFF(128字节)   外部扩展RAM
[单片机]
单片机的中断函数编写方法
interrupt m修饰符 C51中断函数必须通过该修饰符进行修饰。在C51程序设计中,当函数定义时用了interrupt m修饰符,系统编译时把对应函数转化为中断函数,自动加上程序头段和尾段,并按51系统中断的处理方式自动把它安排在程序存储器中的相应位置。 在该修饰符中,m的取值为0~31,对应的中断情况如下: 0——外部中断0 1——定时/计数器T0 2——外部中断1 3——定时/计数器T1 4——串行口中断 5——定时/计数器T2 其它值预留。 C51编译器从绝对地址8m+3处产生一个中断向量,其中m为中断号,也即interrupt后面的数字。该向量包含一个到中断函数入口地址的绝对跳转。 【例】编写一个用于统计外中断0
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved