单片机原理与应用技术课后答案(4)

本文详细介绍了中断的概念,包括中断的优点如分时操作、实时处理和故障处理。讨论了MCS-51单片机的中断系统,如中断源的触发方式、中断优先级处理原则以及中断响应过程。还涵盖了中断嵌套、定时器的工作方式及其与计数的关系,以及如何通过编程实现特定定时和计数功能。此外,提到了MCS-51中的特殊功能寄存器和如何设置TMOD和IP寄存器以满足不同需求。

1.什么叫中断?设置中断有什么优点和功能?

中断是指计算机在执行某段程序中,由计算机系统内,外的某个原因,要求CPU暂时中断当前程序而转去执行相应程序,待处理系统执行完毕后,再返回继续执行原来被中断的程序。

中断的设置可以让我们进行(中断的优点)

(1)分时操作,中断可以解决CPU和外设的矛盾,可以启动多个外设进行工作,大大提高CPU的效率

(2)实时处理,在实际中参数会随着现场变化,如果中断条件满足,CPU就会马上去处理

(3)故障处理,针对难以预料的情况可以通过中断系统向CPU发出中断请求,从而实现实时处理

3.外部中断有哪两种触发方式?如何选择中断源的触发方式?

外部中断可以分为INT0和INT1中断,通过改变定时器控制寄存器TCON中IE0和IE1位的状态设置来进行改变。

4.什么是中断优先级?中断优先级处理的原则是什么?

中断优先级是优先级大的中断将优先处理,中断优先级处理的原则是高级中断请求可以打断正在执行的低级中断,同级或低级中断不能打断正在执行的中断。

5.MCS-51中各中断标志是什么?哪些中断标注可以随着中断响应而被撤除?哪些中断需要用户来撤除?

MCS-51中RI(SCON.0串行口接收中断标志位。当允许串行口接收数据时,每接收完一个串行帧,由硬件置位RI。同样,RI必须由软件清除。TI(SCON.1串行口发送中断标志位。当CPU将一个发送数据写入串行口发送缓冲器时,就启动了发送过程。每发送完一个串行帧,由硬件置位TI。CPU响应中断时,不能自动清除TI,TI必须由软件清除。对于定时器中断,串行口中断,外部中断可以随着中断响应被撤除,而对于由电平触发的外部中断需要用户来撤除。

6.MCS-51中断系统中包含哪些特殊功能寄存器?

包括定时器工作方式寄存器和定时器控制寄存器

7.叙述CPU响应中断的过程。

CPU收到中断请求后,能根据具体情况决定是否响应中断,如果CPU没有更急,更重要的工作,则在执行完当前指令后响应这一中断请求。首先,将断点处的PC值推入堆栈保存起来这称为保存断点,由硬件自动执行,然后将有关寄存器内容和标志位状态推入堆栈保存起来,这称为保护现场。

8.什么叫中断嵌套?中断嵌套有什么限制?

中断嵌套就是当CPU响应某一中断时,若有优先权高的中断源发出中断请求,则CPU会中断正在进行的中断程序,并保留这个程序的断点。中断嵌套中,如果新发出的中断请求的中断源的优先权级别与正在处理的中断服务程序执行完以后才去处理新的中断请求。

9.MCS-51单片机内部有几个定时/计数器?它们由哪些专用寄存器组成?

MCS-51单片机中由2个定时器,它们由定时器工作方式寄存器TMOD,定时器控制寄存器TCON组成

10.MCS-51单片机的定时器有哪几种工作方式?各有什么特点?

单片机定时器工作方式有4种分别是TMOD = 00,TMOD = 01,TMOD = 10,TMOD = 11;第一种方式为13位定时方式最大计数值为8192,第二种方式与第一种的区别是最大计数为65536,第三种最大为256但是可以进行重新装载值,第四种只适合计数器0

11.定时/计数器用于定时时,其定时时间与哪些因素有关?用于计数时,对外界计数频率有何限制?

定时时间跟计数器初值,TMOD寄存器的值,晶振有关。

12.定时/计数器在什么情况下是定时器?在什么情况下是计数器?

通过T脚进行选择模式若为0则为定时器方式若为1则为计数器方式。

13.设单片机晶振频率为13MHz,利用定时器T1定时,以中断方式,使P1.0输出周期为2ms的方波。

#include<regic.h>
sbit P1_0 = P1^0
void timer0(void) interrupt 1
{   P1_0 =!P1_0   }
void main(void){
    TMOD = 0x00;
    P1_0 = 0;
    TH0 = 0x18;
    TL0 = 0x30;
    EA = 1;
    ET0 = 1;
    TR0 = 1;
    while(1){}

}

13.设单片机晶振频率为12msHz,利用定时器T1方式1,产生1ms的定时,使P1.0输出周期为2ms的方波,用查询方式工作,查询标志为TF1。

#include<reg51.h>
sbit P1_0 = P1^0
void main(void){
     TMOD = 0x01;
     TH0 = (65536 - 1000)%256;
     TL0 = (65536 - 1000)/256;
     while(1){
          do{} while(!TF0);
          TF0 = 0;
          do{} while(!TF0);
          TF0 = 0;
          P1_0 =! P1_0;
     }
}

15.按下列要求设置TMOD。

(1)T0计数器,方式1,运行与INT0有关;T1定时器,方式2,运行与INT1无关。

(2)T0计数器,方式0,运行与INT0有关;T1定时器,方式2,运行与INT1有关。

(3)T0计数器,方式2,运行与INT0无关;T1定时器,方式2,运行与INT1有关。

(4)T0计数器,方式3,运行与INT0无关;T1定时器,方式2,运行与INT1无关。

(1)TMOD=0x2D;
(2)TMOD=0x0E8;
(3)TMOD=0x0D6;
(4)TMOD=0x23;

16.8051定时/计数器,当fosc = 6MHz和fosc=12MHz,最大定时各位多少?

当fosc = 6MHz时,最大时间为2*65.536ms。当fosc=12MHz时,最大时间为65.536ms。

17.已知时钟频率为6MHz,利用T0工作在方式3,编写程序使P1.0和P1.1分别输出周期0.4ms和1ms的方波

#include<reg51.h>
sbit P1_0 = P1^0;
sbit P1_1 = P1^1;
void main(void){
     TMOD = 0X02;
     TH0 = (256-100)%16;
     TL0 = (256-100)/16;
     TR0 = 1;
     while(1){
         for(int i=0;i<20;i++){
              do{} while(!TF0);
              if(i%2==0){P1_0=!P_0}
              if(i%5==0){P1_1=!P1_1}
         }
     }
}

18.设系统时钟频率为6MHz,试用定时器T0作外部计数器,编程实现每计到1000个脉冲,使T1开始2ms定时,定时时间到后,T0又开始计数,这样反复循环不止。

#include<reg51.h>
void main(void){
     TMOD = 0x01;
     while(1){
         TH0 = (8192-1000)/256;
         TL0 = (8192-1000)%256;
         TR0 = 1;
         do{ }while(!TF0);
         TR0 = 0;
         TH1 = (8192-1000)/256;
         TL1 = (8192-1000)%256;
         TR1 = 1;
         do{ }while(!TF1);
         TR0 = 1;
         TR1 = 0;
     }

}

19.按下列要求设置IP

(1)INT0,串行口为高优先,其余为低优先。

(2)T0,INT1为低优先,其他为高优先。

将相应的位数置为1即可

20.按下列要求设置T0定时的初值,并置TH0,TL0值。

(1)fosc = 6MHz,T0方式1,定时40ms。

(2)fosc = 12MHz,T1方式2,定时0.18ms。

(1)TMOD = 0x01;TH0 = (8192-2000)/256;TL0 = (8192-2000)%256;
(2)TMOD = 0x02;TH0 = 256-76;TL0 =256-76;

21.试统计某展区人数。已知展览会有四个入口且已安装检测探头,每进入一人,就能产生一个负脉冲,分别输入P3.2,P3.3,9P3.4,P3.5。估计参展人数多余10万人,试编程,将累计参展人数存入32H,31H,30H中。

ORG 0000H ;复位地址
 LJMP STAT ;转初始化
 ORG 0003H ;中断入口地址
 LJMP AVR ;转统计程序
 ORG 000BH ;T0中断入口地址
 UMP AVR ;转统计程序
 ORG 0013H ;中断入口地址
 LJMP AVR ;转统计程序
 ORG 001BH ;T1中断入口地址
 LJMP AVR ;转统计程序
 ORG 0100H ;初始化程序首地址
 STAT:MOV SP,#60H ;置堆栈指针
 SETB IT0 ;置边沿触发方式
 SETB IT1 ;置边沿触发方式
 MOV TMOD,#66H ;置T0、T1计数器方式2
 MOV TH0,#0FFH ;置T0初值
 MOV TL0,#0FFH ;
 MOV TH1,#0FFH ;置T1初值
 MOV TL1,#0FFH ;
 MOV IE,#0FFH ;全部开中
 SETB TR0 ;T0启动
 SETB TR1 ;T1启动
 CLR A ;
 MOV 30H,A ;参展人数累加器清0
 MOV 31H,A ;
 MOV 32H,A ;
 SJMP MAIN ;转主程序,并等待中断
 ORG 2000H ;统计程序首地址
 AVR:MOV A,#1 ;
 ADD A,30H ;低8位累加1
 MOV 30H,A ;回存
 CLR A ;
 ADDC A,31H ;进位累加
 MOV 31H,A ;回存
 CLR A ;
 ADDC A,32H ;进位累加
 MOV 32H,A ;回存
 RETI ;中断返回

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值