- 1、本文档共7页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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; imsec; i++)
for (j=0; j535; j++);
}
使用跑空指令的方式进行延时,这种方式占用cpu资源,在之后的实验中可以使用定时器进行改进。
实验流程
图8 . 实验流程图
实验现象
按键S1, LED1和LED2交替闪烁
左边图是刚捎入实验代码时的现象,右图是按下S1后的现象。可以看到,LED1与LED2在交替闪烁。
遇到问题
该实验较简单,没有遇到什么问题
实验总结
这次实验在第零次实验的基础上,增加一了一个LED及一个按键,在配置GPIO口的时候一切都挺顺利, 在实现中断控制的时候多花了一点时间,还是来自于对编写
文档评论(0)