77范文网 - 专业文章范例文档资料分享平台

通信新技术综合训练报告

来源:网络收集 时间:2018-11-12 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

实验五 DIO中断实验

一、实验内容

1. 分别为 Coordinator 和 EndDevice 设计一个程序,运用 DIO 中断的方式分别用按键控制切换对方对应 LED 亮/灭状态。如 Coordinator 的 SW3 控制 EndDevice 的 LED3,EndDevice 的SW0 控制 Coordinator 的 LED0 等等。

2. 分别为 Coordinator 和 EndDevice 设计一个程序,运用 DIO 中断的方式分别用 DIO4、DIO5、DIO6、DIO7 切换对方相应 LED 亮/灭状态。如 Coordinator 的 DIO4 控制 EndDevice 的 LED0,EndDevice 的 DIO5 控制 Coordinator 的 LED1 等等。

二、实验原理

1. 介绍几个常用函数:

(1) vAHI_DioSetDirection( )函数

该函数用来设置DIO引脚的方向(输入或输出),

(2)vAHI_DioInterruptEdge( )函数

当某个 DIO 作为输入引脚时,则用该函数设置中断产生时是采用上升沿还是下降沿触 发。该函数的原型如下:

void vAHI_DIOInterruptEdge ( uint32 u32Rising, uint32 u32Falling ); u32Rising 对应为1表示文上升沿触发中断,其中21—31没有用 u32Falling 对应为1 表示下降沿触发中断,其中21—31没有用

注:该函数仅将 u32Rising 中为 1 的位对应的引脚设置为上升沿触发中断,u32Falling 中为

的位对应的引脚设置为下降沿触发中断,没有涉及到的引脚保持它原来的状态。如果某一个 引脚在 u32Rising 和 u32Falling 中都进行了设置,则默认为上升沿触发。该函数仅对设置为 输入的 DIO 引脚有效。如果一个 DIO 引脚已安排给另一个外设且该外设已启用,则该函数 对该 DIO 引脚不产生影响。

(3) vAHI_DioInterruptEnable( ) 函数

当某个 DIO 作为输入引脚时,则该函数用来设置接收或屏蔽该引脚发来的中断,及使 能/屏蔽中断。该函数的原型如下:

void vAHI_DIOInterruptEnable (uint32 u32Enable, uint32 u32Disable);

注:该函数仅使能 u32Enable 中为 1 的位对应的引脚中断,屏蔽 u32Disable 中为 1 的位对应 的 引脚中断 ,没有涉 及到的引 脚保持它 原来的状 态。如 果某一个 引脚在 u32Enable 和 u32Disable 中都进行了设置,则默认为屏蔽中断。该函数仅对设置为输入的 DIO 引脚有效。 如果一个 DIO 引脚已安排给另一个外设且该外设已启用,则对该 DIO 引脚不产生影响。DIO 引脚中断可用来唤醒处于睡眠模式的设备。 (4)JZA_vPeripheralEvent( )函数

该函数在中断上下文时调用,即微处理器在执行中断处理程序的过程中调用,用于处理硬件中断。 该函数的原型为:

PUBLIC void JZA_vPeripheralEvent(uint32 u32Device, uint32 u32ItemBitmap);

16

2. DIO中断实验,主要是采用使用DIO口中断实现,当有按键按下时,对应的DIO口就会有电平的变换。当有下降沿时就会触发中断。就会响应中断响应函数JZA_vPeripheralEvent( )函数。发送数据,EngDevice接受数据点亮对应LED灯。同样EngDevice也是一样,又中断就响应中断函数。Coordinator就收数据处理点亮LED灯。除外还有去抖动函数,

三、软件设计

1. 程序流程图:

冷启动初始化函数冷启动初始化函数Coordinator建网N EndDevice建网N 建 网?等待 建 网?等待Y改变灯状态表示建成Y改变灯状态表示建成N节点加入?Y设置Coordinator的中断DIO9,10,11,20N等待中断发生?Y调用Coordinator发送数据函数Coordinator接受数据处理 点亮对应的LED灯等待中断发生?节点加入?YN设置EndDevice的中断DIO9,10,11,20调用EndDevice发送数据函数EndDevice接受数据处理 点亮对应的LED灯

此处用到DIO口中断,当网络建成,并节点也加入;扫描是否有DIO9,10,11,20 有中断,有发送协议数据。当EndDevice接受端接受到协议数据点亮对应的LED灯。同样 EndDevice有中断产生,也发数据;此时Coordinator接受数据点亮对应的LED灯。 2.

第二题原理与第一题一样,只是第一题是通过按键产生DIO口中断,本题采用给对应的DIO口高低电平来产生中断实现。 流程图如下:

17

建网N成功入网Y入网N成功YNN成功YNCoordinator中断DIO4?YEndDevice中断NDIO4?YNDIO5DIO5YYDIO6YDIO7DIO6Y响应对应中断响应对应中断发送数据接收数据控制对应LED灯响应对应中断响应对应中断发送数据接收数据控制对应LED灯DIO7

四、实验结果与分析

1. 实验现象: 按动Coordinator的SW0—SW3,分别点亮EndDevice的LED0—LED3亮,再按动EndDevice的SW0—SW3,分别Coordinator的LED0—LED3亮。再次按下对应的按键,将点亮的LED灯熄灭。

分析:按下按键,松手时就会产生一个下降沿,触发中断。发送数据 ,接受数据的那端就会点亮对应的LED灯;从而实现了题目要求。

2.实验现象:给Coordinator的DIO4口一个电平触发,EndDevice的LED0亮,给EndDevice的DIO4口一个电平触发,Coordinator的LED0亮。Coordinator的DIO5口一个电平触发,EndDevice的LED1亮,给EndDevice的DIO5口一个电平触发,Coordinator的LED1亮。 给Coordinator的DIO6口一个电平触发,EndDevice的LED2亮,给EndDevice的DIO6口一个电平触发,Coordinator的LED2亮。 给Coordinator的DIO7口一个电平触发,EndDevice的LED3亮,给EndDevice的DIO7口一个电平触发,Coordinator的LED3亮。再次给相应DIO口电平触发,对应的LED灭。 分析:Coordinator建网成功,EndDevice节点加入成功后,获得各自的短地址实现相互之间的通信。通过在程序中设置中断函数及相应的DIO口作为中断口,且对LED设定了相应的程序,从而实现了相应的灯的控制。

五、存在问题和解决方法

1. 在进行按键产生中断时,由于按键的不灵敏性,按键按下产生混乱现象,通过查明原因,由于在使用按键时没有加入按键去抖动程序。通过加入去斗程序,效果明显改善。当下降沿来到时LED灯的状态改变。

2、再设计第二程序时,我们要找到对应的DIO口,开始实验效果不正确,经发现有写DIO口上电时呈现的是低电平,所以不能像以前那样通过接地给个下降沿。于是我调用个拉高函数 vAHI_DioSetPullup ( ),将一些引脚拉高,这样通过接地可以产生下降沿。

3.去抖动程序,用源程序发现数据发了两次,后来知道硬件问题,在屏蔽中断发了一次,于是我们采用了以前的按键去抖动程序。

18

实验六 定时器实验

一、实验内容

1. 设计一个程序,运用 Timer1 中断实现流水灯,周期 1 秒。

2. 设计一个程序,初始化 DIO16(LED0)为输入,运用 Timer0 PWM 输出控制 LED0 的亮灭状态,一个周期内亮 2 秒,灭 1 秒。

二、实验原理

1. 三个定时器函数:

(1)vAHI_TimerEnable ( )函数

该函数用来使能指定的定时器,并为该定时器设置参数。

void vAHI_TimerEnable ( uint8 u8Timer,

uint8 u8Prescale, bool_t bIntRiseEnable, bool_t bIntPeriodEnable, bool_t bOutputEnable);

各参数的具体含义描述如下:

注:u8Timer:定时器的标识,在JN5121/JN513x微控制器中有两个应用级定时器/计数器, 用E_AHI_TIMER_0和E_AHI_TIMER_1分别标识Time0和Timer1。

u8Prescale:时钟的预分频值,它的最大值为16。分频后的频率为原频率的1/2 。 bIntRiseEnable:该参数值为TRUE时,当定时器的输出变为高电平时使能中断。 bIntPeriodEnable:该参数值为TRUE时,当定时器的一个周期到且输出变为低电平时, 使能中断。

bOutputEnable:该参数值为TRUE时,使定时器的输出出现在与PWM相关的输出引脚上。 Timer0 使用DIO8-10引脚,Timer1使用DIO11-13引脚

(2) vAHI_TimerClockSelect ( )函数

选择内部或外部时钟,当使用内部时钟时要设置输出门。该函数的原型如下:

void vAHI_TimerClockSelect( uint8 u8Timer, bool_t bExternalClock, bool_t bGateControl);

注:各参数的具体含义描述如下:

u8Timer:定时器的标识,与函数vAHI_TimerEnable )中的用法相同,用E_AHI_TIMER_0 和E_AHI_TIMER_1分别标识Time0和Timer1。

bExternalClock:该参数值为TRUE,表示使用外部时钟;为FALSE,表示使用16MHz 的内部时钟。

bGateControl:该参数值为TRUE时,表示当定时器的门输入是高电平时,打开输出引脚; 为FALSE时,表示当定时器的门输入为低电平时,打开输出引脚。

3)AHI_TimerStartRepeat ( )函数

设置重复定时器。该函数的原型如下:

void vAHI_TimerStartRepeat( uint8 u8Timer, uint16 u16Hi, uint16 u16Lo);

注:各参数的具体含义描述如下:

u8Timer: 定时 器的标 识, 用E_AHI_TIMER_0 和E_AHI_TIMER_1分别标 识Time0和

19

Timer1。

u16Hi:该参数值表示在开始一个定时器之后,在定时器的输出变为高电平之前经历的 时钟周期数。

u16Lo:该参数值表示在开始一个定时器之后,在定时器的输出变为低电平之前经历的 时钟周期数。即定时器有效时间内的时钟周期数。

2. 定时间计算:

T=1/16MHz×2 ×u16Lo,定时周期计算公式 3. 中断响应函数:JZA_vPeripheralEvent( )

定时器定时时间到时,就会响应定时器中断响应函数:JZA_vPeripheralEvent( )函数。在 Jennic ZigBee 协议栈处理硬件中断时调用,定时器中断也属于外部中断,

三、软件设计

1.

开始建网N建成Y按SW0启动定时按SW1停止定时器响应中断Y控制LED亮延迟时间1s

流程图分析:建网入网成功后,等待按键SW0 来启动定时器,当按下SW0时,定时器开始定时,定时时间为1S,一秒到响应定时器中断响应函数,控制LED的流水灯(程序前面相似);在按下SW1时,关闭定时器,从新开启时,接着上次LED的地方顺序执行。 2.

20

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库通信新技术综合训练报告在线全文阅读。

通信新技术综合训练报告.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/267963.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: