標(biāo)題: 一個(gè)串口程序,想讓兩個(gè)單片機(jī)相互通訊、控制,哪位大神可以幫我看看哪里出錯(cuò)了 [打印本頁]

作者: 咖啡天下    時(shí)間: 2017-11-14 19:15
標(biāo)題: 一個(gè)串口程序,想讓兩個(gè)單片機(jī)相互通訊、控制,哪位大神可以幫我看看哪里出錯(cuò)了
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
sbit k1=P3^4;
sbit k2=P3^5;
sbit k3=P3^6;
sbit k4=P3^7;

uchar key;
uchar code table[]={0x00,0x06,0x5b,0x4f,0x66};

void display(uchar num)
{
        P0=table[num];
        dula=1;
        dula=0;
}

void send(uchar dat)
{
        SBUF=dat;
        while(!TI);
        TI=0;
}

uchar receive(void)      
{
        uchar dat;
       
        while(RI==0);                  
        RI=0;                          
        dat=SBUF;                     
        return dat;                    
}

void keyscan()
{
        if(k1==0)
                key=1;
        if(k2==0)
                key=2;
        if(k3==0)
                key=3;
        if(k4==0)
                key=4;
                send(key);
}

void main(void)
{
        TMOD=0x20;                    
        SCON=0x50;                     
        PCON=0x00;                    
        TH1=0xf4;                     
        TL1=0xf4;
        TR1=1;                        
        REN=1;                        
        P0=0xfe;
        wela=1;
        wela=0;
        P0=0;
        dula=1;
        dula=0;
        while(1)
        {
                display(receive());
                keyscan();
        }
}


作者: HC6800-ES-V2.0    時(shí)間: 2017-11-15 08:35
看到你只有一個(gè)程序,是不是就是說:你的兩臺(tái)單片機(jī)都是同樣的程序?
如果是,那么程序是有問題的:
就是display()函數(shù),它要調(diào)用receive()函數(shù)傳遞數(shù)據(jù),但只要運(yùn)行到這個(gè)函數(shù),單片機(jī)就死在這里了,因?yàn)椴粫?huì)有機(jī)會(huì)去執(zhí)行keyscan()函數(shù),就不會(huì)有發(fā)送,沒有發(fā)送,就沒有接收,所以,RI永遠(yuǎn)為零,程序就死這里了。
作者: 咖啡天下    時(shí)間: 2017-12-9 20:17
HC6800-ES-V2.0 發(fā)表于 2017-11-15 08:35
看到你只有一個(gè)程序,是不是就是說:你的兩臺(tái)單片機(jī)都是同樣的程序?
如果是,那么程序是有問題的:
就是 ...

嗯嗯,謝謝你,




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1