串口助手发送字符型数据给单片机,比如发送1。单片机怎么接收?char a; a=SBUF,可以吗?

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-05-20
PC串口调试助手发送字符N给51单片机,中断程序中char a=SBUF,那么主程序里能用if(a==‘N’)来做判断么

直接在中断中就可以处理:
bit flag;
。。。。。。
void uart() interrupt 4
{
unsigned char a;
if(RI)
{
RI=0;

a=SBUF;

if(a=='N')flag=1;

else flag=0;

}

}

发送函数中,这样写,防止TI还未来得及置为1,就一直在发送,这样写可防止上述情况
#include
#define uint unsigned int
#define uchar unsigned char
sbit D0=P1^0;
uchar flag;
uchar a[30];
uint y, u,c;

/*发送子程序*/
void fasong(uchar dat)
{

ES=0;
SBUF=dat;
while(!TI);
TI=0;
ES=1;
}

/*延时子程序*/
void delay(uint n)
{
uint i,j;
for(i=0;i<n;i++)
{
for(j=0;j<250;j++);
}
}



/*主程序*/
void main()
{

SM0=0;//选择工作方式一
SM1=1;
TR1=1;
REN=1;
TMOD=0X20;//设置定时器1为工作方式2
TH1=0XFD;
TL1=0XFD;//设置波特率为9600
EA=1;//开CPU中断
ES=1;//开串行口中断

delay(1000);
D0=0;
while(1)
{
while(flag)
{
y=0;
while(a[y]!='\0')
{
fasong(a[y]);
a[y]='\0'; //清空字符,方便下次接收
y++;
}
y=0;
flag=0;}
}
}

void jsfs() interrupt 4
{
c=0;
u=1000;
ES=0;
while(u--) //一直接收 直到字符串接收完毕
{
while(RI)
{
a[c]=SBUF;
c++;
RI=0;
u=1000;
}
}
ES=1;
flag=1;
}

你好,要利用串口传送,首先要设置单片机串行接口的工作方式,并且REN允许串行接控制位要为1(REN=1)以及设置传送的波特率,串口助手的波特率也要与之对应.并且确定单片机已经与电脑连接成功.连接成功后.在串行口中断程序,可以用a=SBUF来存到里,但a必须在前面定义不能char a; a=SBUF这样.虽然原理是这样.希望对你有帮助

应该用十六进制发送!
#include<c8051f340.h>
void port_init()
{
XBR0=0X01; //UART 的TX0,TX1连到P0.4,P0.5
XBR1=0X40; //交叉开关使能
P0MDOUT=0X10; //P0.4配置为推挽,其他漏极开路

}
void uart0_init()
{
SCON0|=0X10;//UART0接收允许
CKCON=0X01;//系统时钟4分频
TH1=0X64;//波特率为9600
TL1=TH1;
TMOD=0X20;//方式2,8为自动装载定时器
TR1=1;//定时器1允许
TI0=1;//INT1边沿触发
}
void main()
{
unsigned char i;
port_init();
uart0_init();
while(1)
{
while(RI==0);//接收
i=SBUF;

RI=0;
if(i!='\0')
{
SBUF=i;
while(TI==0);//发送
TI=0;
i='\0';
}
}
}
看看后半部分,单片机接收到后RI被置0,进入while。。。。。

接收要么采用查询方式,要么采用中断方式。
直接从SBUF取数并不可靠,无法确定此前是否发生了传输。
好好看书为上……

我的博客里有详细讲解,希望对你有帮助!http://hi.baidu.com/txz01/blog/item/7ae25df4919cf779dcc4743e.html

传送的是BCD码


  • 求一个“串口调试助手发送字符串到单片机“的程序
    答:MOV A,SBUF ;串口接收数据 MOV R0,A MOV SBUF,A ;将接收的数据再传送给计算机 JNB TI,CLR TI MOV A,R0 ;送LED显示 MOV P1,A RETI TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;共阳字码表 END 设置波特率为9600,8个数据位,1个停止位,无奇偶校验 ...
  • 在上位机上用串口调试助手发送一个字符x,单片机收到字符后返回给上位机...
    答:void){ InitUART();while(1){ if(Flag){ Flag=0;if(GET=='x') SendStr("I Get x \r\n"); // \r\n 表示回车换行,可以去掉。} } } void UARTInterrupt(void) interrupt 4 { if(RI){ RI = 0;GET=SBUF;Flag=1;} } 希望我的回答对你有帮助,有什么问题欢迎一起探讨。
  • 用串口调试助手向单片机发送数据
    答:串口调试助手一般有两种数据模式,一种是字符,一种是十六进制数 0x31 是1的ASCII 码,你把串口调试助手的发送数据类型改成十六进制就可以了。
  • 单片机串口通信,首先电脑给单片机发送一个字符串hello,单片机收到后...
    答:void SendOneByte(unsigned char c)//串口发送一个字节 { SBUF = c;while(!TI);TI = 0;} void main(void)//主函数 { InitUART();while(1);} unsigned char strcmp(unsigned char *str1,unsigned char str2,unsigned int len)//比较字符串 { if(*str1++!=*str2++)return 0;return 1...
  • 如何使用stc串口助手向单片机发送数据
    答:选择串口或者USB转串口,选择合适的波特率,输入要发送的字符,选单个发送或循环发送,单片机有相应的设置,就可收到数据
  • pc用串口助手给单片机发一字符串,收到的数据在LCD1602上显示,遇到...
    答:pc用串口助手给单片机发一字符串,--- 字符串,都有多少字符?发一个字符,用多少时间?你到程序,当单片机收到第一个字符,马上,就改变了 485 的传输方向,向 PC 机发送一串字符,这要用多少时间?单片机,发送这一串之后,再令 485 为接收,此时,还能收到什么呢?PC 机,早已经就发送完,...
  • 计算机串口发送给单片机数据的问题
    答:这个串口通讯是最基本的,你的思维方式有点问题了,不能太局限了,你在超级终端上面上面发送不管什么,你单片机都可以转化为单字节来接受,比如你在pc上发送一个字符串,然后按回车选择发送,为例,是采用中断的话,也可以在中断中加入标志位,然后通过设置标志位来是否等待输入的结束,你在用C语言开辟一...
  • 从串口向单片机发送字符数据,怎么将字符数据变成十进制,然后单片机通过...
    答:ASCII码-48,没有问题,没效果是你的程序 其它方面 如显示 等等。这两行不能说明问题。
  • 单片机串口接收一串特定字符的程序,用串口调试助手发送命令,可是单片机...
    答://特定的字符,那就先弄好数据格式 //比如 你要接收4个ASII字符 //那就把帧设计成 //起始符-字节数-有效数据-结束符 等类似这种格式 //起始符一般订为不常用的 ASII 字符 ,结束符号也是比如$,#,@这些 //假设你要发送ASII的1 2 3 4,起始符-$,结束符- //那就要发送 $ 4 1 2 3 ...
  • 请问单片机串行口同信中,若从上位机向单片机发送一字符串,单片机如何...
    答:单片机接收数据,无论是中断接收,还是查询接收,通常都是根据接收标志位,来判断接收一个字节。写程序之前,都会根据接收数据长度建立一个接收数组,比如根据协议,应该接收25个字节,那就建立一个大于等于25个字节的数组,根据判断条件(可以根据长度判断,可以根据特定字节判断),完成25个字节的接收后,再...