您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业文化 > 东南大学MCU第一二次实验
东南大学自动化学院实验报告课程名称:MCU技术及课程设计第一次实验实验一:IO实验—LED流水灯实验二:IO实验—按键输入中断与查询院(系):自动化专业:自动化姓名:学号:实验室:实验组别:同组人员:实验时间:2015年4月30日评定成绩:审阅教师:实验一:IO实验—LED流水灯一、实验目的与要求1.实验目的(1)了解MSP430F6638IO口的基本功能。(2)熟悉IO口的基本操作。2.实验要求编写程序,调用头文件msp430f6638.h,使开发板上3个LED依次点亮,采用软件延时方式(约0.5~1s左右,人眼能够分辨即可)使得每个灯轮流点亮一段时间,实现流水灯的效果。二、实验原理(1)开发板上的3个LED灯和IO口对应关系如图1-1所示。图1-1实验箱LED引脚连接图其中LED_YELLOW---P4.6、LED_GREEN---P4.5、LED_RED---P4.4,具体见图1-2。图1-2开发板上LED的电路和实物图完成本实验需要用到两个寄存器:PxDIR、PxOUT,P4端口相关寄存器信息如表1-1所示。表1-1P4端口相关寄存器地址信息(1)方向寄存器(PxDIR)该寄存器是一个8位寄存器,寄存器的每一位对应一个IO口引脚。对相应位置0,表示该IO口用作输入。对相应位置1,表示该IO口用作输出。(2)输出数据寄存器(PxOUT)该寄存器是一个8位寄存器,寄存器的每一位对应一个IO口引脚。对相应位置0,对应IO口输出低电平。对相应位置1,对应IO口输出高电平。位基本操作见表1-2所示。表1-2位基本操作功能操作例子置1按位或P1OUT|=BIT1置0取反后再按位与P1OUT&=~BIT1取反按位异或P1OUT^=BIT1三、实验步骤1.将PC与开发板相连;2.建立CCS工程;3.选择对该工程进行编译链接,生成.out文件。然后选择,将程序下载到实验板中。程序下载完毕之后,可以选择全速运行程序,也可以选择单步调试程序,选择F3查看具体函数。也可以程序下载之后,按下,软件界面恢复到原编辑程序的画面。再按下实验板的复位键,运行程序。四、实验现象三个LED灯依次点亮,形成流水灯效果。五、实验代码#includemsp430f6638.hvoiddelayms(unsignedintc);voidmain(void){WDTCTL=WDTPW|WDTHOLD;//StopwatchdogtimerP4DIR|=BIT4+BIT5+BIT6;P4OUT&=0X8F;while(1){P4OUT|=BIT4;delayms(1000);P4OUT&=0X8F;P4OUT|=BIT5;delayms(1000);P4OUT&=0X8F;P4OUT|=BIT6;P4OUT&=0X8F;delayms(1000);}}voiddelayms(unsignedintc)//loop{unsignedinta;for(;c0;c--)for(a=100;a0;a--){_NOP();}}六、预习思考(1)MSP430F6638共有哪些端口?各端口的用途和功能存在哪些区别?(2)如何采用for循环编写软件延时程序?如何确定大致的软件延时时间?voiddelay_ms(unsignedintms){unsignedinti;unsignedcharj;for(i=0;i<ms;i++){for(j=0;j<200;j++);for(j=0;j<102;j++);}}其中ms是输入参数,如果输入1,就是要求程序延时1ms。j变量是调整程序运行的时间参数。调整j的数值,使1次循环的时间在1ms。将此程序编译通过,然后利用软件仿真,调整时间。两次时间差就是延时函数使用的时间(3)实验箱上LED的驱动方式是什么?答:LCD驱动器。驱动力选择:PxDS(0:低驱动力模式;1:高驱动力模式)七、实验总结在本次实验中,我们熟悉和学习如何使用实验箱和与之相匹配的开发环境CCS,简单了解了MSP430F6638IO口的基本功能并熟悉了IO口的基本操作。实验开始前,我们已经编写好代码,但是在实验进行中还是出现了问题,LED是常亮的,并非实验要求的流水灯形式,经过我们的检查,发现是忘记设置延迟时间的问题,经过调整代码,我们圆满完成了本次实验。实验二:IO实验—按键输入中断与查询一、实验目的与要求1.实验目的在上一个实验中,我们学习了对MSP430F6638IO的操作,来对LED进行控制闪烁,如果我们对LED进行扩展设计,便可以呈现各种各样的灯光美景,构建出一个精彩纷呈的世界。在接下来的这个实验中,我们将为大家介绍手动控制LED闪烁的方法。本实验包含两个小实验,分别通过按键的查询和中断两种方式来控制LED灯的闪烁。2.实验要求查询:当实验箱上按键KEY1按下时,实验平台上的三个LED同时点亮;松开按键的时候,LED灯熄灭。中断:按下实验箱上的按键KEY1,产生一个P1或P2的中断请求(此处可以借用P1或P2任意一个引脚的中断功能,通过手工置位中断标志位来产生中断),在中断服务函数中,同时点亮三个LED灯。松开按键的时候,LED灯熄灭。二、实验原理(1)查询图2-1实验箱上KEY1,KEY2硬件电路图通过图2-1,我们可以知道按键检测的原理:1)当按键没有按下时:DVCC进过两个电阻连接到MCU的IO口,此时MCU相应的IO口电平为高电平。2)当按键按下时:DVCC经过电阻对地导通,此时MCU相应的I/O口电平为低。3)所以,通过检测与key1、key2相连的两个IO口电平状况就可以知道按键有无按下。完成该实验,需要用到3个寄存器:PxIN、PxOUT、PxDIR·输入数据寄存器(PxIN):该寄存器是一个8位寄存器,寄存器的每一位对应一个IO口引脚。该寄存器的值,反应了外部IO口的电平状态。(2)中断开发板上的按键和MCU的IO口对应关系如图2-2所示。P4.2---KEY1P4.3---KEY2图2-2开发板上按键和MCU的IO口对应关系图开发板上三个LED灯和MCU的IO口对应关系如图2-3所示。LED_YELLOW---P4.6、LED_GREEN---P4.5、LED_RED---P4.4图2-3开发板上三个LED灯和MCU的IO口对应关系·端口中断使用中需要注意的地方在msp430f6638的9个GPIO端口P1~P9中,仅仅P1和P2具有中断功能,而P3~P9不具备中断功能。这里按键使用的是P4口的两个引脚,不具有中断,那么如何用中断来实现呢?方法是借用P1或P2的某个引脚中断(例如P2.6)功能来完成,即当查询到按键有按下时,立刻将P2.6的中断标志位置位,从而引起P2.6中断,进入中断服务程序进行处理。另外需要注意:GPIO的中断不会自动清除中断标志位,因此在推出中断服务程序时需要手动清除中断标志位。·中断方式用到了两个新的寄存器:PxIE和PxIFG。PxIE---中断使能寄存器PxIFG---中断标志寄存器·中断函数的写法:在MSP430中,用扩展关键字来__interrupt来表明该函数为中断函数。__interruptvoidport_2(void);语法:interruptvoid函数名()或者Interrupt【中断向量】void函数名()参数:中断函数没有参数。中断函数需要指定中断向量。返回:中断返回一般是void,没有返回值。·中断使用的步骤:1)配置子模块的中断相关的寄存器,比如外部中断的上升沿触发还是下降沿触发,定时中断的计数方式和定时值。2)依模板写中断服务子函数框架,添加中断后要干什么的代码(事件处理函数)。3)使能中断模块的中断,使能总中断。4)一旦中断发生,CPU停下主函数的活,并标记位置。进入中断服务子函数里干活,完事后回到主函数标记位置处继续干活。三、实验步骤1.将PC与开发板相连;2.建立CCS工程;3.选择对该工程进行编译链接,生成.out文件。然后选择,将程序下载到实验板中。程序下载完毕之后,可以选择全速运行程序,也可以选择单步调试程序,选择F3查看具体函数。也可以程序下载之后,按下,软件界面恢复到原编辑程序的画面。再按下实验板的复位键,运行程序。四、实验现象按下按键后三个LED灯亮起,松开按键后灯灭。五、实验代码#includemsp430f6638.h//查询voidmain(void){WDTCTL=WDTPW|WDTHOLD;//StopwatchdogtimerP4REN|=BIT2;P4OUT|=BIT2;P4DIR|=BIT4+BIT5+BIT6;P4OUT&=0X8F;while(1){if(P4IN&BIT2)//没有按下P4OUT&=0X8F;elseP4OUT|=0X70;}}//中断voidmain(void){WDTCTL=WDTPW+WDTHOLD;P4REN|=BIT2;P4OUT|=BIT2;P4DIR|=BIT4+BIT5+BIT6;P4OUT&=0X8F;P1IE=0XFF;P1IFG=0;P2IE=0XFF;P2IFG=0;_EINT();while(1){if((P4IN&BIT2)==0)//按下P1IFG=1;elseP2IFG=1;}}#pragmavector=PORT1_VECTOR__interruptvoidPORT1_ISR(void){P4OUT|=0X70;P1IFG=0;}#pragmavector=PORT2_VECTOR__interruptvoidPORT2_ISR(void){P4OUT&=0X8f;P2IFG=0;}六、预习思考(1)查询和中断两种方式有何区别?答:中断方式是事件触发的,只要有事件产生都会进入中断,并且取得最优运行,因此响应更快,及时。查询方式是在主函数里面不停循环,查询端口状态,明显其弊端在于响应速度,在处理事件多,处理流程复杂,函数嵌套执行的情况下,由于处理不过来容易丢失事件。(2)MSP430F6638有哪些中断源?单源中断和多源中断有何区别?复位中断、可屏蔽和不可屏蔽中断有何区别?单源中断:中断源独占中断向量,中断响应后自动清标志位。多源中断:多个中断源共用一个中断向量,但各自有对应的标志位进行区分。该标志位在响应后不会自动清零,需要用户在中断服务程序中清零。系统复位中断:优先级最高,不可屏蔽中断。可屏蔽中断:来自外设的中断。通过CPU的INTR引脚引入,当中断标志IF=1时允许中断,当IF=0时禁止中断。不可屏蔽中断:不能被总中断使能位控制,但可以被各自的使能位控制,如振荡器失效、外部中断、Flash访问错误等。(3)MSP430F6638的哪些端口具有中断功能?对应的中断使能和中断标志寄存器有哪些?在中断服务程序中中断标志是否需要手动清除?答:GPIO中的P1、P2端口具有中断能力。中断使能寄存器:PxIE,Bit=1,允许中断;Bit=0,禁止中断。中断标志寄存器:PxIFG,Bit=0:没有中断请求;Bit=1:有中断请求。在中断服务程序中中断标志需要手动清除。七、实验总结本次实验主要是在实验一的基础上进一步掌握CCS的应用和对MSP430F6638的掌握。实验较为简单,未出现问题。
本文标题:东南大学MCU第一二次实验
链接地址:https://www.777doc.com/doc-2793218 .html