标题:
单片机串口通信为什么发出的字节最后会自带0XFF
[打印本页]
作者:
机智的愚人
时间:
2018-6-16 20:57
标题:
单片机串口通信为什么发出的字节最后会自带0XFF
单片机串口通信 为什么单片机发出的字节最后会自带0XFF
程序代码如下:
#include <REG52.H>
#define uchar unsigned char
uchar a,flag,i;
uchar code table[]={0xff,0x01,0x00,0x00,0x02,0x00,0x00,0x03,0x00,0x00,0x04,0x00,0x00,0xee};
void main()
{
TMOD=0x20;//定时器工作方式,8位数据自动重装
TH1=0xFD;//高8位,低8位装入的初值一样
TL1=0xFD;//串口通信方式为1,波特率为9600bps,装入初值;
//SMOD所在的PCON寄存器中的值默认为0,所以SMOD为0;
TR1=1;//打开定时器
REN=1;//打开串口允许接收位
SM0=0;//串口通信方式为1
SM1=1;
EA=1;//打开总中断
ES=1;//串口中断允许位
while(1)
{
if(flag==1)//中断函数开始
{
ES=0;//关闭中断允许位,防止出错
for(i=0;i<14;i++)//传送固定字符位
{
SBUF=table[i];
while(!TI);//判断有无中断申请
TI=0;//传输数据后清零
}
SBUF=a;//将期望字符送给传送SBUF缓冲寄存器
while(!TI);//传输申请中断
TI=0;//清零
ES=1;//串口中断允许位
flag=0;//标志位清零
}
}
}
void ser() interrupt 4
{
RI=0;//将要接收数据中断申请,RI清零
P1=SBUF;
a=SBUF;//SBUF中为接收的数据
flag=1;//标志位置1
}
复制代码
作者:
lzts88
时间:
2018-6-17 12:14
中断程序有问题, 串口中断是接收和发送共用一个中断. 你主程序有发送, 发送完成后也进中断, 中断处理你又当接收中断处理了.
void ser() interrupt 4
{
if (RI) { //接收中断
RI=0;//将要接收数据中断申请,RI清零
P1=SBUF;
a=SBUF;//SBUF中为接收的数据
flag=1;//标志位置1
}
else TI = 0; //发送中断不处理
}
作者:
yzwzfyz
时间:
2018-6-17 17:34
本帖最后由 yzwzfyz 于 2018-6-18 14:22 编辑
你如何证明“单片机发出的字节最后会自带0XFF”呢?
作者:
wulin
时间:
2019-12-27 10:14
楼主的程序是单片机串口收到一个字节数据并保存在变量a,主程序if(flag==1)开始回传数组中14个字节,最后回传收到的一个字节,一共回传15个字节。如果上位机发送0xff,那么收到的15个字节最后一定是0xff。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1