|
看到一个232的串口通信的程序,因为以前自己做的只是单字节传送,程序也较为简单。现在想了解下多字节传送看了些232协议的资料,看太快没理解上去。又看了个程序,有些不理解的地方,希望指点一下,不懂的地方已经标注。(真没时间搞这个程序了,明天月底新项目要开始)
#include
#include
#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
}
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);
}
}
}
|
|