51单片机合并4个16进制16进制编程

 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
51单片机实现2,8,10,16进制转换
下载积分:800
内容提示:51单片机实现2,8,10,16进制转换
文档格式:DOC|
浏览次数:13|
上传日期: 03:23:11|
文档星级:
该用户还上传了这些文档
51单片机实现2,8,10,16进制转换
官方公共微信51单片机串口程序,字符串/16进制发送与接收 - 推酷
51单片机串口程序,字符串/16进制发送与接收
这篇文章将说明51串口通信的发送与接收。分为:单个字符接收,字符串接收;十进制发送与接收,十六进制发送与接收。
字符串发送与十六进制发送,参考:
程序皆由PC串口工具发送,由单片机接收,并返回接收值给PC机。
一:单个字符的发送与接收
#include &reg52.h&
#define uint unsigned int
#define uchar unsigned char
//定义接收 字符
//串口初始化函数
URATinit( )
TMOD=0x20;
SCON=0x50;
//中断函数
void receive() interrupt 4
Buffer=SBUF;
while(!TI);
URATinit( );
在中断函数中,如果接收到数据则RI由硬件置1,这时候把SBUF缓冲区的数据赋值给Buffer,并将RI置0,等待下次接收。同时,将接收到的数据再放入缓冲区,发送给PC机。当发送完毕的时候TI会被硬件置1,这时候需要将TI置0,以待下次发送。
运行效果:
发送数据1,则返回1。
二.字符串接收
#include &reg52.h&
#define uint unsigned int
#define uchar unsigned char
//定义接收 数组
uchar Buffer[5]={0};
uchar i=0,j=0;
//串口初始化函数
URATinit( )
TMOD=0x20;
SCON=0x50;
//中断函数
void receive() interrupt 4
Buffer[i]=SBUF;
SBUF=Buffer[i];
while(!TI) ;
URATinit( );
在中断函数当中用Buffer[]接收收到的数据,同时将Buffer[]再发送给上位机。这里要注意变量i的定义。
如果定义为全局变量则Buffer[0-5]都可以接收到数据,需要对i计数,防止大于5溢出。
运行效果:
#include &reg52.h&
#define uint unsigned int
#define uchar unsigned char
//定义接收 数组
uchar Buffer[5];
uchar i=0,
//延时函数
delay(uint
while(ms--)
for(i=0;i&123;i++);
//串口初始化函数
URATinit( )
TMOD=0x20;
SCON=0x50;
//中断函数
void receive() interrupt 4
Buffer[i++]=SBUF;
uchar k=0;
for(k;k&5;k++){
Buffer[k]=0;
URATinit( );
if(flag) {
uchar j=0;
for(j;j&5;j++){
SBUF=Buffer[j];
while(!TI) ;
delay(50);
这时不是从中断函数中发送接收到的字符串,而是在主函数中发送接收到的字符串。于是需要flag标志位来判断是否接收到数据,并且用while(1)循环来不断判断并输出接收到的字符串。
运行效果:
其实方法(1)优于方法(2),现在来发送字符串&1234&与“123456”来看看效果:
发送“1234”(发送3次)
发送“123456”(发送3次):
可以看出(1)方法总是可以正确传输回并显示所发送的字符串,而(2)方法则有一定的局限性,只有当传输5个字符的字符串时才可以出现想要的显示效果。
分析发现:(1)中在中断中直接发出收到的字符,接收一个发送一个,为实时效果。(2)则在主程序中整体发送接收到的Buffer数组,例如接收“1234”,当“1234”发过来的时候由于Buffer为5位数组,因此第一次发送会给Buffer[0-3]赋值,Buffer[4]未赋值,返回给上位机第一次输出为“1234”,但第二次发送时候会给Buffer[4]赋值,同时溢出把i归为0。再次输出Buffer时造成了传输字符串的重叠与混乱。其实(1)也有这个现象,只是(1)的返回为及时返回。
三. 字符串发送与十六进制发送:
#include&reg52.h&
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
//申明U1锁存器的锁存端
sbit wela=P2^7;
//申明U2锁存器的锁存端
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delay(uint xms)
for(i=i&0;i--)
//i=xms即延时约xms毫秒
for(j=110;j&0;j--);
void display(uint value)
//显示子函数
uchar wan,qian,bai,shi,
//定义万千百十个位
wan=value/10000;
qian=value%;
bai=value%;
shi=value%100/10;
ge=value%10;
P0=table[wan];
P0=table[qian];
P0=table[bai];
P0=table[shi];
P0=table[ge];
void init()
//初始化函数
TMOD=0x20;
//设置定时器1工作方式
void main()
display(num);
void ser() interrupt 4
//串口中断函数
//置RI为0以便接收下一个数据
while(!TI);
这个程序可以在数码管上显示接收到的字符/数据,同时将接收到的数据返回给上位机显示。
先发送字符‘a’,即默认的字符串发送方式:
发送字符‘a’,这时单片机返回给上位机的也为‘a’(默认的字符串显示方式)。但是数码却显示97,为‘a’的ASCII码。这说明在传输过程中,始终为ASCII码传输。数码管之所以没显示‘a’,因为数码管为十进制显示方式,故显示97。(‘a’(ASCII显示)——&97(十进制显示)——&'a'(ASCII码显示))
发送字符‘a’,选择16进制发送,16进制显示:
这时发送端为16进制‘a’,即10进制的10。数码管显示10,而返回的值用16制显示为0A。
由文章开始的参考文章知道16进制发送时每次发送两位数据,如:发送十进制20,即16进制的14,这时数码管会显示20。(14(16进制显示)——&20(10进制显示)——&14(16进制显示))。
已发表评论数()
已收藏到推刊!
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
没有分页内容
图片无法显示
视频无法显示
与原文不一致51单片机串口程序,字符串/16进制发送与接收
这篇文章将说明51串口通信的发送与接收。分为:单个字符接收,字符串接收;十进制发送与接收,十六进制发送与接收。字符串发送与十六进制发送,参考:http://blog.csdn.net/yibu_refresh/article/details/程序皆由PC串口工具发送,由单片机接收,并返回接收值给PC机。一:单个字符的发送与接收#include &reg52.h& #define uint unsigned int #define uchar unsigned char //定义接收 字符 uchar B
//串口初始化函数 void
URATinit( ) {
TMOD=0x20;
SCON=0x50;
TL1=0 } //中断函数 void receive() interrupt 4 {
Buffer=SBUF;
while(!TI);
TI=0; } //主函数 void
URATinit( ); }在中断函数中,如果接收到数据则RI由硬件置1,这时候把SBUF缓冲区的数据赋值给Buffer,并将RI置0,等待下次接收。同时,将接收到的数据再放入缓冲区,发送给PC机。当发送完毕的时候TI会被硬件置1,这时候需要将TI置0,以待下次发送。
运行效果:发送数据1,则返回1。二.字符串接收(1)#include &reg52.h& #define uint unsigned int #define uchar unsigned char //定义接收 数组 uchar Buffer[5]={0}; uchar i=0,j=0;
//串口初始化函数 void
URATinit( ) {
TMOD=0x20;
SCON=0x50;
TL1=0 } //中断函数 void receive() interrupt 4 {
Buffer[i]=SBUF;
SBUF=Buffer[i];
while(!TI) ;
} } //主函数 void
URATinit( ); }
在中断函数当中用Buffer[]接收收到的数据,同时将Buffer[]再发送给上位机。这里要注意变量i的定义。如果定义为全局变量则Buffer[0-5]都可以接收到数据,需要对i计数,防止大于5溢出。运行效果:(2)#include &reg52.h& #define uint unsigned int #define uchar unsigned char //定义接收 数组 uchar Buffer[5]; uchar i=0,
//延时函数 delay(uint
while(ms--)
for(i=0;i&123;i++); } //串口初始化函数 void
URATinit( ) {
TMOD=0x20;
SCON=0x50;
TL1=0 } //中断函数 void receive() interrupt 4 {
Buffer[i++]=SBUF;
} } //主函数 void
uchar k=0;
for(k;k&5;k++){
Buffer[k]=0;
URATinit( );
if(flag) {
uchar j=0;
for(j;j&5;j++){
SBUF=Buffer[j];
while(!TI) ;
delay(50);
这时不是从中断函数中发送接收到的字符串,而是在主函数中发送接收到的字符串。于是需要flag标志位来判断是否接收到数据,并且用while(1)循环来不断判断并输出接收到的字符串。
运行效果:其实方法(1)优于方法(2),现在来发送字符串&1234&与“123456”来看看效果:发送“1234”(发送3次):发送“123456”(发送3次):可以看出(1)方法总是可以正确传输回并显示所发送的字符串,而(2)方法则有一定的局限性,只有当传输5个字符的字符串时才可以出现想要的显示效果。分析发现:(1)中在中断中直接发出收到的字符,接收一个发送一个,为实时效果。(2)则在主程序中整体发送接收到的Buffer数组,例如接收“1234”,当“1234”发过来的时候由于Buffer为5位数组,因此第一次发送会给Buffer[0-3]赋值,Buffer[4]未赋值,返回给上位机第一次输出为“1234”,但第二次发送时候会给Buffer[4]赋值,同时溢出把i归为0。再次输出Buffer时造成了传输字符串的重叠与混乱。其实(1)也有这个现象,只是(1)的返回为及时返回。三. 字符串发送与十六进制发送:#include&reg52.h& #define uchar unsigned char #define uint un
sbit dula=P2^6;
//申明U1锁存器的锁存端 sbit wela=P2^7;
//申明U2锁存器的锁存端
uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71};
void delay(uint xms)
for(i=i&0;i--)
//i=xms即延时约xms毫秒
for(j=110;j&0;j--); }
void display(uint value)
//显示子函数 {
uchar wan,qian,bai,shi,
//定义万千百十个位
wan=value/10000;
qian=value%;
bai=value%;
shi=value%100/10;
ge=value%10;
P0=table[wan];
P0=table[qian];
P0=table[bai];
P0=table[shi];
P0=table[ge];
void init()
//初始化函数 {
TMOD=0x20;
//设置定时器1工作方式
void main() {
display(num);
void ser() interrupt 4
//串口中断函数 {
//置RI为0以便接收下一个数据
while(!TI);
TI=0; }这个程序可以在数码管上显示接收到的字符/数据,同时将接收到的数据返回给上位机显示。
先发送字符‘a’,即默认的字符串发送方式:发送字符‘a’,这时单片机返回给上位机的也为‘a’(默认的字符串显示方式)。但是数码却显示97,为‘a’的ASCII码。这说明在传输过程中,始终为ASCII码传输。数码管之所以没显示‘a’,因为数码管为十进制显示方式,故显示97。(‘a’(ASCII显示)——&97(十进制显示)——&'a'(ASCII码显示))发送字符‘a’,选择16进制发送,16进制显示:这时发送端为16进制‘a’,即10进制的10。数码管显示10,而返回的值用16制显示为0A。由文章开始的参考文章知道16进制发送时每次发送两位数据,如:发送十进制20,即16进制的14,这时数码管会显示20。(14(16进制显示)——&20(10进制显示)——&14(16进制显示))。
更多相关文章
Qt中串口16进制发送:
QSstr=ui-&sendtext-&toPlainText();QByteAString2Hex(str,senddata);buf=//发送数据myCom-&g ...
工作了一年多,写了不少单片机串口程序.感觉串口多字节接收部分的逻辑相对于配置寄存器跟串口来说,是有点难度的--寄存器配置基本上都是死的,串口多字节跟一字节只是多了一个循环.
串口接收程序是基于串口中断的,单片机的串口每次接收到一字节数据产生一次中断,然后再读取某个寄存器就可以得到 ...
/is_water/item/3c5cc31b72b462这篇文章主要来介绍一下51单片机的串口,下面先来看一下与串口相关的寄存器.
private static function toHex(bytes:ByteArray):String{ var pos:int =bytes. bytes.position=0; var result:String=&&; while(bytes.byte ...
转载]串口通讯之MSComm串行通讯控件(2) 0 推荐 2.发送通讯数据
在Visual C++ 中,通讯控件发送数据的任务是由其接口成员函数SetOutput来实现的,该函数使用的参数是const VARIANT &newValue.VARIANT其实是一个C++结构类型,COle ...
一.原理简介 51 单片机内部有一个全双工串行接口.什么叫全双工串口呢?一般来说,只能接受或只能发送的称为单工串行:既可接收又可发送,但不能同时进行的称为半双工:能同时接收和发送的串行口称为全双工串行口.串行通信是指数据一位一位地按顺序传送的通信方式,其突出优点是只需一根传输线,可大大降低硬件成本, ...
上次介绍了一种字符串转化为16进制显示的算法,并封装成了API,这个API可用于串口收到数据后按16进制显示字符串,这次介绍串口按16进制发送字符串的算法,使用基于字符类型参数的模板函数实现.算法原理是遍历字符串,将在区间'0'--'9','A'--'F','a'--'f'的字符转化成对应的16进制 ...
/BLOG_ARTICLE_174488.HTM
基于Java语言的51单片机串口通讯PC机程序
电气与信息工程学院测试计量技术与仪器,湖南大学,湖南长沙,410082
摘要:由于Java语言的诸多优点,Java得到了广泛 ...
关于具体需求,请看前面的博文:DDD领域驱动设计实践篇之如何提取模型,下面是具体的实体.聚 ...
原贴地址 我们来分析一下究竟哪些因素让前端开发这么困扰. 先看看界面部分吧. #1. 命令式还是声明式毫无疑问,就写界面来说,声明式的代码编写效率远高于命令式: &Panel title=&Test& ...
1.安装catfish sudo apt-get install catfish 2.配置thunar,添加[自定义动作] 打开 Thunar 后,点击 Edit -& Configure custom act ...
简单的登陆脚本 这样就不用每次都输入ssh命令了,使用密码还是有些不安全,谨慎使用. #!/usr/bin/expect -f #filename: auto_login.sh #author: orangleiu
操作系统厂商聚焦 650) this.width=650;& src=&quot ...
&NGNc商务合作& NGNc开发者网络(NGNc Developer Network)是由一群有朝气和执拙性格的软件开发人员组成的开发社区.www.NGNc.net是它的网址,您可以通过浏览该网站对我们 ...
数据库连接池 连接池是数据库连接的缓存,每当应用程序需要连接数据库时向连接池申请数据库连接,连接池负责具体数据库连接的创建和销毁.连接池中的数据库连接会缓存一段时间,后续的连接请求首先使用缓存中的数据库连接,如果缓存 ...
java线程之基础学习总结(三) 生产者与消费者 在多线程中有一个最经典的操作案例-生产者和消费者,生产者不断生产内容,但是消费者不断取出内容. 现在假设生产的内容都保存在Info类之中,则在生产者要有Info类的引 ...
与大多数人一样,上大学的时候,他梦想着毕业之后去知名游戏公司开发游戏,但现实太残酷,往往现 ...
根据中国海关公布的数据,上半年深圳口岸累计出口手持或车载手机8218万台,价值55.6亿美 ...您所在的位置:
&51单片机开发工具(Keil C51单片机编程软件下载) v9.52官方版
51单片机开发工具(Keil C51单片机编程软件下载) v9.52官方版
Keil C51单片机编程软件软件介绍
点击查看大图
Keil C51是一款单片机编程软件,Keil C51单片机编程软件是目前世界上最好的51单片机的汇编和c语言的开发工具。Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。用过汇编语言后再使用C来开发,体会更加深刻。51单片机开发工具支持汇编及c语言以及混合编程。同时具备功能强大的软件仿真和硬件仿真(用mon51协议)。Keil C51单片机编程软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。
Keil C51单片机编程软件下载地址
其他软件小分类
1121118次下载
1161369次下载
699918次下载
159040次下载
434996次下载
413489次下载
328256次下载
131453次下载
334129次下载
40166次下载
1218360次下载
1161369次下载
1121118次下载
699918次下载
562425次下载
508543次下载
507666次下载
434996次下载
413489次下载
395372次下载
热门关键字
扫红码得红包5亿红包100%中奖

我要回帖

更多关于 16进制编程器 的文章

 

随机推荐