- 149
- 0
- 约1.19万字
- 约 15页
- 2019-03-06 发布于浙江
- 举报
实验三 定时器及中断实验
一、实验目的
熟悉VC5402的定时器工作原理。
掌握VC5402定时器的编程控制方法。
学会使用定时器的中断方式来控制程序执行方法。
掌握外部中断的控制方法,理解DSP对于中断的响应的过程。
学习并掌握混合编程的方法。
二、实验设备
1)微机一台、DSP硬件仿真器一台、DSP实验箱一台。
2)程序及链接命令文件见:D:\ EXPER\EXP3目录下的.asm 、.cmd、.C 和.lib文件。
三、开关设置
将开关K9拨到右边,即仿真器选择连接右边的CPU2。然后将实验箱上的SW2(不是CPU板上的)设置为ON ON OFF ON ,即单脉冲按钮产生的中断给CPU2的中断INT2。
拨码开关SW2设置表
SW2
备 注
1
2
3
4
码位
ON
ON
OFF
ON
单脉冲产生的中断给CPU2的中断INT2
ON
ON
OFF
OFF
单脉冲产生的中断给CPU2的中断INT0
四、实验内容
创建新的项目,添加源程序和链接命令文件,编译链接后载入执行程序。
连续运行程序,观察由发光管LED5~8所指示的变化,读懂程序理解为何每秒变化1次。在中断向量表中定时器中断向量入口地址处设置断点,然后连续执行程序,从断点处再单步执行程序,理解中断向量程序的挂接方法,同时学会中断向量地址的计算方法。
按几下单脉冲按钮,观察发光管LED1~4所发生的相应变化。与定时中断类似设置断点进行程序跟踪调试。
4)分别在中断向量表中定时器和外中断2的向量入口地址处设置断点,然后连续执行程序,从断点处再单步执行程序,理解中断向量程序的设置方法。同时还要根据实验书后附录3(中断向量表)理解并掌握中断向量的入口地址的计算方法。
五、实验报告
1)发光管LED5~8每秒钟闪烁一次是如何算得的?
2)查实验书后中断屏蔽寄存器,说明中断初始化的方法。
3)若将定时周期改为2秒,应如何修改程序?都有哪些方法?给出程序段
若将外部中断2(INT2)改为外部中断0时(INT0), 要求执行按下单脉冲按键时led1~4发生变化,应如何修改程序?注意:电路方面要调节SW2为 ON ON OFF OFF 。
5) 思考题:如何用c语言调用汇编子程序?如何实现不同汇编程序之间相互调用?怎样在c程序中嵌入汇编语句?
五、源程序及链接命令文件
1、主程序EXP03.C
/************************************************
* FileName: EXP03.C *
* Description: 定时器中断实验 *
* Write by: lanrunze *
* Date: 2004-2-10
* Update: 2006-3-10 *
*************************************************/
//因为使用了混合编程,所以必须添加 rts.lib 到项目文件中
//观察程序时使用DEBUG--GO MAIN来使程序跳转到程序的执行入口
//使用外中断2时 SW2= on on off on
//使用外中断0时 SW2= on on off off
//本实验使用单按钮产生外部中断
#include stdio.h
interrupt void timer(); //定义定时器中断服务子程序
interrupt void int2c(); //定义外部中断服务子程序
extern void initial(); //定义外部初始化子程序
extern void porta(); //定义外部端口操作子程序
extern void portb();
extern void portc();
extern void portd();
int flag1=0; //端口输出标志,用于端口输出控制
int flag2=0; //端口输出标志,用于端口输出控制
unsigned int Out_flag = 0;
interrupt void timer() //定时器中断子程序,数存单元作计数器例子
{
*(int *)0x300=*(int *)0x300+1; //时钟中断计数,使用绝对寻址方式
if(*(int *)0x300 = 1000) //计数超过 1000次
{
*(int *)0x300=0;
if(flag1==0)
{
flag1=1;
porta(); //调用PORTC汇编子程序
}
else
{
原创力文档

文档评论(0)