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单片机 | 第四节 动态数码管,用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 测试/测量
设计资源 培训 开发板 精华推荐
- MAXREFDES1218:使用MAX17599、24V 3A平均电流,4A峰值电流有源钳位正向DC-DC转换器
- 8路光耦隔离继电器驱动模块
- 使用 Analog Devices 的 LTC3419EDD-1 的参考设计
- 【物联网】【物联网】鸿蒙智能WIFI开关+:4226836A
- AKD5357-B,AK5357 24 位 Delta-Sigma ADC 评估板
- AT89C2051 微控制器的两线外设扩展
- 自适应前灯测试和原型制作套件(安装在有机玻璃面板)
- AM2G-4812SH30Z 12V 2瓦直流/直流转换器的典型应用
- SI87XXSDIP6-KIT、带有 Si87XX LED 仿真器输入隔离器的 SDIP6 封装评估板套件
- 使用 NKK Switches 的 74HC164 的参考设计