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

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

串口通信好奇怪的一個(gè)問題,都2天拉,我也拿它沒脾氣拉

作者:happystar 欄目:單片機(jī)
串口通信好奇怪的一個(gè)問題,都2天拉,我也拿它沒脾氣拉
大家好啊。我用52與PC串口通信,用串口精靈調(diào)試。在程序里單步模擬執(zhí)行,程序可以運(yùn)行到程序發(fā)送數(shù)據(jù)那塊,但是硬件連接的時(shí)候PC則顯示52沒有發(fā)數(shù)據(jù),本來程序可以走到那的啊。我想請教各位。(硬件連線肯定沒問題,我用令一個(gè)程序已經(jīng)試過了),老板催的緊,這個(gè)程序調(diào)通連1/5都沒完成,小弟現(xiàn)在實(shí)在調(diào)不出來了,在此謝謝大家拉。
void initUart(void){
    T2CON = 0x30;//T2 用于波特率 9600
    RCAP2H = 0xff;
    RCAP2L = 0xdc;
    TR2 = 1;                             
    PCON = 0;
    ES = 1;

}


void initInt(void){//初始化中斷
    IP=0x10;//串口高優(yōu)先級中斷
    IE=0x9a;//中斷總允許,串口,T0,T1中斷允許
    TCON=0x05;//IT1,IT0置位
    TMOD=0x51;//T0采用定時(shí)器方式1;T1采用記數(shù)方式1
    PCON=0x00;
    SCON = 0xd0;//串口工作方式3,9位UART,波特率可變

    TH0 = TIMER_HIGHT;//T0產(chǎn)生1ms的延時(shí)初值
    TL0 = TIMER_LOW;
    TR0 = 1;

    TH1 = 0;//T1記數(shù)
    TL1 = 0;
    TR1 = 0;
    initUart();        
}   


void initProg(void){    
    initInt();
    b232Send = 0;//232設(shè)置為接受方式
}

uint crc16(uint *puchMsg, uint usDataLen){
    uchar uchCRCHi=0xFF; /* 高CRC字節(jié)初始化 */
    uchar uchCRCLo=0xFF; /* 低CRC 字節(jié)初始化 */
    uint uIndex; /* CRC循環(huán)中的索引 */
    while(usDataLen--){ /* 傳輸消息緩沖區(qū) */      
        uIndex=uchCRCHi^*puchMsg++; /* 計(jì)算CRC */
        uchCRCHi=uchCRCLo^auchCRCHi[uIndex];
        uchCRCLo=auchCRCLo[uIndex];
    }
    crc_highByte=uchCRCHi;
    crc_lowByte=uchCRCLo;
    return(crc_highByte<<8|crc_lowByte);
}

void beginSend(void){//開始發(fā)送數(shù)據(jù)    
    sendNumber=send_dataBuf[4];
    b232Send=1;    //設(shè)為發(fā)送    
    sendPosi=0;
    if(sendNumber>1)sendNumber--;//發(fā)一個(gè)數(shù)據(jù),所以發(fā)送字節(jié)數(shù)減1
    ACC=send_dataBuf[0];
    TB8=P;//偶校驗(yàn)
    SBUF=ACC;
}

void checkComm0Modbus(void){//檢查uart0數(shù)據(jù)
    if((recv_dataBuf[0]==head_s)&&(recv_dataBuf[1]==head_p)&&
    (recv_dataBuf[2]==dev_addr)){//接受完,同步頭設(shè)備地址符合且偶校驗(yàn)正確
        SWITCH(recv_dataBuf[3]){//判斷功能碼
            case 0x01: dev_up_handle1(); break;
            case 0x03:// dev_up_handle2(); break;
            case 0x05:// dev_up_handle3(); break;
            default : break;
        }
    }
}


void dev_up_handle1(){
    uchar byteCount;
    recv_crcData = crc16(recv_dataBuf,5);
//    if(recv_crcData ==((recv_dataBuf[5]<<8)|recv_dataBuf[6])){//校驗(yàn)正確,先高位再低位校驗(yàn)
        SWITCH(recv_dataBuf[4]){//判斷數(shù)據(jù)地址
            case 0x01:{//發(fā)全部測量數(shù)據(jù)
                send_dataBuf[0]=head_s;
                send_dataBuf[1]=head_p;
                send_dataBuf[2]=dev_addr;
                send_dataBuf[3]=recv_dataBuf[3];
                send_dataBuf[4]=53;//發(fā)送字節(jié)數(shù)
                byteCount=send_dataBuf[4];
                send_crcData=crc16(send_dataBuf,byteCount);
                send_dataBuf[byteCount]=send_crcData>>8;
                byteCount++;
                send_dataBuf[byteCount]=send_crcData&0x0f;
                beginSend();
                break;
            }
            case 0x02://發(fā)部分?jǐn)?shù)據(jù)`
                break;
            default: break;
//        }
    }
}


void timeProc(void){//定時(shí)處理
    b1ms=0;
    b10ms=0;
    ET0=0;//T0關(guān)中斷
    dwTickCount=dwIntTick;
    ET0=1;//開中斷
    if(reach_1ms){//到達(dá)1ms
        reach_1ms =0;
        b1ms=1;
        if(recvTimeOut>0){//判斷超時(shí)時(shí)間
            recvTimeOut--;
            if(recvTimeOut==0&&recvNumber>0){//通訊接收超時(shí)     
                b232Send=0;       //將232置為接收狀態(tài)
                recvNumber=0;      //將接收到的數(shù)清零
                checkoutError=0;
            }
        }
    }
    if(reach_10ms){ //到達(dá)10ms
        reach_10ms=0;
        b10ms=1;
    }
}

void main(void){sendNu
2樓: >>參與討論
汽車電子
Uart0.c
/* $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$  COPYRIGHT (c)  $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$                                                肖遙電子(廣州)研發(fā)中心
$                                    Shawyoo ELECTRONICS (GuangZhou) R&D Center
$                          http://www.shawyoo.com         Email: autoele@qq.com
$                         Q Q群:8502321/9069471/9069433/9524253        All rights reserved.      
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$  COPYRIGHT (c)  $$$$$$$$$$$$$$$$$$$$$$$$$$$ */
/*  
                                      文件描述
    文件名:      UART0.c
    功能描述:串口0初始化,數(shù)據(jù)鏈路層等相關(guān)程序
    編譯環(huán)境:Keil C 51
    目標(biāo)CPU:  8051
    作者:
    創(chuàng)建時(shí)間:
    建議編輯環(huán)境:UltraEdit 11.00a+  制表符寬度為三個(gè)字符,程序可讀性更好。
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
*/                                            

#define        UART0_GLOBALS

#include    "UART0.h"




/* $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
    函數(shù)名: PutString
    功能: 從串口0發(fā)送一塊數(shù)據(jù)(字符串)
    入口: 待發(fā)送的字符串?dāng)?shù)據(jù)指針
    出口: 發(fā)送成功與否標(biāo)志,成功為0,不成功為非0    
*/
uchar         PutString(uchar  *p)
{
   
    //RS485_TRANSMIT_ENABLE;          
   if(Txd.Sending)
       return 1;         // 發(fā)送失敗,需要等待
    Txd.Length = strlen(p);
    if(Txd.Length==0)
        return 1;
    TxdP = p;
    Txd.Sending = 1;
    SBUF = *TxdP;    
    return 0;
}  // End of <PutString> Function



/* $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
    函數(shù)名: PutBuffer
    功能: 從串口0發(fā)送一塊數(shù)據(jù)(16進(jìn)制)
    入口: 初始檢驗(yàn)和,數(shù)據(jù)長度,待發(fā)送的數(shù)據(jù)指針
    出口: 發(fā)送成功與否標(biāo)志,成功為0,不成功為非0
*/
uchar         PutBuffer(uchar  InitSum,uint L,uchar *p)
{
    uint16        i;
    if(Txd.Sending)
       return 1;         // 發(fā)送失敗,需要等待
   Txd.Length = L;
    TxdP = p;
    Txd.CheckSum = InitSum;
    for(i=Txd.Length;i;i--)
    {
       Txd.CheckSum ^= *p;
       p++;
    }
    *p = Txd.CheckSum;        // Add ChechSum at the end of the buffer
    Txd.Length += 1;               
    Txd.Sending = 1;
    SBUF = *TxdP;
    return 0;
}  // End of <PutBuffer> Function




/* $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
    函數(shù)名: UART0_INT
    功能:   UART0中斷函數(shù),實(shí)現(xiàn)UART0數(shù)據(jù)鏈路層數(shù)據(jù)通訊
    入口:    無
    出口:    無
*/
void            UART0_INT(void)   interrupt 4     // UART0 interrupt function
{
   static   uchar   counter;    
    uchar     i,c;
   NOP();   NOP();        
    // Transmit interrupt $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$      
   if(TI)
    {  
        NOP();    NOP();
       if(Txd.Length==0)
       {
           Txd.Sending = 0;
           //os_evt_set(UART0_TRANSMIT_OK_EVT_FLAG,tidUART0_TxdOK);   //           
       }
         if(Txd.Length)       
      {
          //RS485_TRANSMIT_ENABLE;
            Txd.Length--;          
             TxdP++;
          SBUF = *TxdP;           
          Txd.Sending = 1;
       }
       else
       {
         Txd.Sending = 0;
         //RS485_RECEIVE_ENABLE
       }  
    }
    // Receive interrupt $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
3樓: >>參與討論
汽車電子
Uart0.h
#ifndef        __UART0_H__
#define        __UART0_H__

#include    "RTOS.h"
#include        <string.h>
#include    "UserGlobals.h"


// $$$$$$$$$$$$$$$$$$ <<< Use Configuration Wizard in Context Menu >>> $$$$$$$$$$$$$$$$$
// <h>請選擇是否使用UART,不使用則不占資源

/* $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
//       <o>USE_UART: 我要使用UART? <0=> 不使用 <1=> 使用
//       <i> Default: 使用
*/
#define      USE_UART            0


// <h>UART0初始化相關(guān)配置(CPU主頻在CPU.h文件中設(shè)置)

/* $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
//       <o>USE_TIMER: 使用定時(shí)器 <1=> 定時(shí)器1 <2=> 定時(shí)器2
//       <i> Default: 定時(shí)器2
*/
#define      USE_TIMER            2

/* $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
//       <o>UART0_BPS: 串口波特率設(shè)置 <1-250000>
//       <i> Default: 9600
*/
#define      UART0_BPS            19200

/* $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
//       <o>U0_DATA_BIT: 數(shù)據(jù)位配置 <0=> 5位 <1=> 6位 <2=> 7位 <3=> 8位
//       <i> Default: 3
*/
#define      U0_DATA_BIT        3

//    <e>禁止或使能校驗(yàn)位

/* $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
//       <o>U0_CHECK_BIT_EN: 校驗(yàn)位使能 <0=> 禁止校驗(yàn) <1=> 允許校驗(yàn)
//       <i> Default: 1
*/
#define      U0_CHECK_BIT_EN  1


/* $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
//       <o>U0_CHECK_BIT: 校驗(yàn)位配置 <0=> 奇校驗(yàn) <1=> 偶校驗(yàn) <2=> 強(qiáng)制1 <3=> 強(qiáng)制0
//       <i> Default: 0
*/
#define      U0_CHECK_BIT        0

//    </e>

/* $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
//       <o>U0_STOP_BIT: 停止位配置 <0=> 1位 <1=> 2位
//       <i> Default: 0
*/
#define      U0_STOP_BIT        0

/* $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
//       <o>U0_PROIRITY: 串口中斷優(yōu)先級 <0=> 不優(yōu)先 <1=> 優(yōu)先
//       <i> Default: 1
*/
#define      U0_PROIRITY        1


/* $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
//       <o>UART0_REC_LENGTH: 接收緩沖區(qū)長度字節(jié)設(shè)置 <1-50>
//       <i> Default: 10
*/
#define        UART0_REC_LENGTH    20

/* $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
//       <o>UART0_TXD_LENGTH: 發(fā)送緩沖區(qū)長度字節(jié)設(shè)置 <1-50>
//       <i> Default: 10
*/
#define        UART0_TXD_LENGTH    2


// </h>

// </h>

// $$$$$$$$$$$$$$$$$$$ <<< end of configuration section >>> $$$$$$$$$$$$$$$$$$$$$$$$$$$$






#ifdef      UART0_GLOBALS
#define     UART0_EXT
#else
#define     UART0_EXT    extern
#endif

#define       OWN_ADDRESS      1
#define       LEAD_OK          0x55
#define       LENGTH_OK        0xaa

#define        FIFO_LENGTH            14

#define        DATA_START_ADDR    6






/* $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
    接收相關(guān)變量定義
*/
UART0_EXT    struct
{
    uchar       Buffer[UART0_REC_LENGTH];   
    uchar        CHECKSUM,OverTime;
   uchar     Command,Error,Receiving;
   uint        Counter,Length;
}  idata   Rec;


/* $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
    
*/
UART0_EXT    struct
{
   uchar   Buffer[UART0_TXD_LENGTH];
   uchar   CHECKSUM,Sending;   
   uint    Length;
}  idata     Txd;
UART0_EXT    uchar      *TxdP;


uchar         PutString(uchar  *p);
uchar          PutBuffer(uchar,uint,uchar *);
void               Uart0_SendChar(uchar );
void            ClearReceiveFlag(void);
void            ClearTransmitFlag(void);




#endif

/*
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$  End of File $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
*/

4樓: >>參與討論
汽車電子
注意初始化程序,數(shù)據(jù)鏈層協(xié)議做好就OK了
   推薦使用串口通V3.22 作串口調(diào)試

   串口通V3.22,超強(qiáng)功能...

   
    最新功能1: 接收區(qū)能混合顯示ASCII和中文,ASCII和16進(jìn)制,
    最新功能2: 能自定義設(shè)置5個(gè)換行符,顯示純16進(jìn)制顯示時(shí)能自動(dòng)換行
    最新功能3: 發(fā)送前可選擇自動(dòng)換行或清空接收區(qū)...增加接收時(shí)間
    最新功能4: 可自定義300條常用的數(shù)據(jù)或命令,可自動(dòng)輪巡發(fā)送或手動(dòng)按次序發(fā)送選中的數(shù)據(jù)

    自動(dòng)保存的路徑可選,自動(dòng)保存文件的大小可選。方便很多調(diào)試場合,更好地對事后的數(shù)據(jù)進(jìn)行分析......
    自動(dòng)保存最后配置,即打開軟件時(shí)自動(dòng)加載上次配置,方便...
    自動(dòng)清空長度可選...
    此外,還可選擇TB8作為多機(jī)通訊位...   
         
      
    特別功能: 發(fā)送/接收顯示數(shù)據(jù)支持 16進(jìn)制、10進(jìn)制和ASCII碼的混合輸入,方便更多場合調(diào)試
    兩個(gè)頻率和占空比可調(diào)的低頻簡易矩形波發(fā)生器

     發(fā)送數(shù)據(jù)舉例:
     例1: \x01\x23 \x90 \180\238 \xf0 1234567890 \n\r \xaa ABCD可輸出中文\r\n
     例2: AT+CIPSTART="TCP","168.168.168.168","1688" \r\n
     例3: AT+CIPSEND=1024\r\n
           輸入發(fā)送命令和長度后,可直接輸入10進(jìn)制、16進(jìn)制、ASCII和中文,到預(yù)定長度時(shí)自動(dòng)發(fā)送...

     自發(fā)自收測試:115200波特率,無校驗(yàn),每隔100MS發(fā)送第一次開機(jī)默認(rèn)發(fā)送區(qū)的數(shù)據(jù)(546字節(jié))。測試過程中,界面操作反應(yīng)正常,接收顯示與發(fā)送基本同步,一直測試到發(fā)送約200KB(接收區(qū)不清空),發(fā)送字節(jié)數(shù)與接收字節(jié)數(shù)相同。

   

* - 本貼最后修改時(shí)間:2006-9-28 7:53:16 修改者:汽車電子

參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
avr 169V usart 設(shè)計(jì)請教
74HC595
如何實(shí)現(xiàn)A/D轉(zhuǎn)換
用C51編寫定時(shí)器中斷程序
為什么C8051F是給老工程師用的?太古老了么?
免費(fèi)注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


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