C语言实现飞思卡尔嵌入式跑马灯通信实验

需积分: 44 3 下载量 53 浏览量 更新于2024-09-10 收藏 1KB TXT 举报
本篇文档是关于飞思卡尔(Freescale)嵌入式系统中实现跑马灯效果的一个C语言程序示例,主要用于教学和实验目的。跑马灯是一种常见的电子显示技术,通过轮流点亮一组LED灯来实现字符或数字的动态显示。在这个实验中,学生将学习如何使用嵌入式系统的SCI(Serial Communications Interface)进行串行通信,并结合定时器中断来控制灯的切换。 1. **预处理指令**: `#include<hidef.h>` 和 `#include"derivative.h"` 分别引入了通用的定义和专用的定义文件,可能包含了编译器特定的宏和函数声明。 2. **硬件配置**: - `BUS_CLOCK` 定义了总线时钟频率为8MHz。 - `BAUD` 定义了波特率,这里是9600bps(位每秒),用于设置串口通信速率。 3. **中断服务函数**: - `INT_SCI()`:设置SCI中断,用于配置SCI通信参数,如波特率、起始位、停止位等。 - `SCI_send()` 和 `SCI_receive()`:分别是发送和接收数据的函数,通过检查标志位来确保数据传输的正确性。 4. **主函数**: - `main()` 是程序的入口点,初始化SCI通信和端口。 - 使用数组 `port[]` 存储了8个不同状态的LED灯代码,循环读取 `SCI.receive()` 的输入数据(假设为ASCII码),减去偏移量0x31(可能对应ASCII码的'!'字符),然后将对应的LED状态写入端口 `PORTB`,完成LED灯的切换。 - `delay()` 函数实现了一个简单的延时,通过计数器减小实现。 5. **中断处理与无限循环**: - `INT_SCI()` 在主函数结束后仍然需要启用,确保SCI中断被处理。 - 通过 `_FEED_COP()` 调用,可能是为了处理系统的时钟同步或者其他循环处理任务。 - `for(;;)` 无限循环使得程序不会退出,除非手动结束或者外部干预。 6. **注意事项**: - 请确保在 `main()` 函数中正确配置中断,防止其他中断干扰程序的执行。 - 跑马灯的效果依赖于实际的 SCI 数据流,如果输入的数据不是连续的 '!' 字符,可能会导致意想不到的显示效果。 通过这个跑马灯程序,学习者能够理解嵌入式系统中的串行通信、中断处理和基本的硬件驱动,这对于理解和应用微控制器技术至关重要。