首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

求助 MC9S08DZ60 SCI 模块的SCI1D不可写

本帖最后由 wjckzdh 于 2011-8-28 20:19 编辑

没那么烦,今天得空就贴一下我自己的程序,具体你自己看吧,已经隔了2年多了,因此解释不清
//===================================
//函数名:Init_SCI1
//函数功能:初始化SCI1,波特率10400
//===================================
void Init_SCI1(void)
{  
  SCI1BD = 96;        //BR=BUSCLK/(16*Baud),BUSCLK=16MHz,Baud=10417,BR=16000000/(16*10417)=96;Baud=19200,BR=16000000/(16*19200)=52
  SCI1C1 = 0x00;//
  SCI1C2 = 0x24;//0x48 仅使能发送中断 0x24 仅使能接受中断  0x6C 使能发送和接收中断
}








//==========================================
//SCI1发送中断服务程序
//==========================================
void interrupt VectorNumber_Vsci1tx SCI1_TE(void)
{
  unsigned char clrTE;

  if(SCI1S1_TC)
        {
                clrTE=SCI1S1;               
                if(nSend<nDataLen)
                {//发送的序号<总的需要发送的字节数
                        nSend++;
                        if(nSend>=nDataLen)
                        {
                          SCI1D= uartSumS;//发送数据校验和
                        }
                        else
                        {
                          SCI1D=sendTemp[nSend];        //发送下一个
                          uartSumS+=sendTemp[nSend];
                        }
                }
                else
                {
                                
      SCI1C2 = 0x24;//0x48 仅使能发送中断 0x24 仅使能接受中断  0x6C 使能发送和接收中断
                }
        }
        
}

//==========================================
//SCI1接收中断服务程序
//==========================================
void interrupt VectorNumber_Vsci1rx SCI1_RE(void)
{
  if(SCI1S1_RDRF)
  {
    SCI1S1_RDRF=0;  
    tempRec=SCI1D;
                        if(receNum<UART_MAX_REC_NUM)
                        {
                                receTemp[receNum]=tempRec;
                                receNum++;
                        }
                        else
                        {
                        //接收一帧完毕,设置一些标志,等待主程序处理
                        在主程序里处理完毕,如果要回应数据的话,要使能发送中断,在上面的发送中断里,如果全部回应数据发完要使能接收中断,以便接收下一帧数据,总之,是一种半双工方式
                                   .........
                        }
                }
  }
}
返回列表