开始建网N建成Y启动定时器亮2s灭4s响应中断Y控制LED0亮灭产生PWM波将波形引入DIO16
流程图解析:在建网成功后,就启动定时器开始定时,由于用的是Timer0,此时在DIO10脚会产生一个PWM波(高电平时间4s,周期为6s);将次DIO口引脚引入到DIO16脚(LED0)。
四、实验结果与分析
1. 接通电源后,按下SW0 ,LED灯来回闪烁,按下SW1时停止闪烁,从新按下SW0按键时,LED接着停止地方闪烁下去。
分析:程序通过按键SW0来启动定时器的开启,当按下时,定时器开始定时,定时间到时且为低电平时响应中断控制跑马灯闪烁;按下按键SW1时,定时器停止定时,也就不会产生中断,再次按下SW0时,定时器从新打开,LED接着中断的地方闪烁。 2. 接通电源,将DIO10接到DIO16时会观察到LED0会自动闪烁,亮2s,灭4s; 分析:接通通原,DIO10 会产生周期为6s,低电平时间为2s的PWM波,由实验一我们知道LED给低电平时,LED灯亮,每6s到,就想要中断,点亮LED0灯2s,随后灭,等待下次中断的到来。
五、存在问题和解决方法
1.主要遇到的问题是:由于当时想实现定时器周期为6s,采用内部时钟16MHz。开始采用10分频。结果算出个数: 93750.后来发现时间达不到6s,分析发现93750大于65535.因为我们使用的是16位无符号数。最大值为65535.于是我们将分频数改到了11.从新计算等到Lo。可以实现了,
21
实验七 UART实验
一、实验内容
1. 分别为Coordinator和EndDevice设计一个程序:按动EndDevice的不同按钮能够向Coordinator发送不同信息,再由Coordinator经串口转发给PC机,串口调试工具输出窗口能够看到相关信息。
2. 分别为Coordinator和EndDevice设计一个程序:通过PC机串口调试工具经串口发送文本信息给Coordinator,再由其转发给EndDevice,然后在与EndDevice相连的LCD上显示文本信息内容。
二、实验原理 1.常用函数
(1). vAHI_UartEnable( ) 函数
UART 使能指定。函数的原型如下: void vAHI_UartEnable(uint8 u8Uart);
参数u8Uart用来标识UART,其值可以是E_AHI_UART_0或E_AHI_UART_1,前者表示 UART0,后者表示UART1。
(2). vAHI_UartReset( ) 函数
UART 重新设置发送和接收 FIFO 队列。该函数的原型如下:
void vAHI_UartReset( uint8 u8Uart, bool_t bTxReset, bool_t bRxReset); (3). vAHI_UartSetClockDivisor( ) 函数
该函数用来设置 UART 波特率,函数的原型如下:
void vAHI_UartSetClockDivisor( uint8 u8Uart, uint8 u8BaudRate); (4). vAHI_UartSetControl( ) 函数
设置指定的 UART 的各种控制位。该函数的原型如下: void vAHI_UartSetControl( uint8 u8Uart,
bool_t bEvenParity, bool_t bEnableParity, uint8 u8WordLength, bool_t bOneStopBit, bool_t bRtsValue );
(5). vAHI_UartSetInterrupt( ) 函数
使能/屏蔽指定 UART 产生的中断,并且设置接收 FIFO 级别,函数的原型如下: void vAHI_UartSetInterrupt( uint8 u8Uart,
bool_t bEnableModemStatus,
bool_t bEnableRxLineStatus, bool_t bEnableTxFifoEmpty, bool_t bEnableRxData, uint8 u8FifoLevel);
(6). u8AHI_UartReadLineStatus( ) 函数
获得指定 UART 的线状态信息,该函数的原型如下: uint8 u8AHI_UartReadLineStatus ( uint8 u8Uart);
22
参数 u8Uart 用来标识 UART。 (7). vAHI_UartWriteData( ) 函数
UART 往发送 FIFO 队列中放一个字节。函数的原型如下: void vAHI_UartWriteData ( uint8 u8Uart, uint8 u8Data );
其中 u8Uart 用来标识 UART,u8Data 是指往发送 FIFO 队列中放的字节。 (8). vUART_printInit ( ) 函数
该函数用来初始化串口 0,函数的原型如下:
PUBLIC void vUART_printInit(void);
调用该函数需要在工程文件中加入头文件Printf.h,例如: #include
使用vPrintf( )函数往串口 0 发送数据,函数的原型如下:
PUBLIC void vPrintf(const char *fmt, ...);
(10). UART 接收字符中断响应处理
JZA_vPeripheralEvent( )函数在 Jennic ZigBee 协议栈处理硬件中断时调用。
三、软件设计
1. 程序图:
开始开始初始化LEDCoordinator建网成功Y入网N成功N初始化LEDEndDevice入网成功NSW0?Y发data0SW1?Y发data1NSW2?YSW3?发data2发data3Coordinator接受数据向PC串口写数据
2.
23
开始开始初始化LEDCoordinator建网成功PC发送数据EndDevice接受数据LCD显示Coordinator发送数据N初始化LEDEndDevice入网成功读取串口数据数据达到60打包发送NCoordinator发送数据启动Timer160?Y发送数据响应串口中断Timer中断?发送数据设置标识符关闭定时器
EndDevice接受数据处理LCD清屏将数据存在数组NLCD显示Ni 四、实验结果与分析 1. 分别按动按键SW0~SW3,PC机的串口调试工具分别输出窗口上显示:“江苏技术师范学院”,“08通信2W 王鑫”,“08通信1W 解亚军”,“专业课程设计”。 分析:分别按动不同的按钮,EndDevice会发送不同的信息,Coordinator接受信息在PC机串口显示。 2. 在PC机上发送测试TXT1和测试TXT2文本,分别在液晶上显示。液晶每屏显示60字符,再换屏显示剩余字符直到文本结束。 分析:设定串口0为中断串口,在串口中断响应函数程序中写入相应的控制程序,从而实现了如上的实验现象。 24 五、存在问题和解决方法 1. 问题一:在TXT测试文本时,开始液晶使显示的两页内容并不是想连的内容。后来发现原因是:发送字符80 大于液晶的字符64的个数;因此不相连,改变发送个数,可以看到相连的内容。 2 .问题二 :在液晶上显示乱码,经讨论我们知道,显示汉字时,汉字的编码是16位,必须把这代码放入指定内容是,才可以实现出我们所要的内容。 解决方法:我们发现当有偶数个字符时,不会发生错误,当为奇数个时,就会产生乱码。于是我们加个变量来统计字符的个数,应为字符代码 < 80H,将标识符 m 加1.判断m的奇偶来处理,如果为偶数,不处理写入影子内存中。当为奇数时,将汉字的代码写入写个开始,将标志清0. 3.问题三:解决问题二时,液晶显示带有特殊符号;经老师分析那是Enter的字符,于是找到相应的字符0x0D和0x0A在字符代码 < 80H中判断,将对应的字符清空。 4.在发送大得测试文件时,会有数据丢失的情况,有待解决。 25 百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库通信新技术综合训练报告(5)在线全文阅读。
相关推荐: