中断与定时器计数器的C51
更新时间:2023-11-16 07:00:01 阅读量: 教育文库 文档下载
·1· 1.MCS-51单片机的中断系统由哪几个特殊功能寄存器组成? MCS-51单片机的中断系统是由TCON、IE、IP组成的。
2.MCS-51单片机中与定时器/计数器有关的特殊功能寄存器有哪几个?它们的功能各是什么?
和定时器/计数器有关的寄存器分别为TMOD、TCON、TH、TL TMOD寄存器是定时器/计数器工作方式设置寄存器 TCON寄存器是定时器/计数器控制寄存器 TH、TL是初值寄存器
3.试编写一段对中断系统初始化程序,允许外部中断0、外部中断1、定时器/计数器T0溢出中断、串行口中断,且使定时器/计数器T0溢出中断为高优先级中断。
IE=0X87; IP=0X02;
4.MCS-51单片机若要把外部中断源扩充为6个,可采用哪些方法?如何确定它们的优先级?
可以采用两种方法。
(1)利用外部中断和查询相结合的方法扩展外部中断
如果系统有多个外中断请求源,可以按照它们的轻重缓急进行排队,把其中最高级别的中断源直接连接到单片机外中断0输入引脚INT0,其余的外部中断请求可以用利用逻辑器件通过“与”或者“或”的办法连接到单片机外中断1引脚INT1,同时还连接到输入/输出端口(如P0或P1)的若干引脚,用来查询判断具体是哪一个中断请求源发生的中断事件。
电路如下,利用单片机扩展5个外部中断源,中断的优先次序为S0~S4,其中S0接到外部中断0上,S1~S4通过“与”门接到外部中断1上;单片机的P1.4~P1.7接4个发光二极管用来作为输出指示;当有S1~S4其中一个外部中断发生时,相应的发光二极管D1~D4点亮;当S0外部中断发生时,4个发光二极管全亮。
·1·
C5源程序代码如下:
#include
P1=0xFF; EA=1; {;} }
//外中断0中断服务函数 //P1口高4位置0,点亮4个LED
//熄灭LED
//外中断0、1脉冲触发方式 //中断管理 //延时等待中断发生
//定义位变量
IT0=1; IT1=1; for( ; ; )
EX0=1; EX1=1;
void INT0_ISR( ) interrupt 0 { }
void INT1_ISR( ) interrupt 2 { if (P1_0==0) {P1=0xef;}
P1=0x0F;
//外中断1中断服务函数 //如果为中断S11,点亮D1
else if (P1_1==0) {P1=0xdf;} else if (P1_2==0) {P1=0xbf;} }
else if (P1_3==0) {P1=0x7f; } //如果为中断S44,点亮D4
·3· (2)利用优先编码器扩展外部中断
可以采用优先级解码芯片如74LS148,把多个中断源信号作为一个中断。如下图所示,在有8个中断源(S0~S7)的情况下,经74LS148优先译码后,只占3个I/O引脚,即用3根引脚可分辨8个中断源,从而节省了I/O口资源(8个中断源的响应用D1~D7模拟)。
C51源程序代码如下:
#include
EA=1;
EX0=1; IT0=1; {;} }
//定义一变量,用来读取P0口状态
for( ; ; )
void INT0_ISR( ) interrupt 0//外中断0中断服务函数 {
status=P0&0x07;
//读取P0口低三位状态,不同的值对应不同的中断源
//处理中断源0
switch(status) {
case 0: P1=0xfe; break; case 1: P1=0xfd; break; case 2: P1=0xfb; break; case 3: P1=0xf7; break; case 4: P1=0xef; break; case 5: P1=0xdf; break; case 6: P1=0xbf; break; case 7: P1=0x7f; break;
//处理中断源7
}
}
·1·
5.在MCS-51单片机系统中,已知振荡频率是12MHz,用定时器/计数器T0实现从P1.1产生周期是2s的方波,试编程。
要输出周期为2s的方波,应产生1s的周期性定时,定时到则对P1.1取反即可实现。 用定时/计数器T0产生周期性为10ms的定时,然后用一个变量对10ms计数100次。系统时钟为12MHz,定时/计数器T0定时10ms,计数值N为10000,选方式1,方式控制字为00000001B(01H),则初值X为X=65 536-10 000。
C51源程序代码如下:
#include
i=0;
//初始化
TMOD=0x01;
TH0=(65536-10000)/256; TL0=(65536-10000)%6; EA=1; ET0=1; TR0=1; while(1); }
void time0_int(void) interrupt 1 {
TH0=(65536-10000)/256; TL0=(65536-10000)%6; i++; { } }
if (i==100)
i=0;
//中断服务程序 //重载初始值 //重载初始值
//每发生一次中断,计数变量加1 //发生50次中断,定时0.5ms //计数变量清零
//定义计数变量
P1_1=!P1_1;
6.在MCS-51单片机系统中,已知振荡频率是12MHz,用定时器/计数器T1实现从P1.1产生高电平宽度是100ms,低电平宽度是200ms的矩形波,试编程。
根据输出要求,脉冲信号在一个周期内高电平占100ms,低电平占200ms。 C51源程序代码如下:
#include
i=0;
//初始化
//定义计数变量
TMOD=0x01;
TH0=(65536-50000)/256; TL0=(65536-50000)%6; EA=1; TR0=1; while(1); }
void time0_int(void) interrupt 1 {
TH0=(65536-50000)/256; TL0=(65536-50000)%6; i=i+1;
if(i==2) P1_1=0; else if(i==6)
{ }
}
P1_1=1; i=0;
//计数变量清零
//高电平时间到变低 //周期时间到变高
//中断服务程序 //重载初始值
ET0=1;
·5·
7.用MCS-51单片机单片机制作一个模拟航标灯,灯接在P1.7上,INT0接光敏器件,使它具有如下功能: (1)白天航标灯熄灭,夜间间歇发光,亮2s,灭2s ,周而复始; (2)将INT0信号作为门控信号,启动定时器定时。 按以上要求编写控制主程序和中断服务程序。 #include
TMOD=0x09;
TH0=(65536-50000)/256; TL0=(65536-50000)%6; EA=1; ET0=1; TR0=1; while(1)
{ if(!P3^2) P1|=0x80; }
}
//int0=1时启动定时器0
//int0=0,白天 //P1.7置1,灯灭
正在阅读:
中断与定时器计数器的C5111-16
写景作文800字 爱我海西 护我水土04-13
杰出校友选拔评选参考标准01-30
地下车位定价建议05-05
最新名家优美随笔.docx04-10
语音编码技术的现状与发展06-06
身份证阅读器主要的品牌以及参数06-12
冬天的骨头观后感12-11
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 定时器
- 计数器
- 中断
- C51