本帖最后由 Andylue 于 2013-8-13 17:06 编辑
程序说明:用串口调试助手发送字符,数码管来显示(串口接收功能);并且串口调试助手接收程序中buf的数据(串口发送功能),这样能实现吗?怎么配合实现?环境是RTX51-tiny。任务0用来处理发送,任务1用来处理接收,并显示在数码管上。
#include <rtx51tny.h>
#include <reg52.h>
#define uint8 unsigned char
#define uint16 unsigned int
#define led P1
uint16 counter0; /* counter for task 0 */
uint16 counter1; /* counter for task 1 */
uint8 code dis_table[]={0xc0,0xf9,0xa4,0xb0,0x99, /*segment code */
0x92,0x82,0xf8,0x80,0x90};
uint8 code wei_table[]={0x01,0x02,0x04,0x08, /*Location code */
0x10,0x20,0x40,0x80};
uint8 code buf[]={"Andylue<yuanfen_330@163.com>"};
uint8 num;
uint8 uart_flag=0;
/************************************************************/
/*'delayms':
/************************************************************/
void delayms(uint8 ms)
{
uint8 i;
while(ms--)
for(i=0;i<110;i++);
}
/************************************************************/
/*'init': serial interrupt initialization
/************************************************************/
void init()
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
SCON=0x50;
ES=1;
TR1=1;
}
/************************************************************/
/*'send':
/************************************************************/
void send(uint8 dat)
{
dat=SBUF;
while(!TI);
TI=0;
}
/************************************************************/
/*'sendstring':
/************************************************************/
void sendstring(uint8 *p)
{
while(*p != '\0')
send(*p++);
}
/************************************************************/
/*'UART_isr':
/************************************************************/
void UART_isr(void) interrupt 4
{
if(RI)
num= SBUF;
uart_flag = 1;
RI = 0;
isr_send_signal(1);
}
/************************************************************/
/*'disnum':
/************************************************************/
void disnum()
{
P1=dis_table[num/10];
P2=wei_table[1];
delayms(1);
P1=dis_table[num%10];
P2=wei_table[0];
delayms(1);
}
/************************************************************/
/* Task 0 'send_handle':
/************************************************************/
void send_handle(void) _task_ 0
{
init();
os_create_task(1);
while(1)
{
counter0 ++;
sendstring(buf);
send(0x0a);
send(0x0d);
}
}
/********************************************************************/
/* Task 1 'receive_handle':
/********************************************************************/
void receive_handle(void) _task_ 1
{
uint8 i=100;
while(1)
{
counter1 ++;
os_wait1(K_SIG);
while(i--)
disnum();
}
}
|