导航:首页 > 操作系统 > 51单片机串口一次发3个16进制

51单片机串口一次发3个16进制

发布时间:2022-09-05 15:49:46

⑴ 各位大侠,51单片机串口中断接收问题为什么一个一个字节的发,串口都可以接收,而连续发4个十六进制

每次进中断你都回发Rbuf[]数组(4个字节),更要命的是你居然还敢在中断函数里面while(TI==0)。
你可以看看在串行中断函数里面浪费了多少时间。
51的串口只有一个移位寄存器。第一次进入中断后你读出了1个字节,然后移位寄存器里面又收到1个字节,剩下的再来就被丢掉了……因为老兄你还在第一次进入的中断里面悠哉悠哉地耍呢。

⑵ 51单片机怎么接收电脑发送的16位数据

51单片机是8位的,一次只能接一个字节,你这16位的,要分两次的。 电脑串口也是按两次来发送,也就是把这个16位的拆成两个字节,所以每个字节发送都是遵循串口协议的,你在单片机里面开串口接收中断即可。 你可能会疑问,要是第一个字节中断了,进入中断函数接第一个字节后,那第二个字节会不会错过,来不及接收? 这个不会的,上面说了,第二个字节也是按串口标准发的,也就是起始位,数据位,(校验位),结束位。 电脑在发一个字节后,又会接着发第二个字节。可是,要知道串口的波特率是很低的,远远比单片机的处理速度低。当你接了第一个字节,将此字节做一些处理,比如存起来时,电脑可能都还没开始发第二个字节呢,因为电脑发数据的速率是以K为单位的,而单片机处理速度是以M为单位的。 因此,不用担心第二个字节会丢失。

⑶ 每按一次单片机上的按键,把一个16进制的数据发送到串口利用串口调试助手接收显示出来(51单片机 汇编语言

KEY EQU P1.0 ;自己按实际定义
DAT EQU 30H ;自己定义发送的数据
ORG 0000H
SJMP STA
ORG 0023H
LJMP SERINT
ORG 0030H
STA:
MOV SP,#6FH
SETB ES
SETB EA
LOOP:
JB KEY,LOOP
LCALL DELAY
JB KEY,LOOP
MOV SBUF,#DAT
LCALL SEND
SJMP LOOP
DELAY:
MOV R0,#10
D1:
MOV R1,#200
DJNZ R1,$
DJNZ R0,D1
RET
;-----串口中断程序------
SERINT:
JBC RI,R_DAT
JBC TI,SEREND
SJMP SEREND
R_DAT:
MOV A,SBUF
SEREND:
RETI
END

⑷ 我要51单片机串口发送16位的数据,谁能给我个最方便的校验代码例如CRC什么的…谢谢!

直接发送这个16位数据和其和就可以了,也就是发送3个字节。接收到和同样求一下和看是否一致就行。例如:
senddat()
{
dat[2]=dat[0]+dat[1];
i=0;
while(i<3)
{
SBUF=dat[i];
while(!TI);
TI=0;
i++;
}
}

char recive()
{
i=0;
while(i<3)
{
if(RI)
{
RI=0;
dat[i]=SBUF;
}
}
if(dat[2]==dat[0]+dat[1])return(1);
else return(0);
}

⑸ 51单片机发送十六进制数组

你好!

16进制发送,中间要有空格,然后发送,私信联系

⑹ 51单片机串口接收十六进制数组数据有误

你使用这种方式发送vb数据的i话,发送的是ascii码,比如发送的数据是123的话,计算机会连续发送0x31,0x32,0x33,所以单片机接收程序,需要重新转换一下,你可是试着换一种方式发送十六进制数据
对于单片机接收程序,由于你发送的数据量比较小,而且发送数据时,相邻两个数据的时间间隔也很短,你可以在中断里面通过查询的方式接收数据包
void
serial
()
interrupt
4
using
3
{
uchar
a,cnt;
a=0;
cnt=250;//如果你的波特率比较低,而系统时钟又快的话,cnt应定义为int型,并把值设置的更大些
ri=0;
es=0;//关闭串口中断
str[a++]
=sbuf;
while(cnt--){//如果cnt等于0时退出循环
if(ri){
ri=0;
str[a++]
=sbuf;
cnt=250;//接收到新的数据,重新设定超时
}
}
es=1;//重新开串口中断
//这里可以做一个接收到数组的标志位,用于主程序查询处理相关数据
mc=str[0];
n=str[1];
}

⑺ 51单片机串口输出程序,单片机运行后在串口调试助手上看到重复的一组16进制数

首先看你的发送的是什么:unsigned char dat,字符型的变量,也就是说你发送过去的变量是char型的,

再看你要显示什么:“串口助手上看到一组16进制数”好吧,这就是问题,
你要看的是16进制的数,但是发过去的是char型,那么怎么办呢?
1:转换,char型变量你会转换成16进制的吗??不会的话去翻ASC||表,(0x1B是27(十进制),char是“27
33
1B
ESC
escape ” 一个叫escape的东东, )这些东西明显是不能弄到字符串里面去的,对吧,那就看第二步,
2:还是转换,不过这次不是把16转换成对应的char,‘0’的asc||知道是多少吗?对应是10进制是48,然后‘0’-21=?,,慢慢研究吧,
最后:你把zifuchuan这个变量弄成int型的不就好啦,,,可以直接用啊,只需要在串口终端显示的时候勾选以hex显示,就好了啊

⑻ 通过单片机串口发送一串16进制码

发送16进制数和空格的要求不合理,要发16进制数就是连续的。

要发空格,那是字符,即ASCII码,而一个字节的16进制数要发两个字符。
以16进制发送时,空格的16进制数20H,而不是这种空的空格。

⑼ 怎么样通过51单片机串口一次发送3个16进制数据

配置好串口,然后写到SBUF里面就能自动发送

⑽ 单片机串口发送16进制程序

不用16进制那就是字符,电脑发送和单片机接收都是该字符的asii码
字符1的asii码=16进制的31,即0x31

阅读全文

与51单片机串口一次发3个16进制相关的资料

热点内容
pdf打印底色去掉 浏览:443
java快递接口 浏览:385
哪个app可以教新爸爸 浏览:208
如何查看服务器系统版本信息 浏览:524
成都市土地出让金算法 浏览:702
钢筋加密标记 浏览:575
ps中扩展功能在文件夹的什么位置 浏览:903
双极压缩机为什么要先高压 浏览:527
苹果手机服务器填什么 浏览:832
android移动动画效果 浏览:691
电子和服务器是什么意思 浏览:691
phpurl中文乱码问题 浏览:893
程序员那么可爱大结局陆漓产子 浏览:538
java如何从云服务器读取本地文件 浏览:923
压缩空气软管制作方法 浏览:912
天河三号算法 浏览:924
php队列教程 浏览:632
洪水命令 浏览:530
安卓怎么弄成苹果在线 浏览:435
谷歌web服务器地址 浏览:900