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

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

沒人理俺,只好舔著臉舊貼重提拉,

作者:happystar 欄目:單片機(jī)
沒人理俺,只好舔著臉舊貼重提拉,
大家好啊。我用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){sendNumber=0x10;
recv_d
2樓: >>參與討論
1dqmoon
re
你改一下程序,讓這個(gè)程序發(fā)一批數(shù)據(jù),在keil的debug下觀察serial口,看有沒有數(shù)據(jù), 單步執(zhí)行不可靠,也許是邏輯上的錯(cuò)誤


ps:能不能把你的頭定義也帖出來?方便別人幫你調(diào)試

3樓: >>參與討論
happystar
頭文件
#include <reg52.h>
typedef unsigned CHAR uCHAR;
typedef unsigned CHAR uint;
const uCHAR code auchCRCHi[] = { /* CRC 高位字節(jié)值表 */
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40
} ;

const uCHAR code auchCRCLo[] = { /* CRC低位字節(jié)值表*/
0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06,
0x07, 0xC7, 0x05, 0xC5, 0xC4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD,
0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09,
0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A,
0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC, 0x14, 0xD4,
0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3,
0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3,
0xF2, 0x32, 0x36, 0xF6, 0xF7, 0x37, 0xF5, 0x35, 0x34, 0xF4,
0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A,
0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29,
0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF, 0x2D, 0xED,
0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26,
0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60,
0x61, 0xA1, 0x63, 0xA3, 0xA2, 0x62, 0x66, 0xA6, 0xA7, 0x67,
0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F,
0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68,
0x78, 0xB8, 0xB9, 0x79, 0xBB, 0x7B, 0x7A, 0xBA, 0xBE, 0x7E,
0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5,
0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71,
0x70, 0xB0, 0x50, 0x90, 0x91, 0x51, 0x93, 0x53, 0x52, 0x92,
0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C,
0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B,
0x99, 0x59, 0x58, 0x98, 0x88, 0x48, 0x49, 0x89, 0x4B, 0x8B,
0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C,
0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42,
0x43, 0x83, 0x41, 0x81, 0x80, 0x40
} ;
#define dev_addr 0x01//設(shè)備地址
#define head_s 0x53//同步頭
#define head_p 0x50
#define TIMER_HIGHT 0xfc//T0采用方式1,延時(shí)1ms
#define TIMER_LOW 0x65

uCHAR bdata flag_data;
sbit b232Send=flag_data^0;//1表示232發(fā)送,0表示接受(***定義為運(yùn)行燈***)
sbit reach_1ms=flag_data^1;//T0到達(dá)1ms標(biāo)志
sbit reach_10ms=flag_data^2;//T0到達(dá)10ms標(biāo)志
sbit b1ms=flag_data^3;
sbit b10ms=flag_data^4;

uCHAR idata send_dataBuf[55];
uCHAR idata recv_dataBuf[8];
uCHAR sendNumber,recvNumber;
uCHAR idata checkoutError;// ==2 偶校驗(yàn)錯(cuò)
uCHAR idata recvTimeOut;
uCHAR idata sendPosi;//發(fā)送位置
uint recv_crcData,send_crcData;
uCHAR crc_highByte;
uCHAR crc_lowByte;
uint  dwTickCount,dwIntTick;    //時(shí)鐘
uCHAR idata c10ms;            //10ms 計(jì)時(shí)
void dev_up_handle1();


參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
protel99se里用LED沒錯(cuò),換成DIODE就出錯(cuò)了
求助關(guān)于HEX2BIN!
430的抗干擾能力不行
請教,中文點(diǎn)陣字庫在單片機(jī)驅(qū)動LED中是怎么運(yùn)用的.謝
懷著辭職的心理工作,大家是怎么看的?
免費(fèi)注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


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