编辑: 鱼饵虫 | 2019-07-07 |
2、
3、4管亮,
5、
6、
7、8管暗;
0.75s后,
1、
2、
3、4管暗,
5、
6、
7、8管亮;
0.1s后,
1、
2、
3、4管亮,
5、
6、
7、8管暗;
再0.25s后,
1、
2、
3、4管暗,
5、
6、
7、8管亮……如此循环……满足要求.
2、程序2的调试: 打开KEILUVISION2仿真软件,添加编写好的程序,编译无误. 运行程序,按动单次脉冲的按键6次,复位后观察到30H的内容为06H,符合要求.
3、程序3的调试: 打开KEILUVISION2仿真软件,添加编写好的程序,编译无误. 运行程序后,按动单次脉冲的按键1次,复位后观察到30H的内容为E5H,说明按动这一次使程序229次进入中断程序,符合要求. 实验名称: 硬件实验二 姓名: 詹文博 学号:
3061101341
六、实验结果与分析 3个程序经调试运行,均能满足实验内容要求. 由程序3可知,按动1次单次脉冲的按键实际还是相当于低电平保持了一定的时间,这期间引起了多次的中断,如果实际应用中不希望产生连击,则需通过编程或加硬件电路来消除连击影响.
七、讨论、心得 思考题
1、如何将LED的状态间隔改为2s,程序如何改写? 答:原例程中定时常数为156,定时10000次,若要将LED的状态间隔改为2s,则只需将定时次数改为20000次即可.
2、如果更换不同频率的晶振,会出现什么现象?如何调整程序? 答:对于例程,如果更换不同频率的晶振,那么机器周期将方法改变,则相同的初值下定时器的定时时间会变化,最终引起LED状态间隔不再为1s.调整程序只需根据更换后的晶振相应的修改定时器初值即可.
3、由功能、计数启动条件、重复启动条件等诸方面比较80C51的各种方式. 答:方式0:由TL的低5位和TH的8位组成共13位计数器. 计数启动条件为,TMOD中的M1M0设为00H,对TL的低5位和TH的8位设置初值,将启停控制位TR0或TR1置1. 重复启动条件为,保持TMOD和TR原有状态,重新设置初值. 方式1:TL,TH共16位计数器. 计数启动条件为,TMOD中的M1M0设为01H,对TL的8位和TH的8位设置初值,将启停控制位TR0或TR1置1. 重复启动条件为,保持TMOD和TR原有状态,重新设置初值. 方式2:TL的8位计数器. 计数启动条件为,TMOD中的M1M0设为10H,对TL的8位和TH的8位设置初值,将启停控制位TR0或TR1置1. 重复启动条件为,保持TMOD和TR原有状态,不需要重新设置初值. 方式3:TL0为8位的定时/计数器,TH0只能用于定时方式. 计数启动条件为,TMOD中的M1M0设为11H,对TL的8位和TH的8位设置初值,将启停控制位TR0和TR1置1. 重复启动条件为,保持TMOD和TR原有状态,重新设置初值.
4、89C51单片机的最高计数频率为多少? 答:89C51单片机的最高计数频率为fosc/24.
5、简述中断处理的一般过程. 答:MCS-51中断响应的过程如下: (1)各中断源通过硬件置位其相应中断标志位,从而向CPU申请中断. (2)在每个机器周期的S5P2期间,各中断标志采样相应的中断源.CPU则在下一个机器周期的S6期间按优先级的顺序查询各中断标志.若查询到某中断标志为1,则按优先级 实验名称: 硬件实验二 姓名: 詹文博 学号:
3061101341 的高低进行处理,即响应中断. (3)响应中断后,CPU首先使被响应中断的相应"优先级激活"触发器置位,以阻扰同级和低优先级的中断的响应.然后,执行硬件生成的长调用指令"LCALL",将程序计数器PC的内容压入堆栈中保护起来,断点地址的入栈次序是:先低位地址入栈,再高位地址入栈,堆栈指针的值被加2. (4)将对应中断源的中断矢量地址装入程序计数器PC,使程序转向该中断矢量地址去执行中断服务程序. (5)中断服务程序由中断矢量地址开始执行,直到遇到RETI为止. (6)执行RETI指令,从堆栈中弹出断点地址进入PC,先弹出高位地址,后弹出低位地址,堆栈指针减2,恢复原程序的执行. 需要注意的是,CPU响应中断请求,转而执行中断服务程序,在执行中断返回指令RETI前,中断请求信号必须以硬件或软件方式撤除,否则将会再次引起中断而出错.