先将串口通信的初始化程序从STC-ISP软件中的波特率计算器中,把初始化程序导出来
对于STC15f2k60S2的单片机来讲,用串口1,定时器1的就可以
如果要开串口中断的话,记得串口中断号为4,即,interrupt 4
首先得解释一下,RI,TI
RI可以想成是Receive接受这个单词代表的,一般情况下等于0,
当单片机接收到PC机上发的消息,就会被置1,通常需要用软件再置0,才能继续正常工作
TI可以想成是Text接受这个单词代表的,一般情况下等于0,
当PC机接收到单片机上发的消息,就会被置1,通常需要用软件再置0,才能继续正常工作
简单的PC向单片机发送十六进制的数据:
if(RI==1)
{
RI=0;
P2=0x80;
P0=SBUF;
}
PC发送字符到数码管上显示(发字符串的话,我觉得不得行,但是可以如下两例子):
if(RI==1)
{
RI=0;
yi=SBUF;
}
发字符,然后判断,这个是在中断里的
void ser() interrupt 4//串口中断号为4
{
RI=0;
num=SBUF;
if(num==’$’)
{
P2=0x80;P0=0x55;
}
}
注:发送字符串的话,需要把发送串口调整到文本模式
接下来是,单片机向PC机发送数据:
单片机向PC机发送字符串好说,就这个函数添上去调用就可以了
void send(uchar *p)
{
uchar index=0;
do
{
SBUF=p[index++];
while(TI==0);
TI=0;
}while(p[index]!=0);
}
单片机向PC机发送数字就有点不好弄了,我们接着看
strcmp()函数属于头文件为string.h的头文件里
if(strcmp(anhao,"AAASSS")==0)//为0的时候相等
{
anhao_chuan=1;
}
向PC机发送数字的话,还是用sprintf(zifu,%d,num)函数比较好
其中sprintf(zifu,"%d",num);属于头文件<stdio.h>
zifu为存储转化后的字符的数组,num为需要转化的数字
之后再调用上面send(zifu);发送就可以
例如:
sprintf(zifu,"%d",num);
send(zifu);