实验三定时器与中断实验.docxVIP

  • 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)

1亿VIP精品文档

相关文档