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

* 46498: 串口中断的困惑

   linkaimu 
linkaimu发表的帖子 

 串口中断的困惑
我在写PC发送给单片机的控制程序,发现一个一个字符发送可以,整串发送就收不到。具体程序如下
unsigned char inbuf1[INBUF_LEN];
unsigned char checksum,count3;
bit           read_flag=0;

void init_serialcomm(void)
{
    SCON  = 0x50;       //SCON: serail mode 1, 8-bit UART, enable ucvr 
    TMOD |= 0x20;       //TMOD: timer 1, mode 2, 8-bit reload 
    PCON |= 0x80;       //SMOD=1; 
    TH1   = 0xF4;       //Baud:4800  fosc=11.0592MHz 
    IE   |= 0x90;       //Enable Serial Interrupt 
    TR1   = 1;          // timer 1 run 
   // TI=1; 
}

//向串口发送一个字符 
void send_char_com(unsigned char ch)  
{
    SBUF=ch;
    while(TI==0);
    TI=0;
}

//向串口发送一个字符串,strlen为该字符串长度 
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(ch>  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;  //如果串口接收的数据达到INBUF_LEN个,且校验没错, 
                               //就置位取数标志 
             }
        }
    }
}


main()
{
    init_serialcomm();  //初始化串口 
    while(1)
    {
          if(read_flag)  //如果取数标志已置位,就将读到的数从串口发出 
          {
               read_flag=0; //取数标志清0 
               send_string_com(inbuf1,INBUF_LEN);
          }
    }

}
请问是为什么?

发表时间:2003年12月19日12:28:01

  
回复该帖

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

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

  46516.[详细]如果通信速率较快,单片机来不及处理数据,会造成数据被覆盖(丢失)。建议:(1)降低波特率或提高单片..
摘要:如果通信速率较快,单片机来不及处理数据,会造成数据被覆盖(丢失)。 建议: (1)降低波特率或提高单片机时钟频率 (2)发送时数据之间加延时......(138字)
- [红心j][808次] 2003年12月19日

  46600.[详细]4800bps不算高了,应该没问题。请将情况说详细一点
摘要:4800bps不算高了,应该没问题。 请将情况说详细一点......(49字)
- [guest][940次] 2003年12月22日

  46612.[详细]发送产生中断怎么办?
摘要:......(无内容)
- [wfy74][886次] 2003年12月22日

[上一篇帖子]:请问用C如何对AT89S8252的E2PROM的双八位地址指针进行间接寻址?
[下一篇帖子]:请教keil c 程序代码压缩方法和程序优化分析相关的工具软件[求助]我现在有一