如何向单片机写字符串

发布者:legend9最新更新时间:2016-09-14 来源: eefocus关键字:单片机  字符串 手机看文章 扫描二维码
随时随地手机看文章

 

单片机实现接收从电脑发送过来的字符串的方法

很多朋友会碰到这个问题:单片机接收从电脑串口发送出来的一串字符串,却只能接收到第一个字符,其他的都丢失了或者是接收到的是乱码,却不知道是什么原因。其实,那是因为,虽然单片机的是全双工串口,但是串口的缓冲区(SBUF)却一般只有一个字节,即1Byte,远没有像电脑串口的缓冲区以KB计算那么大,并且,单片机的处理速度是很有限的,试想一下,假如要求一串字符串以9600bps的速率,一个起始位,一个结束位,无校正位,相当于960Byte/s传输到单片机,单片机要是能够全部接收的话,那么单片机接收和处理一个字节的时间仅为约1ms的时间。这说明了,如果单片机的处理速度不够快,还没有将接收到的上一帧数据及时转送到单片机的RAM中,而电脑串口又传输过来一帧新的数据,这帧新的数据就会把单片机的串口输入缓冲区的SBUF给刷新掉,或者说单片机压根就没有接收到新的一帧数据,造成了数据的丢失或接收到乱码。

如果需要单片机接收到从串口发送过来的一段很长的字符串,并且能够都正常接收和显示,这在网上还找不到例子。

在这里,笔者提供了一种方法,通过单片机内部最高中断等级的中断源不断的查询从电脑串口发送过来的字符,并及时将接收到的字符串通过外接的1602显示屏显示出来。

这里用最为常见的51单片机作为例程,因为51单片机处理速度比较慢,所以需要将电脑串口发送速率调整为最低的600bps,那么单片机端接收和处理一个字符的时间约要求为14ms左右,基本足够了。这个14ms间隔的定时处理和查询工作,由单片机的最高等级内部中断源来控制,以保证电脑发送过来的每个字符单片机都能及时的去处理。

//1602实时显示单片机串口接收到电脑串口发送的字符串

//波特率600bps由T2中断产生,晶振12M

//最高等级中断T0负责定时查询串口输入SBUF

//作者:小宣-天堂雨林博客blog.sina.com.cn/acer Copyright@2009

//接线注释:

//P2.0-P2.7:LCD并行接口P0-P7

//P3.2-P3.4:LCD的RS、RW、E

//P3.0、P3.1:编程串口RXD、TXD

#include

unsigned char receive[32];

unsigned char k;

sbit rs=P3^2;

sbit rw=P3^3;

sbit e =P3^4;

void delay1ms(unsigned int f)

{

unsigned int i,j;

for(i=0;i

for(j=0;j<120;j++);

}

void receivem(void)

{

while(RI==1)

{

if(k==32){k=0;}

receive[k]=SBUF;

RI=0;

k++;

}

}

void timer_int(void)

{

TMOD=0x11;//00010001

SCON =0x50;

T2CON=0x30;

RCAP2H=0xFD;

RCAP2L=0x8F;

EA=1;

TR0=1;

TR1=0;

TR2=1;

ET0=ET1=ET2=1;

}

void time0(void) interrupt 1 using 1

{

TH0=0xCD;

TL0=0x50;

receivem();//定时将SBUF接收

}

void write_com(unsigned char com)

{

rw=0;

rs=0;

P2=com;

delay1ms(1);

e=1;

delay1ms(1);

e=0;

}

void write_data(unsigned char dat)

{

rw=0;

rs=1;

P2=dat;

delay1ms(1);

e=1;

delay1ms(1);

e=0;

}

void lcd_int(void)

{

rw=0;

e=0;

write_com(0x38);

write_com(0x0c);

write_com(0x06);

write_com(0x80);

}

void dis(void)

{

unsigned char i;

if(k>0 && k<16)

{

write_com(0x80);

for(i=0;i

{

write_data(receive[i]);

}

}

if(k>=16 && k<32)

{

write_com(0xC0);

for(i=16;i

{

write_data(receive[i]);

}

}

}

void main()

{

timer_int();

lcd_int();

write_com(0x01);

while(1)

{dis();}

}


关键字:单片机  字符串 引用地址:如何向单片机写字符串

上一篇:51测温度并显示华氏和摄氏程序
下一篇:max7219的显示程序

推荐阅读最新更新时间:2024-03-16 15:09

51单片机-外部中断测脉冲个数
1.外部中断的常用功能 外部中断经常用来记录外部脉冲的个数,也就是当我们使用外部中断1时,如果想记录自身单片机的某个引脚的下降沿个数,只需用杜邦线把这个引脚和P3.3连接即可。 比如P2.3引脚产生这样的电平无规律跳转,则下降沿的个数为5 所以我们就用外部中断1来实现记录K4按键从按下到松手的抖动过程中经历了多少个下降沿,把下降沿的个数显示在数码管上。 2.程序思路 我们定义一个16位的全局变量pulse用来记录P2.3下降沿的个数,在中断函数中的任务就是简单的pulse自加,因为引脚遇到下降沿就会进入中断函数。 在主函数里就是负责数码管显示即可。 3.代码 #include reg52.h #include
[单片机]
51<font color='red'>单片机</font>-外部中断测脉冲个数
单片机和MCP2510的CAN息线通信模块设计
  CAN(Controller Area Network)总线,即控制器局域网。由于具有高性能、高可靠性以及独特的设计,CAN总线越来越受到人们的重视。德国的Bosch公司最初为汽车监控和控制系统设计了CAN总线,现在,其应用已面向过程工业、机械工业、纺织工业、农用机械、机器人、数控机床、医疗器械及传感器等领域发展。CAN总线已经形成国际标准,并已经公认为是最有前途的现场总线之一。CAN总线规范已经被国际标准化组织制订为国际标准ISOll898,并得到众多半导体器件厂商的支持,推出各种集成有CAN协议的产品。CAN总线系统智能节点是网络上报文的接收和发送站,一般由单片机和CAN控制器或二者合二为一组成。   M
[工业控制]
<font color='red'>单片机</font>和MCP2510的CAN息线通信模块设计
看看这个关于AVR单片机的镕丝位配置的文章
简介:对AVR熔丝位的配置是比较细致的工作,用户往往忽视其重要性,或感到不易掌握。下面给出对AVR熔丝位的配置操作时的一些要点和需要注意的相关事项。 正确配置AVR熔丝位 (1)在AVR的器件手册中,对熔丝位使用已编程(Programmed)和未编程(Unprogrammed)定义熔丝位的状态,“Unprogrammed”表示熔丝状态为“1”(禁止);“Programmed”表示熔丝状态为“0”(允许)。因此,配置熔丝位的过程实际上是“配置熔丝位成为未编程状态“1”或成为已编程状态“0””。 (2)在使用通过选择打钩“√”方式确定熔丝位状态值的编程工具软件时,请首先仔细阅读软件的使用说明,弄清楚“√”表示设置熔丝位状态
[单片机]
基于AVR单片机的U盘MP3设计与实现
  随着电子技术的发展,MP3播放器向着大容量,小型化发展。但播放器与存储器一体化的设计使得MP3难以扩充容量以容纳更多的歌曲。将播放器与存储器分离是MP3目前发展的另一方向。本文介绍了一种利用AVR控制以HOST USB方式读取U盘的音乐文件并将其解码的播放的解决方案。本方案同时具备读取音乐标签,U盘电子书,贪吃蛇游戏等功能,具有商业价值。   1 系统功能简介   本设计主要完成对存储在U盘中的音乐及文本等信息的读取操作,能够完成U盘内MP3音乐数据的播放及标签信息的显示,实现播放器与存储器分离,并在此基础上完成电子书,贪吃蛇游戏等功能。   2 系统芯片选择   本设计MCU选择ATMEL公司的ATmega64作为主控芯
[单片机]
基于AVR<font color='red'>单片机</font>的U盘MP3设计与实现
卖LCD驱动IC厂赚了,MCU龙头瑞萨史上首度赚钱
全球最大微控制器(MCU)厂商瑞萨电子(Renesas Electronics)5日于日股盘后发布新闻稿宣布,因日圆走贬、出售中小尺寸液晶面板用驱动IC研发/销售子公司 Renesas SP Drivers(以下简称RSP) 提列相关获利,加上固定成本删减措施奏功,故预估今年度(2014年4月-2015年3月)合并纯益将达740亿日圆(上年度为净损52亿日圆),将为史上(2010年由NEC电子、瑞萨科技合并以来)首度摆脱亏损局面;合并营益预估将大增44.9%至980亿日圆,合并营收预估将年减5.6%至7,860亿日圆、其中半导体事业营收预估将年减6%至7,480亿日圆。 此为瑞萨首度公布今年度财测预估。瑞萨表示,上述财测预估是
[电源管理]
基于80C51单片机的LED动态显示实例
  单片机80c51接线图如图1所示。图1中,4位显示管用共阳极。运用动态显示,采用循环导通或循环截止各位显示器的做法。当循环显示时间间隔较小时,由于人眼的暂留特性,就将看不出数码管的闪烁现象。    图1 单片机80c51接线图   控制系统设计   程序框图    图2 程序框图   程序清单   程序写入80c51芯片,如下   #include   /*---------------------定义变量----------------------------------*/   sbit p1_0=P1^0;   sbit p1_1=P1^1;   sbit p1_2=P1^2;   sbit p
[单片机]
基于80C51<font color='red'>单片机</font>的LED动态显示实例
PIC单片机之EUSART串行通信接口
PIC 单片机的EUSART是一种串行通信接口,我们可以利用他让不同设备之间传输数据,我们来讲讲我们最常用的串行异步接收和发送。 管脚 串行异步接收和发送。如果只要两个引脚,一个是接收RX 一个是发送TX。 数据格式 我们先来讲讲TX是如何发送出数据的,数据格式具体是什么样的。 如果我们要向其他设备发送个大写字母A。将是什么样的呢。 A 这个字母对应的ASCII码是65,对应的八位二进制数则是 01000100。TX就将对应的二进制码发送出去。 发送时用高电平来代表1,用低电平代表0. 那不发送数据的时候管脚就一直为高电平。 启动位和停止位 怎么区分现在是在发送数据还是在常态呢?所以在每
[单片机]
PIC<font color='red'>单片机</font>之EUSART串行通信接口
ST推出业内首款90nm技术嵌入式闪存的微控制器
  日前,意法半导体(ST)宣布在基于ARM Cortex-M系列处理器内核的微控制器研发项目上取得突破,推出全球业内首款采用90nm技术嵌入式闪存的微控制器。   目前几乎没有几家公司研制出采用这种制程的任何架构的微控制器,但意法半导体利用现有安全微控制器和车用微控制器的投资,研发90nm嵌入式闪存技术,来实现基于32位ARM Cortex-M3内核的STM32微控制器的性能和成本优势。2009年第四季度部分客户将获得样片,新产品2010年开始量产。这些微控制器的特性包括:运行速度快,外设集成度高,节能降耗,提供当前市场上密度最高的片上SRAM和非易失性存储器。   STM32系列已是市场上产品系列最宽广的ARM Cor
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved