感知层编程实验-实验一_GPIO及外部中断 .docxVIP

感知层编程实验-实验一_GPIO及外部中断 .docx

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
南昌航空大学实验报告 二〇二一年10月12日 课程名称: 感知层编程实验 实验名称: GPIO及外部中断 学号: 姓名: 张闰美 同组人:_____________ 指导老师评定: 签名:______________________ 实验目的 加深和巩固学生对于中断、GPIO等概念的理解 学生通过本实验了解和掌握GPIO及中断编程的整个过程 提高学生的上机和编程过程中处理具体问题的能力 实验要求 实验要求自己独立的完成; 编写和调试过程中出现的问题要做好记录,并事后总结到报告中 实验程序调试完成后, 用给定的平台进行测试,由老师检查测试结果,并给予相应的成绩。 实验电路图及寄存器 (1)实验相关电路图 图1. D1以及D2相应引脚 图2. S1相应引脚 由于发光二级管单向导电特性,即只有在正向电压(二极管的正极接正,负极接负)下才能导通发光。 P1.0 引脚输出低电平 D1 亮,P1.0 引脚输出亮电平 D1 熄灭。P1.1同理。当按下按键会产生中断,P0IFG 寄存器为中断状态标志。 (2)实验相关寄存器 图3. P0口与P1口所在地址与位数 图4. P0口与P1口功能选择寄存器 图5.P0口与P1口方向寄存器 图6. P0口与P1口输入模式寄存器 实验内容 编程实现按键控制LED1和LED2交替闪烁,掌握通用 I/O端口中断处理方法。 按照表格寄存器的内容,对 P1.0 和P1.1口进行配置,当 P1.0 输出低电平时 D1 被点亮。当 P1.1输出低电平时 D2 被点亮。 (1)S1 按下时 P0.1 产生外部中断从而控制 LED11与LED2的亮灭所以配置如下: //默认为通用io不用设置P1SEL &=~0x03; P1DIR |= 0x03; //P1.0、P1.1 定义为输出 LED1=1; LED2=1;//使所有 LED 灯默认为熄灭状态 (2)按键 S1 配置如下:? P0IEN |= 0x02; // P0.1 设置为中断方式 1->中断使能 PICTL |= 0x01; //下降沿触发 ,0是上升沿触发 IEN1 |= 0x20; //允许 P0 口中断,第五位中断使能1,中断禁止0 P0IFG = 0x00; //初始化中断标志位 EA = 1; //打开总中断 在次实验中按键使用的是中断方式,利用下降沿进行触发。 (3)中断函数: 实验的关键在于中断函数的书写,虽然之前在51单片机中也使用过中断,但是当时使用的是汇编语言。 #pragma vector = P0INT_VECTOR __interrupt void P0_ISR(void) { if(P0IFG > 0) //按键中断 { DelayMS(10); //延时去抖 if(P0IFG > 0) //按键中断 { KeyValue = 1; //产生中断保存中断状态 } } P0IFG = 0; //清中断标志 P0IF = 0; //清端口 0 中断标志 } 常用中断源: 图7. 常用中断向量 中断向量格式: 在每一个中断服务函数之前,都要加上一句起始语句: #pragma vector=<中断向量> <中断向量>表示接下来要写的中断服务函数是为那个中断源服务的,该语句有两种写法: ?? #pragma vector = 0x7B 或者? #pragma vector = P1INT_VECTOR ?? ?? ?? ?? 前者是中断向量的入口地址,后者是头文件“ioCC2530.h”中的宏定义。 _ _interrupt 关键字表示该函数是一个中断服务函数,<函数名>可以自定义,函数体不能带有参数,也不能有返回值。 (4)延时函数: void DelayMS(uint msec) //以毫秒为单位延时,系统时钟不配置时默认为 16M { uint i,j; for (i=0; i<msec; i++) for (j=0; j<535; j++); } 使用跑空指令的方式进行延时,这种方式占用cpu资源,在之后的实验中可以使用定时器进行改进。 实验流程 图8 . 实验流程图 实验现象 按键S1, LED1和LED2交替闪烁 左边图是刚捎入实验代码时的现象,右图是按下S1后的现象。可以看到,LED1与LED2在交替闪烁。 遇到问题 该实验较简单,没有遇到什么问题 实验总结 这次实验在第零次实验的基础上,增加一了一个LED及一个按键,在配置GPIO口的时候一切都挺顺利, 在实现中断控制的时候多花了一

文档评论(0)

131****7710 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档