当前位置:文档之家› 【大学课件】单片机课后习题参考答案-文档资料

【大学课件】单片机课后习题参考答案-文档资料

习题参考答案(P.204)
• 1.什么是中断、中断源和中断优先级? (见P173,174,175)
docin/sundae_meng
• 2.8051中断有多少优先级 答:(见p176) 2个
docin/sundae_meng
习题参考答案(P.204)
习题3. 8051中断的中断响应条件是什么?
答: 1、中断寄存器IE中的EA和相应的中断使能位激活; 2、CPU没有在处理同级或者更高级的中断; 3、现行执行周期是所执行指令的最后一个周期; 4、当前指令不是RETI或者是访问IE或IP的指令。
docin/sundae_meng
• 4. 8051的中断响应过程是怎样的? 答:CPU响应中断后,由硬件自动执行如下的功能操作:
(1) 根据中断请求源的优先级高低,对相应的优先级状 态触发器置1。
(2) 保护断点,即把程序计数器PC的内容压入堆栈保存。
(3) 清内部硬件可清除的中断请求标志位(IE0、IE1、 TF0、TF1)。
docin/sundae_meng
主程序
T0中断
TMOD TMOD=0x01
D 装初值 TH0,TL0 D 装初值 TH0,TL0 TMOD P1_6=!P1_6 D EA,ET0 ,TR0置1 TMOD 返回 TMOD 等待中断
主程序流程
中断服务程序流程
docin/sundae_meng
#include <reg51.h> sbit P1_6=P1^6; void timer0() interrupt 1 using 1 { TH0=65536-5000/256; TL0=65536-5000%256; P1_6=!P1_6; }
docin/sundae_meng
• 10. 8051定时器方式和计数器方式的区别是 什么? 基本的8051有2个可编程的16位定时器/计 数器(各工作方式只是用到哪些位?)。 计数器内部晶振驱动-------定时器; 计数8051的输入引脚的脉冲信号----计数器。 定时器实际上也是工作在计数方式下的。
外部中断1
定时器/计数器1 行口中断
docin/sundae_meng
3
4
001BH
0023H
习题5. 若8051的外部中断0为边沿触发方式,简述IE0标志的检测和置 位过程。
答: 8051的CPU在每个机器周期采样引脚INT0上的电平, 当前一个周期采样为高,而这个周期采样为低,即置 位中断标志IE0。 同时8051的CPU在每个机器周期还采 样中断标志IE0,如果中断标志IE0被置位,中断被激活, 且没有中断阻止条件,则CPU自动转向中断0的入口地 址0x0003进入中断服务程序。
docin/sundae_meng
习题6. 8051的中断系统如何实现两级中断嵌套? 答: 可以利用寄存器IP通过设置不同中断的优先级,或者 利用中断的自然优先级实现两级中断嵌套。当单片机 处理一个中断的时候,可以再去响应高优先级的中断, 或者自然优先级较高的中断。但不能去响应同级或者 更低的中断。
• 15. 用8751制作一个模拟航标灯,灯接在p1.7口上,INT0接光敏元件。使它具有如下功能:
① 白天航标灯熄灭;夜间间歇发光,亮2S,灭2S,周而复始。 ② 将信号作门控信号,启动定时器定时。 按以上要求编写控制主程序和中断服务程序。
解一:设INT0口高电平时表示白天, 低电平时表示黑夜,查询方式。采用定时 器T0,工作方式1,外接晶振6MHz。定时 100ms,20次中断就是2s。产生100ms中断 需要100 000/2=50000个计数。当2s到了,就改变P1.7状态,控制LED灯。 主程序和中断服务程序流程图分别如下:
docin/sundae_meng
习题14. 设fosc=6MHz,利用定时器0的方式1在P1.6 口产生一串50Hz的方波。定时器溢出时采用中断方 式处理。(1.设计分析;2.流程;3.注释) 解. 1.50Hz的方波即周期为20ms的方波,要求 定时间隔为10ms,每次时间到时,P1.6脚取反。 定时器计数频率为fosc/12=500kHz 其周期即单片机的机器周期为12/fosc=2us 计数周期10ms需要计数10ms/2us=5000次 计数器向上计数需要的初值为65536-5000
void main() { TMOD=0x01; TH0=65536-5000/256; TL0=65536-5000%256; EA=1; ET0=1; TR0=1; while(1); }
docin/sundae_meng
//取反
//T0方式1 //开总中断 //使能T0中断 //启动T0 //等待
(4) 把被响应的中断服务程序入口地址送入PC,从而转 入相应的中断服务程序执行。各中断服务程序的入口地 址见表。 BTW:5个中断源及入口地址表
docin/sundae_meng
BTW:5个中断源及入口地址表
编 号
0 1 2
中断源
外部中断0 定时器/计数器0
入口地址
0003H 000BH 0013H
docin/sundae_meng
T0装初值
overflow_count++
返回
docin/sundae_meng
#include <reg51.h> sbit LED=P1^7; /*P1.7电平控制灯亮灯灭,高电平灯亮 */ sbit dark=P3^2; /*通过P3.2脚INT0判断白天黑夜,INT0 低电平表黑夜*/ static unsigned long overflow_count = 0; void timer0() interrupt 1 using 0 { TH0=(65536-50000)/256; TL0= (65536-50000) %256; overflow_count++; }
(P176)
docin/sundae_meng
习题9. 8051中断程序如何进行现场保护?何为上下文切换?
答: 中断通过把保存有现场数据的寄存器压入堆栈进行现 场保护。 当一个特定任务正在执行时,可能有更紧急的事需要引 起CPU的注意。在一个具有优先级的系统中,CPU不是等 待第一个任务完成,而是假定前一个任务已经完成,立 即处理新的任务。若程序流程立刻转向新任务,则新任 务使用的各个寄存器将会破坏第一个任务使用的中间信 息。但第一个任务恢复运行时,寄存器的值将不再可靠 而导致错误的发生。解决问题的方法是每次发生任务的 切换时执行一些指令进行现场保护和现场恢复,这就是 上下文切换。p179
相关主题