手把手教学51单片机 | 第三课之 定时器中断

发布者:张延强最新更新时间:2022-04-22 来源: eefocus关键字:51单片机  定时器  中断 手机看文章 扫描二维码
随时随地手机看文章

1. 中断

在这里插入图片描述

(1)外部中断

打开总中断EA,选择外部中断EX0或EX1,因为ie可寻址,所以直接对EX0或者EX1操作,然后设置IT0(TCOD中)为电平触发还是跳变沿触发(上电默认寄存器0,为电平触发方式),然后写中断处理函数根据下表优先级确定 interrupt 后面的数字

在这里插入图片描述

(2)定时器中断

TMOD是定时器/计数器的工作方式寄存器,

TCON是控制寄存器,控制T0T1的启动和停止及设置溢出标志

先设置定时模式
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

如果选用01工作方式,TH TL是16位

2^16=65536

(65536-N)/256相当于一个能装65536的水桶舀出N单位的水,然后每1us加入1单位的水的时间,最后用了5000us=50ms


接下来是TCON的详解

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

//用定时器代替上节课的延迟子函数

#include

#define uchar unsigned char 

#define uint unsigned int 

sbit dula=P2^6;

sbit wela=P2^7;

uchar num;

uchar code table[]={

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71};

void Time0_delay();

void main()

{

wela=1;

P0=0xc0;

wela=0;

while(1)

{

for(num=0;num<16;num++)

{

dula=1;

P0=table[num];

dula=0;

Time0_delay();

}

}

}

void Time0_delay()

{

unsigned int i;

TMOD&=0xF0;//有效避免打乱高四位

TMOD|=0X01;//最终TMOD=  ABCD 0001

for(i=0;i<20;i++)

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

TR0=1;//开启定时器

while(!TF0);//延时50ms

TF0=0;//溢出位清零

TR0=0;//关闭定时器

//重复20次就是1s

}

}


3.代码

//中断和定时器的综合运用

#include

#define uint unsigned int

#define uchar unsigned char

sbit dula=P2^6;

sbit wela=P2^7;

sbit d1=P1^0;

uchar num,tt;

uchar code table[]={

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71};


void main()

{

num=0;

tt=0;

TMOD=0x01;//设置定时器0为工作方式1

//赋初值

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

EA=1;//打开总中断

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

TR0=1;//启动定时器0,只要开着就会一直运作

wela=1;

P0=0xfe;//第一位数码管

wela=0;

dula=1; P0=0x3f;//避免乱码 先赋初值0

dula=0;

while(1)

{

//20次就是1s 进行1次if

if(tt==20)

{

tt=0;

  num++;

if(num==16)

num=0;//清零!!!

dula=1;

P0=table[num];

dula=0;

}

}

}


/*void delay(uint z)

{

uchar x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}*/


void exter0()interrupt 1

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

tt++;

}


4.总结

在这里插入图片描述

关键字:51单片机  定时器  中断 引用地址:手把手教学51单片机 | 第三课之 定时器中断

上一篇:手把手教学51单片机 | 第四节 动态数码管,用6位数码管做一个时钟
下一篇:手把手教学51单片机第三课 | 复位电路、数码管静态显示

推荐帖子

51单片机万年制作
大家好,本人刚刚接触单片机不久,是个大学生,希望大家多多帮忙,再次谢谢了。这次我想要做一个使用LCD1602液晶制作万年历,并且而且可以通过按键调整时间,设置闹钟,并且还可以显示温度,最好还可以红外遥感调控。使用的芯片:At89s51,ds18B20,ds1302.谢谢了51单片机万年制作当搬运工,给你个现成基于51的代码,建议你用STC的51单片机,串口下载程序方便,这小伙子做的挺不错的,自己移植下LCD代码就行了
51cainiao 51单片机
在keil中编译ucgui+ucosii的时候出错
我在keil4中编译ucgui+ucosii的时候最后出现compilingOS_Q.C...compilingOS_SEM.C...compilingOS_TASK.C...Source\\uCOS-II\\Source\\OS_TASK.C(370):warning:#177-D:variable\"self\"wasdeclaredbutneverreferencedcompilingOS_TIME.C...linking...LCD_GUI.a
guozhiyang 微控制器 MCU
TI 采用低功耗蓝牙技术实现汽车门禁系统变革
CC2640R2F-Q1通过汽车级认证的SimpleLink32位ArmCortex-M3低功耗Bluetooth无线MCU为了满足消费者希望以智能手机取代车钥匙的需求,汽车行业正在经历着重大变革。随着手机即钥匙技术的普及,你不再需要传统的密钥卡,使用手机即可操作被动门禁/被动启TI采用低功耗蓝牙技术实现汽车门禁系统变革入门磨刀不误砍柴工,这个章节我们先详细讲解TISimpleLink低功耗蓝牙无线MCUCC2640R2F的学习路线图。无论你是
Jacktang 无线连接
软件版本自描述
#软件版本自描述通常在windows下某程序的运行版本能在菜单栏的“Aboutxxx”能看到具体描述,Linux下查阅程序版本方式也有一套俗成的方法,程序名后加“-V”。对于一个平台查阅本平台应用程序的版本信息没什么难度,而现实中有或许会遇到同事拿着一个可执行程序要你确定版本的情况。这种情况通常出现在产品开发初期小批量试生产阶段,程序最终版本未定型,试生产过程经常有版本变动,存在批量生产的设备程序版本不一致情况。还有一种情况是研发人员特意给某几台设备下载不同程序,
lzwml 嵌入式系统
请问如何设置输出的数字的位置?怎样替代vc里的SetTextAlign函数?
在vc里面,TextFunctions可以使用SetTextAlign函数pdc-SetTextAlign(TA_TOP|TA_RIGHT);而evc里不支持这样的函数,请问哪位大虾知道使用什么可以替代这些函数实现同样的功能。evcTextMethods里的函数实在太少了,我现在要做一个控件,输出的数字位置没办法改,多谢各位帮忙!请问如何设置输出的数字的位置?怎样替代vc里的SetTextAlign函数?你用drawtext直接指定区域
weicunshang 嵌入式系统
DH4~20mA模拟串口模块及其应用
DH4~20mA模拟串口模块及其应用中国科学院半导体所方舟公司李德辉摘要:二线制4~20mA模拟串口环路作为电流遥测技术标准,以其众多优点得到广泛应用,本文介绍的DH4~20型DH4~20mA模拟串口模块与无源交流隔离传感器的组合,不但解决了交流电流电压信号的二线制4~20mA环路遥测问题,而且成本低,性价比高。本文简要介绍了这种模块的应用与测试,供读
17003404 测试/测量
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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