计算机硬件实验报告-第三次_第1页
计算机硬件实验报告-第三次_第2页
计算机硬件实验报告-第三次_第3页
计算机硬件实验报告-第三次_第4页
计算机硬件实验报告-第三次_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

计算机硬件基础实验报告(三)实验6中断技术姓名:王悦昶学号:2010010439实验班号:周四第二节机器号:16一、实验目的 1、了解中断原理,包括对中断源、中断向量、中断类型号以及中断过程的理解; 2、掌握汇编语言中断程序的设计方法;3、(选作)了解C语言中断程序设计方法二、实验基本任务1、中断过程的理解 通过阅读汇编语言中断程序L6_P1_int.s43,说明程序执行的流程和实现的功能。回答下列问题,了解用汇编语言编写中断程序的方法。 (1)、阅读程序L6_P1_int.s43,从程序中判断用的是哪一个中断源?其中断类型号是多少?设计将实验板上的某一按键与该中断源对应的引脚相连。运行程序,操作按键,观察现象。答:从程序中可以判断出使用的是P1口作为中断源。P1口的中断类型是4。在中断子程中进行了触发中断的具体引脚的检测,当触发中断的是P1.1口的时候,将P2OUT寄存器中的数值取反。烧写程序后,每按下KEY2键一次,8个LED灯的亮灭状态改变一次。 (2)、在L6_P1_int.s43中,没有CALL语句,中断程序如何被执行?何时会被执行?答:中断程序只有在其对应的中断源被触发的时候才会执行。中断程序的执行是由硬件控制的,与软件编程无关,硬件依次自动完成入栈保护断点、入栈保护SR、清零SR,从中断向量表中取中断向量值PC,转去执行中断服务子程序。所以不需要CALL语句也可以实现;在本例中,当KEY2键被按下之后,执行中断程序。 (3)、在L6_P1_int.s43中,如果中断子程序中不清分中断标志P1IFG的后果是什么?答:如果不清除分中断标志,则不论是否再次按键,中断子程序会不断的被执行。 (4)、如果L6_P1_int.s43中的PORT1-VECTOR改为PORT2_VECTOR,其他不变,程序执行的后果是什么?为什么?答:不会触发中断,因为做出上述语句更改后,中断源更改为了PORT2,而在程序的初始化语句段并没有对PORT2中断相关的寄存器进行设置,故不会有中断被触发。 (5)、如果去掉L6_P1_int.s43程序最后的那条无限循环语句,程序执行的流程是什么样子的?为什么?答:执行到最后一句之后,EW430软件报错:Thestackpointerforstack‘STACK’isoutsidethestackrange。因为去掉无限循环语句之后,CPU找不到下一条需要执行的语句。执行此程序所需硬件连线图如下(其中电源,晶振、复位、JTAG下载部分电路图在本实验中其余任务中都是相同的):硬件原理图如下:修改后的程序如下:#include"msp430.h" ;#definecontrolledincludefileNAMEmain ;modulenamePUBLICmain ;makethemainlabelvissibleoutsidethismodule设置P2设置P2口中断向量表地址指向intP1DC16init ;setresetvectorto'init'labelORG0FFE0h+PORT2_VECTOR ;中断向量表首地址+端口2中断向量符号偏址DC16intP1 ;setport2vectorto'intP1'labelRSEGCSTACK ;pre-declarationofsegmentRSEGCODE ;placeprogramin'CODE'segmentinit: MOV#SFE(CSTACK),SP ;setupstackmain: NOP ;mainprogramMOV.W#WDTPW+WDTHOLD,&WDTCTL;Stopwatchdogtimer DINT ;禁止可屏蔽中断GIE=0MOV.B#0, &P1SEL ;设置P1为基本I/O功能MOV.B #0, &P1OUT ;置P1OUT初值为0MOV.B #0xFF, &P1DIR ;设置P1引脚为输出BIC.B #BIT2, &P2SEL ;P2.2中断相关设置BIC.B #BIT2, &P2DIR BIS.B#BIT2, &P2IES BIC.B#BIT2,&P2IFG BIS.B#BIT2,&P2IE EINT ;允许可屏蔽中断GIE=1JMP $;jumptocurrentlocation'$'(endlessloop)intP1: BIT.B#BIT2,&P2IFG ;中断子程序 JZexit INV.B&P2OUT BIC.B#BIT2,&P2IFG ;清分中断标志位exit: RETIEND修改后的程序进行烧写后,按下KEY7键,LED灯亮暗状态转换一次。(7)、在中断子程序入口处设置一个断点,观察按下键和不按键时程序的执行的流程。答:不按键时程序一直在无限循环语句处执行;按下按键之后,程序进入中断子程序执行。2、用汇编语言编写中断程序 在实验板上用跳线将按键KEY5,KEY6分别与单片机的P1.4,P1.5相连,编程以中断方式处理按键KEY5和KEY6的请求,当KEY5上有一个下降沿信号时,实验板上的蜂鸣器发出一声警报;当KEY6上有一个上升沿信号时,实验板上的发光二极管L1闪3次。硬件电路图如下:编程如下:#include"msp430.h" ;#definecontrolledincludefileNAMEmain ;modulenamePUBLICmain ;makethemainlabelvissibleoutsidethismoduleORG0FFFEhDC16init ;setresetvectorto'init'labelORG0FFE0h+PORT1_VECTOR ;中断向量表首地址+端口1中断向量符号偏址DC16intP1 ;setport1vectorto'intP1'labelRSEGCSTACK ;pre-declarationofsegmentRSEGCODE ;placeprogramin'CODE'segmentinit: MOV#SFE(CSTACK),SP ;setupstackmain: NOP ;mainprogramMOV.W#WDTPW+WDTHOLD,&WDTCTL;Stopwatchdogtimer DINT ;禁止可屏蔽中断GIE=0MOV.B#0, &P2SEL ;选择P2口为基本I/OMOV.B#0xFF,&P2OUT ;置P2OUT寄存器值为0xFFMOV.B#0xFF, &P2DIR ;选择P2口为输出 MOV.B#0, &P4SEL ;选择P4口为基本I/O,输出 MOV.B#0xFF, &P4DIR BIS.B #BIT1, &P4OUT ;置P4.1为1BIC.B #BIT4, &P1SEL ;P1.4、P1.5选为I/OBIC.B #BIT5, &P1SEL ;BIC.B #BIT4, &P1DIR ;P1.4、P1.5选为输入 BIC.B #BIT5, &P1DIRBIS.B #BIT4, &P1IES ;P1.4选为下降沿触发 BIC.B #BIT5, &P1IES ;P1.5选为上升沿触发BIC.B #BIT4, &P1IFG ;清P1.4,P1.5分中断标志位为0 BIC.B #BIT5, &P1IFG BIS.B #BIT4, &P1IE ;允许P1.4、P1.5分中断 BIS.B #BIT5, &P1IE EINT ;允许可屏蔽中断GIE=1JMP $ ;jumptocurrentlocation'$'(endlessloop)intP1: BIT.B#BIT4,&P1IFG ;中断子程序,判断中断是否由P1.4引起JZx1 ;否则跳转到x1 BIC.B #BIT1, &P4OUT ;中断为P1.4触发,使蜂鸣器报警MOV#0xFFFF,R15 ;延时ww1:DECR15JNZww1BIS.B #BIT1, &P4OUT ;关闭蜂鸣器 BIC.B#BIT4, &P1IFG ;清分中断标志位x1: BIT.B #BIT5, &P1IFG ;检测是否由P1.5引发中断 JZ exit ;否则跳出中断子程 MOV.B #3, R4 ;亮灯次数计数x2: BIC.B #BIT0, &P2OUT ;点亮LED1MOV#0xFFFF,R14 ;延时ww2:DECR14JNZww2 BIS.B #BIT0, &P2OUT ;熄灭LED1ww3:MOV#0xFFFF,R6 ;延时DECR6JNZww3 DEC R4 JNZ x2 BIC.B#BIT5, &P1IFG ;清分中断标志位exit: RETIEND思考:如果用长导线将按键KEY5、KEY6分别接在P2.2和P2.3上,如何修改程序一实现上述中断响应?可否将按键KYE5、KEY6分别连接在P4.2和P4.3上来完成任务2?为什么/答:(1)、更改KEY5、KEY6连接后即为更改了中断源,需要在程序中与P1中断源有关的设置均改为P2相对应的中断源即可实现上述中断响应。 (2)、将按键KYE5、KEY6分别连接在P4.2和P4.3上无法实现中断响应,因为P4口不属于MSP430F149的中断源,无法利用其触发中断。三、实验选作任务1、学习C语言中断程序的设计方法。 通过在单片机上编译运行课程提供的C语言中断程序,学习C语言实现中断的过程。说明示例程序执行的流程和实现的功能。并思考,如果程序中没有#pragmavector=PORT1_VECTOR会出现什么结果?为什么?答:示例程序实现了通过P1.1下降沿触发中断,在中断子程序中实现P2口的输出量取反。 如果程序中缺少了这一句,则程序无法进入中断,因为没有设置中断向量。2、通过C语言编程实现任务2中的同样功能硬件连线如任务2,用C语言编程如下:#include"io430.h"#include"intrinsics.h"intmain(void){WDTCTL=WDTPW+WDTHOLD;__disable_interrupt(); //_DINT();P2SEL=0; //置P2为基本I/O功能P2OUT=0xFF; //置P2输出初值P2DIR=0xFF;P4SEL=0; //相应寄存器的初始化P4DIR=0xFF;P4OUT_bit.P4OUT_1=1; P1SEL_bit.P1SEL_4=0;P1SEL_bit.P1SEL_5=0; P1DIR_bit.P1DIR_4=0;P1DIR_bit.P1DIR_5=0;P1IES_bit.P1IES_4=1;P1IES_bit.P1IES_5=0;P1IFG_bit.P1IFG_4=0;P1IFG_bit.P1IFG_5=0;P1IE_bit.P1IE_4=1;P1IE_bit.P1IE_5=1;__enable_interrupt(); //_EINT();while(1){};//死循环}#pragmavector=PORT1_VECTOR //设置中断向量值 __interruptvoidport_int(void) //中断子程序{inti,j;if(P1IFG_bit.P1IFG_4==1){ P4OUT_bit.P4OUT_1=0;for(j=0;j<0xFFFF;j++);P4OUT_bit.P4OUT_1=1; P1IFG_bit.P1IFG_4=0;}if(P1IFG_bit.P1IFG_5==1){ for(i=0;i<3;i++) { P2OUT_bit.P2OUT_0=0; for(j=0;j<0xFFFF;j++); P2OUT_bit.P2OUT_0=1;for(j=0;j<0xFFFF;j++); }P1IFG_bit.P1IFG_5=0;}}四、实验心得 通过这次中断实验,我对于中断在单片机中的实现过程有了一个比较清晰的认识,也深入的理解了中断和CALL子程的区别。中断是由硬件实现的,不需要软件编程实现的一种操作,利用中断可以实现很多监测任务。 在编写和运行中断程序中,我再一次认识到了合理使用断点进行程序调试的方法。利用在中断子程序入口处设置断点,可以判断程序是否可以进入中断子程序。这种方法非常有效。实验7基本时钟模块和定时功能姓名:王悦昶学号:2010010439实验班号:周四第二节机器号:16一、实验目的 1、了解MSP430基本时钟模块的工作原理,掌握其控制方法; 2、了解利用时钟信号和中断技术实现定时功能的方法; 3、(选作)巩固C语言程序的设计方法二、实验基本任务1、数字示波器的使用 (1)、测量示波器自带的周期性方波信号,掌握测量周期,频率和峰峰值的方法; (2)、用孔孔导线将实验板的地信号与示波器的地信号相连,测量实验板上的5V、3.3V电源信号是否正常。答:(1)、通过示波器测量有示波器自带方波信号有: VPP=3.10V;f=1KHZ 这与示波器上标定的方波信号一致。 (2)、测实验板上5V信号有:VPP=5.20V;测实验板上3.3V信号有:VPP=3.32V此测量值说明实验板上电源信号正常。2掌握基本时钟模块的编程 编程控制基本模块,使得ACLK=4096HZ,并通过P5.6或P2.0输出该ACLK。领用示波器观察输出的ACLK时钟信号,测量其频率思考:(1)、可否编程在引脚P5.2上输出ACLK?为什么? (2)、上电复位后CPU的工作频率MCLK的频率值是多少?是8MHZ吗?编程在P5.4上输出MCLK,用示波器测量该频率值,并记录该频率值。硬件电路图如下:编程实现上述两个时钟的输出任务有:#include"msp430.h"NAME main PUBLIC mainORG 0FFFEhDC16 init

RSEG CSTACK RSEG CODE init:MOV #SFE(CSTACK),SPmain:NOP MOV.W #WDTPW+WDTHOLD,&WDTCTLBIS.B#DIVA_3,&BCSCTL1;设置ACLK为8分频BIS.B#BIT6,&P5SEL;设置P5.6为ACLK输出功能BIS.B#BIT6,&P5DIR ;设置P5.6口为输出BIS.B#BIT4,&P5SEL;设置P5.4为ACLK输出功能BIS.B#BIT4,&P5DIR;设置P5.4口为输出JMP$END答:(1)不能编程在引脚P5.2上输出ACLK,因为P5.2口并不具有输出时钟信号的功能通过示波器测量可以得到分频后的ACLK频率f=4098HZ(2)上电复位后,CPU的时钟MCLK频率值为f=746.3KHZ,不为8MHZ,因为在默认状态下,CPU主时钟选用自带数字震荡时钟,并未选用高频晶振。3、利用输出的时钟信号做中断源,实现定时功能 将任务2中P5.6输出的4096HZ的ACLK时钟信号,作为P1.0的中断申请信号,在中断子程序中设置一个记数变量,计数中断子程序被执行的次数来判断是否到一秒,利用该定时功能,将8个发光二级管设计成一个秒表,显示秒值。硬件电路图如下:编程如下#include"msp430.h"NAMEmainPUBLICmainORG0FFFEhDC16initORG0FFE0h+PORT1_VECTORDC16intP1RSEGCSTACKRSEGCODEinit:MOV#SFE(CSTACK),SPmain:NOPMOV.W#WDTPW+WDTHOLD,&WDTCTLDINTMOV.W #0, R4 ;初始化R4,R5寄存器值为0MOV.B #0x00,R5MOV.B #0x00, R8 ;实现计数10秒BIC.B #BIT1, &P4SEL ;用P4.1控制蜂鸣器BIS.B #BIT1, &P4DIRBIS.B #BIT1, &P4OUTBIS.B #DIVA_3,&BCSCTL1 ;设置ACLK为8分频BIS.B #BIT6,&P5SEL ;设置P5.6口输出ACLK时钟BIS.B #BIT6,&P5DIRMOV.B #0,&P2SEL ;设置P2口为基本I/O口MOV.B #0xFF,&P2DIR ;方向选择为输出MOV.B #0xFF,&P2OUT ;初值置为1BIC.B #BIT0,&P1SEL ;设置P1.0口相关中断寄存器BIC.B #BIT0,&P1DIRBIS.B #BIT0,&P1IES ;设置为下降沿触发BIC.B #BIT0,&P1IFGBIS.B #BIT0,&P1IEEINTagain: BIT.B#BIT0,R7 ;检测是否记时1秒JZ againMOV.B R5,R6INV.B R6MOV.B R6,&P2OUT ;输出P2OUT显示码BIC.B #BIT0,R7CMP #0x0A,R8 ;检测是否记时10秒JNC x2 ;未到10秒,跳转x2BIC.B #BIT1,&P4OUT ;到10秒,清P4.1为0CALL #delay ;延时BIS.B #BIT1,&P4OUT ;置P4.1为1MOV.B #0x00,R8 ;开始记下一个10秒X2:CMP #0xFF,R5 ;判断是否8个LED灯全亮JNC x1MOV.B #0x00,R5 ;若全亮则重新开始亮灯x1: JMP again ;死循环intP1: BIT.B #BIT0, &P1IFG ;中断子程序,检测是否P1.0触发中断 JZ exit INC R4 ;用R4记录时钟个数CMP #4096,R4 ;时钟个数是否为4096个JNC exit ;若没达到,则跳转exitINC R5 ;若达到,则R5自加一次INC R8 ;每过一秒,R8自加一次BIS.B #BIT0,R7 ;置R7第0位为1,作为1秒的标志MOV.W #0,R4 ;清零R4exit: BIC.B #BIT0,&P1IFG ;清分中断标志位RETIdelay:MOV#0FFFFh,R14 ;延时ww: DECR14JNZwwRETEND在编程中,将点亮LED灯的相关程序放到主程序中执行,可以简化中断子程序,使得程序的结构更加合理。思考:如果要隔10秒蜂鸣器响一声,如何在任务3的基础上编程实现。答:对程序所做修改如上述程序中的加亮部分,主要添加了10秒计数部分和控制蜂鸣器部分。硬件电路图如下:三、实验已完成选作任务1、用C语言编程实现任务2功能C语言编程如下:#include"io430.h"intmain(void){WDTCTL=WDTPW+WDTHOLD;BCSCTL1_bit.DIVA0=1; //设置ACLK为8分频BCSCTL1_bit.DIVA1=1;P5SEL_bit.P5SEL_6=1; //设置P5.6输出ACLKP5SEL_bit.P5SEL_4=1;P5DIR_bit.P5DIR_6=1; //设置P5.4输出MCLKP5DIR_bit.P5DIR_4=1;while(1){}; //死循环}硬件电路图同基本任务1.2、掌握基本时钟模块及其相关控制寄存器基本时钟模块控制记录表DCOCT160h(复位值)BCSCTL20h(复位值)8EhBCSCTL184h(复位值)87h30hACLKP2.0来自哪个时钟,几分频LFXT1CLK,1LFXT1CLK,1LFXT1CLK,8测量值(KHZ)32.8932.894.098MCLKP5.4来自哪个时钟,几分频DCLCLK,1DCLCLK,1XT2,1测量值(KHZ)746.329768000SMCLKP1.4来自哪个时钟,几分频DCLCLK,1DCLCLK,1XT2,8测量值(KHZ)746.329761000实现该功能所编程序如下:#include"msp430.h" ;#definecontrolledincludefileNAME main ;modulenamePUBLIC

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论