0,1控制小灯亮灭
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验名称:0/1控制小灯亮灭
一.实验目的
通过该实验实习,进一步熟悉KDS嵌入式开发系统环境和C语言以及调试方式;加强串口通信(SCI)基本原理及编程原理;理解课本中的程序代码;分别运用查询方式、中断方式实现通信。
二.实验内容
通过串口调试器,发送0/1控制小灯的亮灭
三.实验过程
1.开发板使用串口
2.main.c函数
//说明见工程文件夹下的Doc文件夹内Readme.txt文件
//========================================================= #include "includes.h" //包含总头文件
int main(void)
{
//1. 声明主函数使用的变量
uint_32 mRuncount; //主循环计数器
//2. 关总中断
DISABLE_INTERRUPTS;
//3. 初始化外设模块
light_init(RUN_LIGHT_BLUE, LIGHT_OFF); //蓝灯初始化
light_init(RUN_LIGHT_RED, LIGHT_OFF); //蓝灯初始化
uart_init(UART_0,MCGIRCLK, 9600); //串口时钟MCGIRCLK(4000Khz)
uart_init (UART_1,BUSCLK, 9600); //串口1、2使用总线时钟24000Khz
uart_init (UART_2,BUSCLK, 9600); //波特率使用9600
uart_send_string(UART_0, "Hello Uart_0!\r\n"); //串口发送初始化提示
uart_send_string(UART_1, "Hello Uart_1!\r\n");
uart_send_string(UART_2, "Hello Uart_2!\r\n");//只插了串口2,所以在串口调试器中只有Hello Uart_2!
//4. 给有关变量赋初值
mRuncount=0; //主循环计数器
//5. 使能模块中断
uart_enable_re_int(UART_0); //使能串口0接收中断
uart_enable_re_int(UART_1); //使能串口1接收中断
uart_enable_re_int(UART_2); //使能串口2接收中断
//6. 开总中断
ENABLE_INTERRUPTS;
//进入主循环
//主循环开始============================================================= for(;;)
{
//运行指示灯(RUN_LIGHT)闪烁---------------------------------------------
mRuncount++; //主循环次数计数器+1
if (mRuncount >= RUN_COUNTER_MAX) //主循环次数计数器大于设定的宏常数
{
mRuncount=0; //主循环次数计数器清零
//light_change(RUN_LIGHT_BLUE); //蓝色运行指示灯(RUN_LIGHT_BLUE)状态变化
}
//以下加入用户程序-------------------------------------------------------- }//主循环end_for
//主循环结束============================================================= =====
}
3.isr.c函数中的串口2接受中断服务例程
void isr_uart2_re(void)//函数内部实现串口2接受字节,并返回字节
{
uint_8 ch;//将获取的一个字节存于ch中
uint_8 flag = 1;//判断是否成功接受一个字节
DISABLE_INTERRUPTS;//关总中断
ch = uart_re1(UART_2, &flag);//串口2接受一个字节,成功接受flag置0并将字节存放到ch中;失败flag置1,ch中存放0xFF
if (0 == flag)
{
uart_send1(UART_2, ch);//MCU通过串口2发送一个字节,
if('0' == ch)
light_control(RUN_LIGHT_BLUE,LIGHT_ON);
if('1' == ch)
light_control(RUN_LIGHT_BLUE,LIGHT_OFF);
}
ENABLE_INTERRUPTS;//开总中断
}