《中断与定时器计数器的C51》由会员分享,可在线阅读,更多相关《中断与定时器计数器的C51(9页珍藏版)》请在金锄头文库上搜索。
1、11MCS-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.M
2、CS-51 单片机若要把外部中断源扩充为 6 个,可采用哪些方法?如何确定它们的优先级?可以采用两种方法。( 1) 利用外部中断和查询相结合的方法扩展外部中断如 果 系 统 有 多 个 外 中 断 请 求 源 , 可 以 按 照 它 们 的 轻 重 缓 急 进 行 排 队 , 把 其 中 最 高 级别 的 中 断 源 直 接 连 接 到 单 片 机 外 中 断 0 输 入 引 脚 , 其 余 的 外 部 中 断 请 求 可 以 用 利INT0用 逻 辑 器 件 通 过 “与 ”或 者 “或 ”的 办 法 连 接 到 单 片 机 外 中 断 1 引 脚 , 同 时 还 连 接INT到 输 入 /
3、输 出 端 口 ( 如 P0 或 P1) 的 若 干 引 脚 , 用 来 查 询 判 断 具 体 是 哪 一 个 中 断 请 求 源 发生 的 中 断 事 件 。电路如下,利用单片机扩展 5 个外部中断源,中断的优先次序为 S0S4,其中 S0 接到外部中断 0 上,S1S4 通过 “与”门接到外部中断 1 上;单片机的 P1.4P1.7 接 4 个发光二极管用来作为输出指示;当有 S1S4 其中一个外部中断发生时,相应的发光二极管D1D4 点亮;当 S0 外部中断发生时,4 个发光二极管全亮。1C5 源程序代码如下:#includesbit P1_0=P10; /定 义 位 变 量sbit
4、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个 LEDvoi
5、d INT1_ISR( ) interrupt 2 /外 中 断 1中 断 服 务 函 数 if (P1_0=0) P1=0xef; /如 果 为 中 断 S11,点 亮 D1else if (P1_1=0) P1=0xdf; else if (P1_2=0) P1=0xbf;else if (P1_3=0) P1=0x7f; /如 果 为 中 断 S44,点 亮 D43( 2) 利用优先编码器扩展外部中断可以采用优先级解码芯片如 74LS148,把多个中断源信号作为一个中断。如下图所示,在有 8 个中断源(S0S7)的情况下,经 74LS148 优先译码后,只占 3 个 I/O 引脚,即用
6、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; /处理中断源 0ca
7、se 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; /处理中断源 715在 MCS-51 单片机系统中,已知振荡频率是 12MHz,用定时器 /计数器 T0 实现从P1.1 产生周期是 2s 的方波,试编程。要输出周期为 2s 的方波,应产生 1s 的周期性定时,定时到则对 P1.1 取反即可实现。用定时/计数器 T0 产生周期性
8、为 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 time
9、0_int(void) interrupt 1 /中断服务程序 TH0=(65536-10000)/256; /重载初始值TL0=(65536-10000)%256; /重载初始值i+; /每发生一次中断,计数变量加 1if (i=100) /发生 50 次中断,定时 0.5ms P1_1=!P1_1;i=0; /计数变量清零6在 MCS-51 单片机系统中,已知振荡频率是 12MHz,用定时器 /计数器 T1 实现从P1.1 产生高电平宽度是 100ms,低电平宽度是 200ms 的矩形波,试编程。根 据 输 出 要 求 , 脉 冲 信 号 在 一 个 周 期 内 高 电 平 占 100ms
10、, 低 电 平 占 200ms。C51 源程序代码如下:#includesbit P1_1=P11;unsigned char i; /定义计数变量void main( ) i=0; /初始化5TMOD=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; /高电平时间到变
11、低else if(i=6) /周期时间到变高 P1_1=1;i=0; /计数变量清零7用 MCS-51 单片机单片机制作一个模拟航标灯,灯接在 P1.7 上, 接光敏器件,INT0使它具有如下功能:(1)白天航标灯熄灭,夜间间歇发光,亮 2s,灭 2s ,周而复始;(2)将 信号作为门控信号,启动定时器定时。INT0按以上要求编写控制主程序和中断服务程序。#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;
12、TR0=1;while(1) if(!P32) /int0=0,白天P1|=0x80; /P1.7 置 1,灯灭/int0=1 时启动定时器 01void timer0_int(void) interrupt 1 TH0=(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 作为定时,编写有关程序。单片机的时钟频率
13、是 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(junsigned char i;sbit P1_1=P11;void main() i=0;TMOD=0x10;TH0=(65536-10000)/256;TL0=(65536-10000)%256;EA=1; E
14、T1=1;TR1=1;while(1);void timer1_int(void) interrupt 3 TH0=(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 微妙。11 MCS-51 单片机 P1 端口上,经驱动接有 8 支发光二极管,若外部晶振是 6MHz,试编写程序,使这 8
15、 支发光管每隔 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;1i=0; /初始化while(1);void time0_int(void) interrupt 1 /中断服务程序 TH0=(65536-10000)/256; /重载初始值TL0=(65536-10000)%256; /重载初始值i+; /每发生一次中断,计数变量加 1if (i=200) P1=sel;a=#includeunsigned char i,sel; /定义计数变量sbit P1_0=P10;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 /中断服务程序 TH