中断与定时器计数器的C51.doc_第1页
中断与定时器计数器的C51.doc_第2页
中断与定时器计数器的C51.doc_第3页
中断与定时器计数器的C51.doc_第4页
中断与定时器计数器的C51.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

91MCS-51单片机的中断系统由哪几个特殊功能寄存器组成?MCS-51单片机的中断系统是由TCON、IE、IP组成的。2MCS-51单片机中与定时器/计数器有关的特殊功能寄存器有哪几个?它们的功能各是什么?和定时器/计数器有关的寄存器分别为TMOD、TCON、TH、TLTMOD寄存器是定时器/计数器工作方式设置寄存器TCON寄存器是定时器/计数器控制寄存器TH、TL是初值寄存器3试编写一段对中断系统初始化程序,允许外部中断0、外部中断1、定时器/计数器T0溢出中断、串行口中断,且使定时器/计数器T0溢出中断为高优先级中断。IE=0X87;IP=0X02;4.MCS-51单片机若要把外部中断源扩充为6个,可采用哪些方法?如何确定它们的优先级?可以采用两种方法。(1)利用外部中断和查询相结合的方法扩展外部中断如果系统有多个外中断请求源,可以按照它们的轻重缓急进行排队,把其中最高级别的中断源直接连接到单片机外中断0输入引脚,其余的外部中断请求可以用利用逻辑器件通过“与”或者“或”的办法连接到单片机外中断1引脚,同时还连接到输入/输出端口(如P0或P1)的若干引脚,用来查询判断具体是哪一个中断请求源发生的中断事件。电路如下,利用单片机扩展5个外部中断源,中断的优先次序为S0S4,其中S0接到外部中断0上,S1S4通过“与”门接到外部中断1上;单片机的P1.4P1.7接4个发光二极管用来作为输出指示;当有S1S4其中一个外部中断发生时,相应的发光二极管D1D4点亮;当S0外部中断发生时,4个发光二极管全亮。C5源程序代码如下:#includesbit P1_0=P10;/定义位变量sbit P1_1=P11;sbit P1_2=P12;sbit P1_3=P13;sbit P1_4=P14;sbit P1_5=P15;sbit P1_6=P16;sbit P1_7=P17;void main( ) P1=0xFF;/熄灭LEDIT0=1;IT1=1;/外中断0、1脉冲触发方式EA=1;EX0=1;EX1=1;/中断管理for( ; ; )/延时等待中断发生;void INT0_ISR( ) interrupt 0/外中断0中断服务函数P1=0x0F; /P1口高4位置0,点亮4个LEDvoid INT1_ISR( ) interrupt 2/外中断1中断服务函数 if (P1_0=0) P1=0xef; /如果为中断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(2)利用优先编码器扩展外部中断可以采用优先级解码芯片如74LS148,把多个中断源信号作为一个中断。如下图所示,在有8个中断源(S0S7)的情况下,经74LS148优先译码后,只占3个I/O引脚,即用3根引脚可分辨8个中断源,从而节省了I/O口资源(8个中断源的响应用D1D7模拟)。C51源程序代码如下:#includeunsigned char status;/定义一变量,用来读取P0口状态void main( ) EA=1; EX0=1; IT0=1; for( ; ; ) ;void INT0_ISR( ) interrupt 0/外中断0中断服务函数status=P0&0x07; /读取P0口低三位状态,不同的值对应不同的中断源 switch(status) case 0: P1=0xfe; break;/处理中断源0 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 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源程序代码如下:#includesbit P1_1=P11;unsigned char i;/定义计数变量void main( )i=0; /初始化TMOD=0x01;TH0=(65536-10000)/256;TL0=(65536-10000)%256;EA=1;ET0=1;TR0=1;while(1);void time0_int(void) interrupt 1 /中断服务程序TH0=(65536-10000)/256;/重载初始值TL0=(65536-10000)%256;/重载初始值i+;/每发生一次中断,计数变量加1if (i=100) /发生50次中断,定时0.5msP1_1=!P1_1;i=0;/计数变量清零6在MCS-51单片机系统中,已知振荡频率是12MHz,用定时器/计数器T1实现从P1.1产生高电平宽度是100ms,低电平宽度是200ms的矩形波,试编程。根据输出要求,脉冲信号在一个周期内高电平占100ms,低电平占200ms。C51源程序代码如下:#includesbit P1_1=P11;unsigned char i;/定义计数变量void main( )i=0; /初始化TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;while(1);void time0_int(void) interrupt 1 /中断服务程序TH0=(65536-50000)/256; /重载初始值TL0=(65536-50000)%256;i=i+1;if(i=2) P1_1=0;/高电平时间到变低else if(i=6) /周期时间到变高P1_1=1;i=0;/计数变量清零7用MCS-51单片机单片机制作一个模拟航标灯,灯接在P1.7上,接光敏器件,使它具有如下功能:(1)白天航标灯熄灭,夜间间歇发光,亮2s,灭2s ,周而复始;(2)将信号作为门控信号,启动定时器定时。按以上要求编写控制主程序和中断服务程序。#include unsigned char i;sbit P1_1=P11;void main()i=0; TMOD=0x09; TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; ET0=1; TR0=1; while(1) if(!P32) /int0=0,白天 P1|=0x80; /P1.7置1,灯灭 /int0=1时启动定时器0void timer0_int(void) interrupt 1TH0=(65536-50000)/256; TL0=(65536-50000)%256; i+; if(i=40) i=0; P1_1=!P1_1; 8外部RAM以DATA1开始的数据区中有100个数据,现在要求每隔150ms向内部RAM以DATA2开始的数据区传送10个数据,通过10次传送把数据全部传送完,以定时器1作为定时,编写有关程序。单片机的时钟频率是6MHz。#include unsigned char i,j,k;unsigned char xdata data1100;unsigned char data data2100;void main()i=0;j=0; TMOD=0x10; TH1=(65536-25000)/256; TL1=(65536-25000)%256; EA=1; ET1=1; TR1=1; while(j10); EA=0; while(1);void timer1_int(void) interrupt 3TH1=(65536-25000)/256; TL1=(65536-25000)%256; i+; if(i=3) /150ms时间到,传送一个数据 i=0; for(k=0;k+;k10) data2j*10+k=data1j*10+k; j+; 9用单片机和内部定时器来产生矩形波,要求频率为100Hz,占空比为21,设单片机的时钟频率为12MHz,编写有关程序。#include unsigned char i;sbit P1_1=P11;void main()i=0; TMOD=0x10; TH0=(65536-10000)/256; TL0=(65536-10000)%256; EA=1; ET1=1; TR1=1; while(1);void timer1_int(void) interrupt 3TH0=(65536-10000)/256; TL0=(65536-10000)%256; i+; if(i=2) P1_1=0; else if(i=3) i=0; P1_1=1; 10如果MCS-51单片机系统的晶振频率为12MHZ,分别指出定时器/计数器方式1和方式2最长定时时间。方式2的最长定时时间为65536微妙;方式2的最长定时时间为256微妙。11MCS-51单片机P1端口上,经驱动接有8支发光二极管,若外部晶振是6MHz,试编写程序,使这8支发光管每隔2s循环发光(要求用T1定时)。#includeunsigned char i,sel;/定义计数变量void main()unsigned char i1,a;TMOD=0x01;TH0=(65536-10000)/256;TL0=(65536-10000)%256;EA=1;ET0=1;TR0=1;i=0; /初始化while(1);void time0_int(void) interrupt 1 /中断服务程序TH0=(65536-10000)/256;/重载初始值TL0=(65536-10000)%256;/重载初始值i+;/每发生一次中断,计数变量加1if (i=200) P1=sel;a=1;sel=sel|0x01;i=0;/计数变量清零12每隔1S读一次P1.0,如果所读的状态为“1”,则将片内RAM10H单元内容加1;如果所读的状态为“0”,则将片内RAM11H单元内容加1。设单片机的晶振频率为12MHz,试编写程序。#include#includeunsigned char i,sel;/定义计数变量sbit P1_0=P10;void main()unsigned char i1,a;TMOD=0x01;T

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论