① 51单片机怎么把一个2位十进制整数(00-99之间的任意整数)通过串口发送给另一个单片机程序呢!
2位但十进制数就一个字节的数据,直接发送就可以了。比如X为发送数据那么程序为:
senddat:
mov SBUF,X
jnb TI,$
clr TI
ret
C语言
senddat()
{
SBUF=X;
while(!TI);
TI=0;
}
② 单片机给电脑发送一个字节的十六进制数,这个数该存放在什么类型的变量里呢
1。串口发送:单片机这里很简单:设好波特率后,只要一条MOV SBUF,A即可将累加器的内容(一个字节)送到串口。
2。数据格式:在单片机这里,全是以字节方式运行的,更大的数要多字节拼装
3。在VB中,串口接收要选用“字节”方式,不要用“字符串”方式,这样可以很好的和单片机配合。
4。在VB中,可以将字节数据转换为无符号整数。
5。如果数据仅限于字节(256之内),用刚才接收的字节就可以直接参加运算。0D5H即是213,超过一个字节的数值,由单片机传过来之后要拼装,比如(1A2BH)先传1AH,再传2BH,到VB中,将1AH(=26)乘以16(=416),再加上2BH(=43),其和等于459(=0X1CB)。
6。十六进制在单片机中用0ABH方式,在VB中用0xAB方式表示。
③ 单片机怎样通过串口向计算机发送数据
单片机怎样通过串口向计算机发送数据:
单片机可以实现与计算机的发送和接收。首先,要正确配置单片机的串口,包括波特率、使用时钟源、COM口、数据位位数、奇偶校验位、停止位位数等,同时要保证计算机的配置和单片机的一致。然后,把要发送的数据送到发送缓存,只能一个字节一个字节的发送。启动单片机发送,就可以完成发送操作。如果打开接收中断,计算机发送数据过来的时候,就会进入到接收中断,单片机进入接收数据状态。
要注意的是,单片机是TTL电平,而计算机是232电平,所以在硬件电路连接上要有电平转换芯片,常用的有MAX232等。
④ 请教一个单片机8位串口发送的问题
由于你把8位的所有位数都用作表示数字,所以导致255以内的数和255以上的数无法分开。
这个问题的关键是怎么让电脑知道你什么时候发的数字是8位的,什么时候发的数字是16位拆成两个8位的对吧!
我这里说一个方法吧!你可以把8位全一作为一个判断符,如果电脑受到一个全一的字符,那么接受到的下两个字节就进行拼接。
例如需要发送254,那么直接发送一个字节即可。
如果发送255,可以这样:
先发送 11111111
然后发送 00000000 11111111
这样拼接得到255
如果是发送 1024,可以这样:
先发送 11111111
然后发送 00000100 00000000
当然,这样可能传输效率有所降低,但也不会太差!
⑤ 51单片机发送字节,是把一个字节写入到subf,就会把ti置1,为什么又要把ti再置回0再开ES=1呢
单片机通过串口向外发送一个字节的数据结束后,就会将TI置1,表示发送完了,如果是开中断的话,就会产生中断,在中断子程序中继续发送下一个字节。因这次已经响应了,就应该把TI清0,表示这一次的中断已响应了,如果不清0,就会再次产生中断的,一次发送引起两次或者多次中断,就错误了。所以,一次中断后必须将本次的标志位TI清0,TI是一次有效。如果是查询方式,把要发送的数据写到SUBF后就要查询TI的状态了,当TI=1,就说明这次发送结束了,也必须将TI清0,再发送下一个字节。
在中断子程序中,通常是首先就将TI清0,而中断程序结束后再开ES=1,假如这个顺序反过了,也是可以的,只要在中断子程序中将TI清0就行,至于是否将再开ES=1,要看在中断子程序中的前面关了ES=0,从中断返回后就要开ES=1。其实这一关一开,在中断子程序中没有什么必要,如果不关,也就不用再开了,虽然没有关,在响应串口中断时也不会再响应串口中断,必须从中断返回后才能再次响应的。这只是一些人的习惯了这么写,也没有关系,只要不被误导就好。
如果是单片机接收数据,当接收到一个字节后,就会将RI置1,或者引起中断,从SBUF中读出数据,或者查询RI,再读数据。通常是采用中断的方式接收数据,这样不影响单片机执行其它程序,也不至于因为等待接收数据造成死机。