音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術 | 電源技術 | 測控之家 | EMC技術 | ARM技術 | EDA技術 | PCB技術 | 嵌入式系統(tǒng)
驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術 | 新手園地 | 單 片 機 | DSP技術 | MCU技術 | IC 設計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

請教[UART發(fā)送數(shù)據(jù)沒有問題,接收到的數(shù)據(jù)都是0]的原因

作者:pupu_x 欄目:單片機
請教[UART發(fā)送數(shù)據(jù)沒有問題,接收到的數(shù)據(jù)都是0]的原因
大家好啊,請教大家一個問題。

我用C8051F236單片機,用MAX3490作rs422接口芯片。

調(diào)試單片機程序時,發(fā)現(xiàn)單片機可以給計算機發(fā)送數(shù)據(jù),并且計算機收到的是正確的

但是計算機給單片機發(fā)送數(shù)據(jù)的時候,單片機可以進入中斷,收到數(shù)據(jù),但是收到的數(shù)據(jù)都是0

請問這是什么原因? 謝謝大家了。
單片機串口配置程序是:

void UART_Init (void)
{
SCON  = 0x50;   // SCON0: mode 1, 8-bit UART, enable RX
PCON  |= 0x80;  // SMOD=1
CKCON |= 0x10;  // Timer1使用系統(tǒng)時鐘做時基
TH1  = -(SYSCLK/BAUDRATE/16);  // Timer 1 High Byte
TL1  = 0x00;   // Timer 1 Low Byte
TMOD  |= 0x20;  // Timer1采用8位自動重載計數(shù)器(模式2)
TCON  |= 0x50;  // Timer CONTROL Register
TR1  = 1;      // Start Timer1
}

void PORT_Init(void)
{
// 配置外設
PRT0MX = 0x01;  // UART使能
PRT1MX = 0x00;  // PRT1MX: Initial Reset VALUE
PRT2MX = 0x41;  // 禁止所有端口的弱上拉,使能SPI

//配置端口輸出模式
  // PORT configuration (1 = PUSH Pull OUTPUT)
PRT0CF = 0x01;   // TX采用PUSH pull模式輸出
PRT1CF = 0x00;   // 其他端口都采用開漏輸出模式
PRT2CF = 0x10;   // NSS采用PUSH pull,其他open-drain
PRT3CF = 0x00;   //  

// View PORT pinout
  // P0.0 = UART0 TX        (PUSH-Pull OUTPUT)(DIGITAL)
  // P0.1 = UART0 RX        (Open-Drain OUTPUT/Input)(DIGITAL)
     
  // P2.0 = SPI Bus SCK     (Open-Drain OUTPUT/Input)(DIGITAL)
  // P2.2 = SPI Bus MOSI    (Open-Drain OUTPUT/Input)(DIGITAL)
  // P2.4 = CS_SPI          (Open-Drain OUTPUT/Input)(DIGITAL)
}

這是我的端口初始化的程序。在初始化時,UART的tx使用PUSH-pull模式,rx采用open drain模式。在這里我比較困惑的時候,斷口弱上拉電阻該如何設置。

串口中斷程序中,我使用了定時器0作為串口通訊超時的定時器,如果在規(guī)定的時間間隔里沒有收到計算機發(fā)送來的一幀數(shù)據(jù)中的剩余數(shù)據(jù)時,就退出串口中斷程序,防止程序在中斷程序中等待而退不出來。

現(xiàn)在我的串口中斷程序能夠收到計算機通過rs422接口盒發(fā)送過來的數(shù)據(jù),但是數(shù)據(jù)都是0。串口發(fā)送到計算機,計算機能收到正確的數(shù)據(jù)。不知道這種情況是硬件的還是軟件的問題。


單片機的中斷服務程序如下:

void UART0_ISR (void) interrupt 4
{
  uchar * tmp,counter;
  if( RI==1)
    {
      TH0 = 0x00;
      TL0 = 0x00;
      TR0 = 1;
      UART0Buf[0] = SBUF;
      RI = 0;
      while( RI==0 && UART0TimeOut==0);
      UART0Buf[1] = SBUF;
      RI = 0;
      while( RI==0 && UART0TimeOut==0);
      UART0Buf[2] = SBUF;
      RI = 0;
      tmp = &(UART0Buf[3]);
      counter = UART0Buf[2];
      do
      {
         while( RI==0 && UART0TimeOut==0);
         *tmp = SBUF;
         tmp++;
         counter--;
         RI = 0;
      }
      while( UART0TimeOut==0 && counter!=0);
      if(!UART0TimeOut)
      {
       UART0Rx_Ok = 1;  
      }
      TR0=0;    
    }
  if(TI == 1)
    {
       TI = 0;
       UART_Sending_Flag = 1;
    }
}


2樓: >>參與討論
NE5532
你的串口中斷服務函數(shù)寫得太糟了
定時器是自動加載,不需要你關心。你先調(diào)試接收1個字節(jié)的程序,通了再調(diào)這個接收多個字節(jié)的,否則不容易找到問題。

3樓: >>參與討論
pupu_x
謝謝,我先調(diào)試單字節(jié)接收
謝謝您的提醒,我先調(diào)試單字節(jié)收發(fā)能否正確。一般這種問題是硬件方面的還是軟件?

4樓: >>參與討論
NE5532
單字節(jié)不對一般就去找相關寄存器的設置問題了
 
參與討論
昵稱:
討論內(nèi)容:
 
 
相關帖子
我想做一批仿真機的PCB,需要的請跟貼!
主從機串口跟電腦通信都正常,那么主從機相連為什么就不行了?
求助:關于點陣LCD的顯示字庫問題
求 ds12887a 詳細資料,怎么編程
準備用STC12系列來設計主要看中
免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號