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

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

9f5038fbd6cdab6805e669f80165d49c.png

这个是对于PC机的。

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

用到的工具:

lsecureCRT 7.2

l虚拟串口

lKeil C51

lproteus

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

首先是proteus构建原理图

25c574129e5b46f7205ddb0b558ff473.png

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

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

然后是设置虚拟串口

5cc2c475fbcfa5fc4bb127a3f92b1b39.png

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

在secureCRT中设置

1aaba5385ff3a54434f2920627763851.png

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

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

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.那么就会一直在循环里面。这样,就实现了等待接收命令。

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

接收到数据后,首先是发送接收到的数据。然后发送\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的单片机中。执行仿真。

开始界面

c2023c4597652cec166f2f10733af3bb.png

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

输入命令

dcd4d768d7286e4474548cc2643916a5.png

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

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

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值