串口发送一个25单片机接收到的是多少啊,单片机串口发送接收数据
来源:整理 编辑:亚灵电子网 2023-09-30 09:27:17
本文目录一览
1,单片机串口发送接收数据
你用的是AVR单片机吧,这种单片机里面是没有串口接收FIFO的,所以每次只能是接收一个字节数据,否则接收寄存器就溢出了,想接收多个字节指令,就需要你把每次接到的数据一次次串起来,在程序里组装这些数据然后存储串口出现问题,大多是时钟不精确。请先检查。若正确,请检查接收程序中,是否有等到系统不忙的判定再接收数据。
2,请问单片机串行口同信中若从上位机向单片机发送一字符串单片机
单片机接收数据,无论是中断接收,还是查询接收,通常都是根据接收标志位,来判断接收一个字节。写程序之前,都会根据接收数据长度建立一个接收数组,比如根据协议,应该接收25个字节,那就建立一个大于等于25个字节的数组,根据判断条件(可以根据长度判断,可以根据特定字节判断),完成25个字节的接收后,再根据协议,对25个字节进行分析归纳,如果协议中有整形数据(8位机中整形变量为两个字节),就可以截取其中处于正确数组位置的两个字节,高字节先赋值给整形变量乘以256,或者直接左移8位,再加上低字节。就可以了。接收肯定是一个字节一个字节的接收,接收后如何处理数据要看上位机之间的协定,比如数据类型之类的。单片机是接受一个字节,不是一个数组,正常使用 unsigned char型的变量类型。当RI为低电平时表示接受完成,直接用去读取SBUF寄存器里的数据,就是发送的数据了如果要一次性发送多个,也是一个字节一个字节的接收。
3,单片机接收数据
楼主的意思是不是要判断从电脑串口发出的数据列中是否有00 01 这个数据列?如果是,1楼正解!如果是要判断从电脑发出的数据列的第三、四个字节是否为00 01,则程序如下:
设置一个计数标记count,和两个判断标记变量match1,match2初始化为0;使用串口中断;以下是流程:
中断函数()
{
…
读取接收数据;
count++;
if(count==3)//第三个字节
{
if(接收数据==0x00)//第三个字节匹配,设置状态1
match1=1;
}
if(count==4)//第四个字节
{
if(接收数据==0x01)//第四个字节匹配,设置状态1
match2=1;
}
中断返回;
}
主函数中:
main()
{
…
count=0;
match1=0;
match2=0;
while(1)
{
if(match1&match2) //如果第三位和第四位都匹配
P0^1=1;
else
P0^1=0;
}
}
希望能对你有所帮助!
楼主:你的单片机和变频器之间通讯的接口是什么样的?SPI,SCI,或I2C...?用是什么样的单片机?变频器的寄存器是什么样的?需要更多的资料。。。
4,计算机串口发送给单片机数据的问题
这个问题 你分两步做1.串口接收数据,网上例子多的是。问题是 如果你接收3000>0xff,接收时候要注意,89s51是8位单片机,处理不好的话,只能接收到低8位哟。串口就收到数据后,把这个数据作为变量,已备后用。2.把上一步取得的数据,作为产生方波的定时器参数,OK不是很难的事,难就难在你自己是否动脑,学习阶段,不要什么都指望别人给你铺好路,现在或许你可以,以后工作了,交给你一个项目,咱找谁帮忙去。祝你好运单片机怎样通过串口向计算机发送数据: 单片机可以实现与计算机的发送和接收。首先,要正确配置单片机的串口,包括波特率、使用时钟源、com口、数据位位数、奇偶校验位、停止位位数等,同时要保证计算机的配置和单片机的一致。然后,把要发送的数据送到发送缓存,只能一个字节一个字节的发送。启动单片机发送,就可以完成发送操作。如果打开接收中断,计算机发送数据过来的时候,就会进入到接收中断,单片机进入接收数据状态。 要注意的是,单片机是ttl电平,而计算机是232电平,所以在硬件电路连接上要有电平转换芯片,常用的有max232等。首先要计算你的单片机能够产生的方波的最大频率是多少?11.0592/12 = 1.08uS 一个指令周期是1.08uS 用汇编的取反指令好像是2个指令周期 时间为2.16uS 取反两次产生一个方波时间是4.32uS 取倒数 频率最大为 23148<65536 可以用两个字节来控制输出频率。虽然串口每次发一个字节,但是你可以在发送高/第字节时加上标志位,由单片机根据标志位来计算所想要控制的方波频率。如果用C的话频率肯定会小于23148这个问题 你分两步做1.串口接收数据,网上例子多的是。问题是 如果你接收3000>0xff,接收时候要注意,89s51是8位单片机,处理不好的话,只能接收到低8位哟。串口就收到数据后,把这个数据作为变量,已备后用。2.把上一步取得的数据,作为产生方波的定时器参数,OK不是很难的事,难就难在你自己是否动脑,学习阶段,不要什么都指望别人给你铺好路,现在或许你可以,以后工作了,交给你一个项目,咱找谁帮忙去。祝你好运首先要计算你的单片机能够产生的方波的最大频率是多少?11.0592/12 = 1.08uS 一个指令周期是1.08uS 用汇编的取反指令好像是2个指令周期 时间为2.16uS 取反两次产生一个方波时间是4.32uS 取倒数 频率最大为 23148<65536 可以用两个字节来控制输出频率。虽然串口每次发一个字节,但是你可以在发送高/第字节时加上标志位,由单片机根据标志位来计算所想要控制的方波频率。如果用C的话频率肯定会小于23148
5,想用单片机接受从串口调试助手那里发送过来的数值数据如何写代码
// 单片机串行口发送/接收程序,每接收到字节即发送出去// 和微机相接后键入的字符回显示在屏幕上// 可用此程序测试//#include <reg51.h>#define XTAL 11059200 // CUP 晶振频率#define baudrate 9600 // 通信波特率void main(void) unsigned char c; TMOD = 0x20; // 定时器1工作于8位自动重载模式, 用于产生波特率 TH1=(unsigned char)(256 - (XTAL / (32L * 12L * baudrate))); TL1=(unsigned char)(256 - (XTAL / (32L * 12L * baudrate))); // 定时器0赋初值 SCON = 0x50; PCON = 0x00; TR1 = 1; IE = 0x00; // 禁止任何中断 while(1) while(RI == 0); RI = 0; c = SBUF; // 从缓冲区中把接收的字符放入c中 SBUF = c; // 要发送的字符放入缓冲区 while(TI == 0); TI = 0; }}//nbsp;单片机串行口发送/接收程序,每接收到字节即发送出去//nbsp;和微机相接后键入的字符回显示在屏幕上//nbsp;可用此程序测试//#includenbsp;amp;lt;reg51.hamp;gt;#definenbsp;xtalnbsp;11059200nbsp;nbsp;nbsp;nbsp;//nbsp;cupnbsp;晶振频率#definenbsp;baudratenbsp;9600nbsp;nbsp;nbsp;nbsp;//nbsp;通信波特率voidnbsp;main(void){nbsp;unsignednbsp;charnbsp;c;nbsp;tmodnbsp;=nbsp;0x20;nbsp;nbsp;nbsp;//nbsp;定时器1工作于8位自动重载模式,nbsp;用于产生波特率nbsp;th1=(unsignednbsp;char)(256nbsp;-nbsp;(xtalnbsp;/nbsp;(32lnbsp;*nbsp;12lnbsp;*nbsp;baudrate)));nbsp;tl1=(unsignednbsp;char)(256nbsp;-nbsp;(xtalnbsp;/nbsp;(32lnbsp;*nbsp;12lnbsp;*nbsp;baudrate)));nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;//nbsp;定时器0赋初值nbsp;sconnbsp;=nbsp;0x50;nbsp;pconnbsp;=nbsp;0x00;nbsp;nbsp;nbsp;nbsp;nbsp;tr1nbsp;=nbsp;1;nbsp;ienbsp;=nbsp;0x00;nbsp;nbsp;nbsp;nbsp;//nbsp;禁止任何中断nbsp;while(1)nbsp;{nbsp;nbsp;while(rinbsp;==nbsp;0);nbsp;nbsp;rinbsp;=nbsp;0;nbsp;nbsp;cnbsp;=nbsp;sbuf;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;//nbsp;从缓冲区中把接收的字符放入c中nbsp;nbsp;sbufnbsp;=nbsp;c;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;//nbsp;要发送的字符放入缓冲区nbsp;nbsp;nbsp;while(tinbsp;==nbsp;0);nbsp;nbsp;tinbsp;=nbsp;0;nbsp;}}for(i=0;i<4;i++)RI = 0; a[1]= SBUF; }关键语句这样写就可以了,上楼的程序中RI是接受完成的标志位应该写成while(RI != 0); 就是说当RI为1的时候,接收完成,不用一位位来接的,不然要SBUF干什么?uchar a a=SBUF //读数值 串口调试助手中发送的是16进制 a=SBUF/100 // 百位 b=SBUF/100%10 //十位 c=SBUF/100 // 个位 单片机串口通讯详解http://www.c51.cn/Article/mcuzh/200806/8022.html51单片机C语言实验及实践教程 http://www.51c51.com/cyuyan.htm
文章TAG:
串口发送一个25单片机接收到的是多少啊串口 发送 一个