串口实现linux系统的终端(用proteus)

    用过linux系统都知道,我们可以通过终端输命令来操作linux系统。

clip_image002

这个是对于PC机的。

但是对于嵌入式来说,没有显示器,那怎么来模拟这个终端了。这里就要用到嵌入式中最好用到功能,串口。我们可以通过串口,将要显示的东西发送给PC,然后PC在显示出来,这样不就模拟终端了。

用到的工具:

l  secureCRT 7.2

l  虚拟串口

l  Keil C51

l  proteus

第一个工具,功能很强大,这里用来当串口终端,即通过串口发数据和接收数据。

首先是proteus构建原理图

clip_image004

串口接口的设置如上所示,连接到COM4,波特率为9600。

这里要注意的是,单片机的时钟频率要设置为11.0592M。

然后是设置虚拟串口

clip_image006

添加COM3COM4一对虚拟串口。这样,将串口终端连接到COM3,这样就实现了串口终端和proteus的连接了。

secureCRT中设置

clip_image008

 

硬件平台搞定后,就要开始写程序了。

首先是要定义几个字符串:

uchar code a[] ="hello world!!!\r\n";
uchar code tishi[] = "[weiqi7777@localmain:#]:";
uchar code dis[] = "unknown command\r\n";

这里,第一个字符串是用来最开始显示的。。

第二个字符串,就是终端前面的提示部分。

第三个字符串,是说明无效命令的。。因为这里没有对命令进行处理,把所有接收到的命令都当成是未知命令。

然后就开始写程序了。

首先是main函数的主要部分:

void main()
{
    uart_init();
    uart_string(a);
    while(1)
    {
         uart_string(tishi);
        while(!flag);
        flag = 0;
        uart_string(b);
        uart_string("\r\n");
        uart_string(dis);    
    }
}

uart_init(),是串口初始化,就是配置串口。

uart_string(a); 这个函数,是将字符串a发送到串口。

下面的while循环就是关键了。

首先是发送提示的信息,即终端前面显示的那部分。这个在前面的数组中已经定义好了。

然后就等待一个while循环。这个循环判断的是flag。这个flag是接收数据标志位,当接收数据后,会为1,然后往下执行。如果没有接收到数据,那么为0.那么就会一直在循环里面。这样,就实现了等待接收命令。

程序中,是利用终端接收数据的。当接收数据后,会置flag1.

接收到数据后,首先是发送接收到的数据。然后发送\r\n。实现换行。然后在发送 未知命令的字符串。

然后就是中断函数

void uart_interrupt() interrupt 4
{
   uchar dat;
   if(TI)
      TI = 0;
   if(RI)
   {
      RI = 0;
      dat = SBUF;
      //if(dat == '\n' || dat == '\r')
      if(dat == '\r')
      {
        b[kk] = '\0';
        kk = 0;
        flag = 1;
        uart_char('\r');
        uart_char('\n');
      }
      else
      {
          b[kk++] = dat;
         uart_char(dat);
      }
   }
}

对接收的数据,进行判断,如果是接收到了\r,即换行(这里的\r是测试出来的,因为secureCRT的回车发送的就是\r,不同的工具可能发送的不一样,有的可能是\n)。那么说明主机命令发送结束。那就将标志位置1,这样主函数就能跳出while循环,接着执行。接收的数据是存在一个数组里面的。如果接收的数据不是\r,那么说明是命令,就把接收到数据存在数组里面去。然后在把这个接收到的数据在发送回去。这里一定要发送回去,不然的话,在serureCRT那边,你输入命令,是看不到命令的。只能看到命令的执行效果。主要的地方是在接收的部分。

数据接收完毕后,在发送一个\r\n。这样才能使下一次显示提示是在界面最左边的位置上的。

程序装载在proteus的单片机中。执行仿真。

开始界面

clip_image010

这是不是就很像linux中的终端了。

输入命令

clip_image012

然后就可以有执行效果了。

这样,就用串口模拟了linux的终端了。

这里只要在主函数的while(!flag)  这条语句之后,添加对命令处理的函数,这样就能真正模拟终端了。

可以看出,串口是有多么的好用。用这个方法,就能做出交互的界面来。只要在secure CRT中输入命令。然后单片机接收到命令,对命令进行处理,然后将处理后的信息返回PC

此条目发表在ARM嵌入式分类目录,贴了, 标签。将固定链接加入收藏夹。

发表评论

电子邮件地址不会被公开。