打印

关于mc9s12dg128里面SCI中断接收的问题

[复制链接]
3825|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yetboy|  楼主 | 2007-11-21 10:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我写了一道PC写单片机通讯的程序,PC用串口助手发送ASCII字符过来,单片机接收。每当串口助手一次过发几个字符时,单片机接收第一个字符是正常的,后面的全都出错了,SCI0SR1_IDLE位置1。但用串口助手将字符一个一个地发时,接收又正常。不知道哪里出错了,望各位指点一下,谢谢。程序如下:


#include <hidef.h>
#include <string.h>  
#include <mc9s12dg128.h>
#pragma LINK_INFO DERIVATIVE "mc9s12dg128b"

char i;
char re[3];

#pragma  CODE_SEG __NEAR_SEG NON_BANKED        
interrupt 20 void SCI0_rx(void)


    if(SCI0SR1 & 0x20){  

        re=SCI0SR1;
        re=SCI0DRL;
        i++;
        if(i==3)i=0;
    }        
}

    
#pragma CODE_SEG  DEFAULT

//  SCI参数设置 
     
void Init_SCI(void)
{
                    
    SCI0BDL=52;            
    SCI0BDH=0;          //CLOCK=16MHz,  bps=9600                      
    SCI0CR1=0x14;      //8 bit, 无效验                                                  
    SCI0CR2=0x2C;      //中止符产生器关闭
    SCI0CR2 |= 0x80;        /*Enable TDRE interrupt*/


void main(void) 

  Init_SCI();
  DDRB = 0Xff;
  PORTB = 0XAA;
  EnableInterrupts;
        
  for (;;)
  {}        
}

相关帖子

沙发
张明峰| | 2007-11-21 13:10 | 只看该作者

立即发回去看看

if(SCI0SR1 & 0x20){  

        re=SCI0SR1;
        re=SCI0DRL;
        SCI0DRL = re
        i++;
        if(i==3)i=0;
}        

如果PC接收显示数据错误,最大可能是双方波特率或停止位长度不一致。
如果PC接收显示数据正常,看你自己数据处理程序吧。

使用特权

评论回复
板凳
yetboy|  楼主 | 2007-11-21 16:29 | 只看该作者

找到原因了

原来我将SCI0CR1里面的M位设成1了,改SCI0CR1=0x04就行了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

18

帖子

0

粉丝