RS232的有关问题,理解不够,指点下吧,很急
发布时间:2010-06-14 15:56:22 文章来源:www.iduyao.cn 采编人员:星星草
RS232的问题,理解不够,指点下吧,很急啊
看到一个232的串口通信的程序,因为以前自己做的只是单字节传送,程序也较为简单。现在想了解下多字节传送看了些232协议的资料,看太快没理解上去。又看了个程序,有些不理解的地方,希望指点一下,不懂的地方已经标注。(真没时间搞这个程序了,明天月底新项目要开始)
#include <reg51.h>
#include <string.h>
#define INBUF_LEN 4
unsigned char inbuf1[INBUF_LEN];
unsigned char checksum,count3;
bit read_flag=0;
void init_serialcomm( void )
{
SCON=0x50 ;
TMOD|=0x20 ;
PCON|=0x80 ;
TH1=0xF4 ;
IE|=0x90 ;
TR1=1 ;
//TI=1;
}
void send_char_com(unsigned char ch)
{
SBUF=ch;
while(TI==0);
TI= 0;
}
void send_string_com(unsigned char *str, unsigned int strlen)
{
unsigned int k=0 ;
do
{
send_char_com(*(str + k));
k++;
}while(k<strlen);
}
void serial()interrupt 4 using 3
{
if(RI)
{
unsigned char ch;
RI=0;
ch=SBUF;
if(count3>127) //这句看不懂,为什么是127?不理解
{
count3=0;
inbuf1[count3]=ch;
checksum=ch-128; //这应该是校验,可是不懂,汗颜,求详解
}
else
{
count3++;
inbuf1[count3]=ch;
checksum^=ch;
if((count3==(INBUF_LEN-1))&&(!checksum))
{
read_flag=1;
}
}
}
}
main()
{
init_serialcomm();
while( 1 )
{
if(read_flag)
{
read_flag= 0;
send_string_com(inbuf1,INBUF_LEN);
}
}
}
------解决方案--------------------
错了 这个count3应该是ch
这个函数是接收中断 意思就是每次有效包为4个字符 第一个是大于127即最高位为1作为头标记 如果连续收到>127的则不断放过 只保留最新一个 并作为校验开始值 之后如果连续收到3个<=127的则完成接收
------解决方案--------------------
这应该是判定是否是ASCII字符,
ASCII字符只用低7位的。
------解决方案--------------------
既然用到了异或校验,那checksum是否应该初始化为0?
你把校验的代码屏蔽掉,再测试一下。
------解决方案--------------------
补充:发送和接收都会产生中断,
void serial()interrupt 4 using 3 {
if(RI) {...
}
if (TI) {...
}
...
}
------解决方案--------------------
#define INBUF_LEN 4
unsigned char inbuf1[INBUF_LEN];
else
{
count3++;
inbuf1[count3]=ch;
inbuf1这个数组这样不就溢出了。。。
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。
其他相似内容:
-
c51串口求助!
串口接收程序如下
void rec_gps(void) interrupt 4 {
uchar str;
uint i,k;
k=0;
i=0;...
-
win7运行CodeWarrior IDE出错
我的本安装了CodeWarrior IDE,一运行就会出现提示:
IDE 4.1 Build 0622 已停止工作。
或者提示:
Unha...
-
关于AT指令控制GSM短信猫的问题
C/C++ code
打开串口
BOOL CComm::OpenComm(const char* pPort,
int nBaudRa...
-
关于51中断求教
各位大虾,我现在要做一个GPS授时的小程序,遇到如下困惑,求大虾们解答:
1 线路板上带有时钟芯片,平时显示时间是...
-
atd指令拨号,如何判断电话状态
在网上找了许久,终于找到一位仁心解决方案,这个指令是可以得到手机当时的状态,但是不管是空号、欠费、...
-
知道在哪跑飞,跑飞的详细原因有谁能解释一下。
今天出现这样的问题:
将这个中断函数注释掉:
#pragma vector=USCI_B2_VECTOR
__in...
-
51程序移植到2051
大牛们,我想吧一个51的程序移植到2051中,用NXP的89V51芯片时用到的I/O口只有P1.0 P1.1 P1.2 3三个,我现在移植到AT...
-
一道课程设计题:基于单片机的波形发生器的设计
设计要求:
1.能产生正弦波、方波、三角波、锯齿波等4种周期性波形,并且可通过调节变...
-
解析单片机最小系统及相关电路
原文出自:电子发烧友论坛——单片机论坛[color=#FF0000][/color]
单片机最小系统单片机最小系统介...
-
单片机学习书籍大全推荐
在电子发烧友论坛里看到了单片机学习资料汇总,特地搜罗了过来,不知道大家看过几本,也希望让需要学习的人 都...