导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→串口通信

* 52127: 串口通信

   savage213 
savage213发表的帖子 

 串口通信
大家好,小弟有个问题向大家请教。单片机与PC机进行串口通信,单片机用的是W78E58B,
PC 机向单片机发一定格式的请求命令,单片机这边用中断做接收程序!下面是我写的程
序:
#include  <global.h>  
uchar one_temp,net_num=0;
uchar idata  comcmd1,datanum1,comlen1;//相关变量的定义
bit net_flag=0;

void serail() interrupt 4 using 1
{   
   EA=0;
   if(RI)
  {
   one_temp=SBUF;
   combuf[net_num]=one_temp;//接收
   net_num++;
    RI=0;
   if(one_temp==0x1B&&net_num==1) net_flag=1;
   if(one_temp==0x10&&net_num==2) net_flag=1;
   if(net_num==3)
     {
       comcmd1=one_temp;
       net_flag=1;
     }
   if(net_num==4)
     {
       datanum1=one_temp;
       net_flag=1;
      }
   if(net_num==5)
     {
       comlen1=one_temp;
       net_flag=1;
      }
   if(!net_flag)
     {
         sendpc(0,0,unknow_er);
         net_flag=0;
         net_num=0;
         goto end;
      }
   if(net_num>  =comlen1+2)
      {
        checkcrc=cal_crc(combuf,comlen1);
        if(*(uint *)&combuf[net_num-2]!=checkcrc) //校验
             {  net_num=0;
                sendpc(0,0,parity_bit_er);
  
              }
        else
            {
                net_num=0;//清零,为下次接收做准备
                work();//接收完成,转向处理程序
             }
       } 
   } 
end: EA=1;
}  

 void hardware()
{
 IE=0x90;
 TMOD=0x20;
 TL1=0xfa;//初始化
 TH1=0xfa;
 SCON=0x50;
 PCON=0x00;
 TR1=1;//启动定时器1
 RE=1;
 EN=0;
 CPUCardInit();
 framstop();
 XBYTE[0x0000]=0xf0;
 IE0=0;
 gettsamstate();
 gettidstate();
}
 

void main()
{  uchar i;
   hardware();     
   for(i=0;i  <160;i++)
   {
     combuf[i]=0;

    }
        
    for(;;)
      {  ;   }


 }

先硬件初始化,然后对暂存数据的idata类型的数组清零,为接收做好准备。然后循环等
待,随时有中断,直接进入中断程序。
本程序只能成功接收一次,第二次开始就不能正常接收,请高手指点迷津!老板催的急
啊!!!快回复吧,小弟向您鞠躬了!

可以发到我的信箱:savage213@eyou.com
万分感谢!!!!!!1

发表时间:2004年4月7日15:49:26

  
回复该帖

本主题共有 4 帖,分页:>>>>>该主题的所有内容[4]条

 *树形目录 只列出部分跟帖的标题以及简单的摘要信息 该主题的部分跟帖如下:

  52132.[详细]随便说说!
摘要:是否死在处理程序中,接受中断程序太乱,建议只负责接受数据,处理程序放到主程序中,接收也可用查询方式嘛,这样好控制一点![em10]......(124字)
- [guest][829次] 2004年4月7日

  52162.[详细]我必须用中断,大家看看我程序本身有没有问题?谢谢!
摘要:我必须用中断,大家看看我程序本身有没有问题?谢谢!......(50字)
- [savage213][930次] 2004年4月7日

  52272.[详细]不要用那么多IF 多用点SWITCH就好了。
摘要:不要用那么多IF  多用点SWITCH就好了。......(37字)
- [guest][939次] 2004年4月9日

[上一篇帖子]:这个正脉冲就是从比较器里出来的,只是宽度不一致。
[下一篇帖子]:各位大虾进来看看吧各位高手请研究一下,此图中的方案行得通吗。用60Hz来代替外接晶振。 [u