STC单片机 串口通信 奇偶校验

现在想用stc12c5a60s2 单片机 串口向外发送字节数组,内容如下: E9 01 06 57 4A 01 F4 01 01 EF ,要求发送时 带有奇校验 ,请问程序如何编写,请大家帮帮我!可发送至邮箱2392372085@qq.com ,我这有50分酬谢!解决问题后再送您50分!
麻烦大家把我写的字节数组也写到程序中,我是新手!多谢啦!

1、51单片机SCON=0xDA,工作在方式3.(方式2也可以)

串口 1 模式 3:
波特率是可变的,其它和模式2 相同
11 位数据通过TxD/P3.1 发送,通过RxD/P3.0 接收。一帧数据包含一个起始位(0),8 个数据位(低位在
先),一个可编程的第9 位,和一个停止位(1)。发送时,第9 位数据位来自特殊功能寄存器SCON 的
TB8 位.接收时,第9 位进入特殊功能寄存器SCON 的RB8 位。
SMOD
串口1波特率在模式3 = ( 2 / 32 ) x BRT独立波特率发生器的溢出率
当SMOD = 0时,串口1波特率 = BRT 独立波特率发生器的溢出率 / 32,
当SMOD = 1时,串口1波特率 = BRT 独立波特率发生器的溢出率 / 16,
BRT独立波特率发生器的溢出率 = Fosc/12/( 256 - BRT ),当BRTx12 = 0时,
BRT独立波特率发生器的溢出率 = Fosc / ( 256 - BRT ),当BRTx12 = 1时

TB8:发送时校验位,可以奇校验或偶校验(直接置0或1),然后再发送。
RB8:接收时校验位,判断接数据是否正确。
2、程序
/*****************************************
*串口1中断
*****************************************/
void RXD_Int_Service() interrupt 4
{
uint8 ch;
if(RI)
{
RI=0;
Usart1.RxdDly=6; //超过0.3S清空计数
Usart1.RxdBuf[Usart1.RxdCnt]=ch;
Usart1.RxdCnt++;
if(Usart1.RxdCnt>=10)
{
Usart1.RxdTrue=1; //接收正确。
Usart1.RxdNum=Usart1.RxdCnt;
Usart1.RxdCnt=0;
}
}
if(TI)//防止发送中断
{
TI=0;
}
}
void Timer0_InSevice() interrupt 1
{
TH0=0xdc; //定义50ms 正常值0xfe 0x0c ,修正值:0xfe 0x16;
TL0=0x00; //11.0592MHz晶振

if(Usart1.RxdDly)
{
Usart1.RxdDly--; //0.3S没有接收到数据,清0计数。
if(Usart1.RxdDly==0)
{
Usart1.RxdCnt =0; //记数清0.
}
}
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2014-05-06

已试验通过,请下载。

追问

12c5a60s2 可以使用吗?

追答

下面是12系列的程序


追问

我用您的程序试验了,但是我的设备没有反应啊?我这数组中元素是用来驱动设备启动的,您能帮我解决吗?

第2个回答  2014-05-06
奇偶校验?

串口通信 2 端设置一致就可以了

STC单片机 串口通信 奇偶校验
1、51单片机SCON=0xDA,工作在方式3.(方式2也可以)串口 1 模式 3:波特率是可变的,其它和模式2 相同 11 位数据通过TxD\/P3.1 发送,通过RxD\/P3.0 接收。一帧数据包含一个起始位(0),8 个数据位(低位在 先),一个可编程的第9 位,和一个停止位(1)。发送时,第9 位数据位来自特殊功...

单片机在串口通信时设置奇偶校验的目的
串口通信设置奇偶校验的目的是检验接收的数据是否正确。接收的奇偶校验位,如果与发送的校验位相同,说明接收的数据是正确的。因串口通信是异步的,为了校验接收是否正确,通常要采用各种校验方法,其中奇偶校验是比较简单的方法,而比较可靠但却比较麻烦的是CRC16方法。

如何实现单片机传输数据给计算机的串口通信?
必须在单片机上编写程序,程序的功能是将从键盘的获取到的数据通过串口发送出去。单片机串口参数(如波特率、数据位、停止位、奇偶校验位等)须与电脑设置一致。

在单片机中进行异步串行通信时奇偶校验位的作用是什么呢?
通常专门设置一个奇偶校验位,用它使这组代码中“1”的个数为奇数或偶数。若用奇校验,则当接收端收到这组代码时,校验“1”的个数是否为奇数,从而确定传输代码的正确性。因此在你设定这一位后单片机会自动执行上述过程,如果校验错误会进入错误中断中。

如何用单片机实现数据的奇偶校验?
首先题目询问的应该是 发送过程中,对奇偶校验位的设置吧?在MCS51单片机系列中,对于奇校验而言,发送前,若A(ACC)中为待发送的数据,此处为 11010010,我们只需要将P(PSW.0)中的二进制值取反再放入到TB8(即此处奇偶校验位)即可。对于本题而言,待发送数据中“1”的个数为偶数共4个,因此P为0...

stm32f103单片机串口通信奇偶校验检查出错误如何处理
共发11位;收:没有奇偶校验位,共收10位。如果发出的奇偶校验位是1,接收方就会把它当做结束位,而发送方的结束位,将被认定为空闲位。 这就是正常接收了。就是说:如果发出的奇偶校验位是1,接收方,可以正常接收。但是,如果发出的奇偶校验位是0,接收方,就不能正常接收。概率,各占一半。

在单片机多机系统中,能否采用奇偶校验,为什么?
奇偶校验是一种通讯中常用的人校验机制,多用于串口通讯。

串口奇偶校验
ACC、P,都是 51 单片机里面的东西。c7,前面应该有所定义,一般是 c 的最高位。把 P 放在 c,再通过串口发送出去,就这些。

51单片机中C语言奇偶校验位如何设置
即刻生成校验位P MOV C, P MOV TB8, C ;校验位送到TB8 MOV SBUF, A ;发送数据,以及P 上述写法,是偶校验。奇校验,需要增加一条取反指令,如下:MOV C, P CPL C MOV TB8, C ;校验位送到TB8

单片机串口通信 波特率已经相同了 为什么接收有差错?
从数据很明显看到出错的都是最高位,也就是帧内最后一个数据位,所以这是波特率误差累积导致的。检查你两边通讯的波特率设置参数,检查你的串口波特率计算过程和结果,检查你的单片机的时钟精度。

相似回答