基于RTX51 的单片机软件设计
时间:11-28
来源:互联网
点击:
3 应用实例
以下给出RTX51在单片机控制的GPS接收板上的应用。
(1)系统硬件组成
单片机W77E58,快速8051内核、32KB ROM、1KB的XDATA RAM,符合使用RTX51的硬件要求;键盘、GPS定位模块、液晶显示模块。
(2)系统软件构成
软件运行环境KEIL uVision2 6.20集成开发环境加上RTX51完成版。任务KEY-BOARD,监测键盘的情况,如果有按键按下,把按键的编码发更新到邮箱1,外部中断1等待接收 GPS数据,并把数据存储起来,向DISPLAY任务发出信号。任务DISPLAY根据接收到的不同的信号和消息,进行处理。任务SEND-OUT,把接收到的数据进行处理,并发送出去。任务VOICE进行语音输出。
系统硬件、软件结构如图2所示。
下面给出简写的源程序:
#include<RTX51.h> //包含RTX51头文件
#define DISPLAY 0
#define SEND_OUT1
#define KEY_BOARD2
#define VOICE3
void main(void)
{ init system(); //系统初始化
os start system(DISPLAY); //启动RTX51
}
void task0(void)_task_DISPLAY
{ os_set_slice(1000); //设置时间片大小
os_enable_isr(0); //允许外部中断0
os_creat_task(SEND_OUT); //启动SEND_OUT任务
os_creat_task(VOICE); //启动VOICE任务
for(;;){
switch(os_wait(K_SIG+K_MBX+1,255,&keyboard))//等待接收信号和键盘消息,分类处理
{display1();break;
case EVENT_MBOX;//当从邮箱接收到数据的时候switch(keyboard)
{ case ‘1‘;
…
os_send_signal(SEND_OUT); //向任务SEND_OUT发送信号
…
os_send_signal(VOICE);} //向任务VOICE发送信号
…;}
…;}
}
void task1(void)_task_SEND_OUT //处理发送数据任务
{while(1)
{ os_wait(K_SIG,255,0) //等待信号
operation_send();
}
void task3(void)_task_VOICE
{while(1){
os_wait_signal(K_SIG,255,0); //等待语音处理信号
voice();}
}
void interrupt(void)interrupt 2 using 1
{ read_gps_data(p_gps_data); //接收数据
isr_send_signal(DISPLAY); //向DISPLAY任务发信号
}
#pragma REGISTERBANK(2) //使用寄存器组2
void task2(void)_task_KEYBOARSD_priority_3//设置为快速任务
{ os_attach_interrupt(0); //绑定任务和外部中断0
while(1){
os_wait(K_INT,255,0); //等待中断的发生
KEY=iic_read_keyboard();
os_send_message(1,KEY,0);}//将键盘编码发送到邮箱1
}
4 结论
通过实践我们可以发现,使用RTX51开发单片机程序更加方便了。尤其是较大的程序,避免了自己写消息循环等繁琐工作,效率明显增加了。在硬件资源足够的情况下,效果更加明显。
作者: 刘明路, 王亮生, 李世煜 来源:《单片机与嵌入式系统应用》2002年 第07期
以下给出RTX51在单片机控制的GPS接收板上的应用。
(1)系统硬件组成
单片机W77E58,快速8051内核、32KB ROM、1KB的XDATA RAM,符合使用RTX51的硬件要求;键盘、GPS定位模块、液晶显示模块。
(2)系统软件构成
软件运行环境KEIL uVision2 6.20集成开发环境加上RTX51完成版。任务KEY-BOARD,监测键盘的情况,如果有按键按下,把按键的编码发更新到邮箱1,外部中断1等待接收 GPS数据,并把数据存储起来,向DISPLAY任务发出信号。任务DISPLAY根据接收到的不同的信号和消息,进行处理。任务SEND-OUT,把接收到的数据进行处理,并发送出去。任务VOICE进行语音输出。
系统硬件、软件结构如图2所示。
下面给出简写的源程序:
#include<RTX51.h> //包含RTX51头文件
#define DISPLAY 0
#define SEND_OUT1
#define KEY_BOARD2
#define VOICE3
void main(void)
{ init system(); //系统初始化
os start system(DISPLAY); //启动RTX51
}
void task0(void)_task_DISPLAY
{ os_set_slice(1000); //设置时间片大小
os_enable_isr(0); //允许外部中断0
os_creat_task(SEND_OUT); //启动SEND_OUT任务
os_creat_task(VOICE); //启动VOICE任务
for(;;){
switch(os_wait(K_SIG+K_MBX+1,255,&keyboard))//等待接收信号和键盘消息,分类处理
{display1();break;
case EVENT_MBOX;//当从邮箱接收到数据的时候switch(keyboard)
{ case ‘1‘;
…
os_send_signal(SEND_OUT); //向任务SEND_OUT发送信号
…
os_send_signal(VOICE);} //向任务VOICE发送信号
…;}
…;}
}
void task1(void)_task_SEND_OUT //处理发送数据任务
{while(1)
{ os_wait(K_SIG,255,0) //等待信号
operation_send();
}
void task3(void)_task_VOICE
{while(1){
os_wait_signal(K_SIG,255,0); //等待语音处理信号
voice();}
}
void interrupt(void)interrupt 2 using 1
{ read_gps_data(p_gps_data); //接收数据
isr_send_signal(DISPLAY); //向DISPLAY任务发信号
}
#pragma REGISTERBANK(2) //使用寄存器组2
void task2(void)_task_KEYBOARSD_priority_3//设置为快速任务
{ os_attach_interrupt(0); //绑定任务和外部中断0
while(1){
os_wait(K_INT,255,0); //等待中断的发生
KEY=iic_read_keyboard();
os_send_message(1,KEY,0);}//将键盘编码发送到邮箱1
}
4 结论
通过实践我们可以发现,使用RTX51开发单片机程序更加方便了。尤其是较大的程序,避免了自己写消息循环等繁琐工作,效率明显增加了。在硬件资源足够的情况下,效果更加明显。
作者: 刘明路, 王亮生, 李世煜 来源:《单片机与嵌入式系统应用》2002年 第07期
单片机 C语言 Keil 51单片机 GPS 嵌入式 相关文章:
- 单片机智能频率信号装置(11-25)
- 单片机在医学信号检测仪中的应用(02-07)
- 单片机应用编程技巧(02-25)
- DSP与单片机通信的多种方案设计(03-08)
- 单片机与PC机串行通信的实现方法 (02-25)
- 单片机与PC通信的简化接口 (05-11)