liuliangdt
liuliangdt
級(jí)別: 家園?
精華主題: 0
發(fā)帖數(shù)量: 446 個(gè)
工控威望: 680 點(diǎn)
下載積分: 66144 分
在線時(shí)間: 988(小時(shí))
注冊(cè)時(shí)間: 2010-09-05
最后登錄: 2024-10-23
查看liuliangdt的 主題 / 回貼
樓主  發(fā)表于: 2014-03-04 23:02
小哥是個(gè)單片機(jī)業(yè)余愛(ài)好者,接觸單片機(jī)有幾年了。但很汗顏,水平一直還在入門(mén)口徘徊。本來(lái)想弄一個(gè)類似于多站通信的網(wǎng)絡(luò)結(jié)構(gòu)程序玩。寫(xiě)相互通信就的地方卡住了,再也寫(xiě)不下去。現(xiàn)在跪求壇友幫忙,因?yàn)閷?xiě)不下去已經(jīng)幾個(gè)月沒(méi)碰單片機(jī)了。太恨了···
介紹一下通訊方案。一串信息幀有5個(gè)字節(jié)組成,主站發(fā)出一串信息幀后由對(duì)于的從站響應(yīng)。因?yàn)閺恼疽焖夙憫?yīng)所以就設(shè)計(jì)在中斷程序里回應(yīng)(回復(fù))。問(wèn)題就出在這回應(yīng)的子程序。同一個(gè)子程序,在主程序里順序執(zhí)行的時(shí)候和其它站是正常通訊。但要快速回應(yīng)還得在中斷里執(zhí)行才行。從中斷程序里發(fā)出通信信息都亂了,接收方收不到正確的信息。我已經(jīng)試過(guò)了我想到可能性,但都不對(duì)。希望壇友們幫忙找出錯(cuò)誤。在查錯(cuò)時(shí)最好要有兩塊單片機(jī)硬件聯(lián)機(jī),然后在它們RS-485信號(hào)處連到電腦的串口助手里看那些錯(cuò)誤的字節(jié)。
如有沒(méi)講請(qǐng)清楚的地方待補(bǔ)充。
描述:解壓文件
附件: 測(cè)試字符串通訊0#主機(jī)通訊.rar (23 K) 下載次數(shù):28
網(wǎng)站提示: 請(qǐng)不要用迅雷下載附件,容易出錯(cuò)
supermax
級(jí)別: 工控俠客
精華主題: 0
發(fā)帖數(shù)量: 590 個(gè)
工控威望: 2540 點(diǎn)
下載積分: 3642 分
在線時(shí)間: 375(小時(shí))
注冊(cè)時(shí)間: 2011-03-20
最后登錄: 2021-03-26
查看supermax的 主題 / 回貼
1樓  發(fā)表于: 2014-03-06 07:20
給樓主一例子,
//--------------------------------------------------------------
/*====================================
*名稱:lcd_str.c
*功能:從串口調(diào)試工具發(fā)送一字符串到單片機(jī),在lcd1602和串口調(diào)試工具上顯示【未加入校驗(yàn)】
*作者:flying 09-2-23
*修改:
======================================*/
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit lcden = P3^5;
sbit lcdrw = P3^6;
sbit lcdrs = P3^7;
uchar table[10];
uchar i, j, flag;
void delay(uint n)
{
        uint x,y;
        for( x = n; x > 0; x--)
                for( y = 110; y > 0; y-- );
}
//lcd寫(xiě)命令函數(shù)
void lcdwrite_com( uchar com )
{
        lcdrs = 0;
        lcdrw = 0;
        P0 = com;
        delay(5);
        lcden = 1;
        delay(5);
        lcden = 0;
}
//lcd寫(xiě)數(shù)據(jù)
void lcdwrite_date( uchar date )
{
        lcdrs = 1;
        lcdrw = 0;
        P0 = date;
        delay(5);
        lcden = 1;
        delay(5);
        lcden  = 0;
}
//lcd初始化
void lcd_init()
{
        lcden = 0;
        lcdwrite_com( 0x38 );//顯示模式設(shè)置
        lcdwrite_com( 0x0e );//顯示光標(biāo)
        lcdwrite_com( 0x01 );//清屏
        lcdwrite_com( 0x80 + 2 );//數(shù)據(jù)指針設(shè)置
}
//串口初始化
void serial_init()
{
        TMOD = 0x20;
        TH1 = 0xfd;         //9600赫茲
        TL1 = 0xfd;
        TR1 = 1;        //開(kāi)啟時(shí)間中斷

        SCON = 0x50;//方式2
        SM2 = 1;        //可以向cpu請(qǐng)求中斷
        EA = 1;                //開(kāi)總中斷
        ES = 1;                //開(kāi)串口中斷        
}
void putchar( uchar ch )//發(fā)送數(shù)據(jù)
{
        SBUF = ch;
        while( !TI );
        TI = 0;
}
void main()
{
        lcd_init();
        serial_init();
        while(1)
        {        
                delay(20);
                while( table[j] != '\0' && flag == 1 )
                {
                        j = j >= 10 ? 0 : j;
                        putchar( table[j] );
                        lcdwrite_date( table[j] );
                        j++;
        //                delay(10);
                }
        }
}
void Serial() interrupt 4
{
        RI = 0;
        if( SBUF != '#')//遇到#終止寫(xiě)
        {
                table = SBUF;
                i++;
        }
        else
                flag = 1;
}
本帖最近評(píng)分記錄:
  • 下載積分:+5(liuliangdt) 熱心助人!
    supermax
    級(jí)別: 工控俠客
    精華主題: 0
    發(fā)帖數(shù)量: 590 個(gè)
    工控威望: 2540 點(diǎn)
    下載積分: 3642 分
    在線時(shí)間: 375(小時(shí))
    注冊(cè)時(shí)間: 2011-03-20
    最后登錄: 2021-03-26
    查看supermax的 主題 / 回貼
    2樓  發(fā)表于: 2014-03-07 07:15
    不是一組
    supermax
    級(jí)別: 工控俠客
    精華主題: 0
    發(fā)帖數(shù)量: 590 個(gè)
    工控威望: 2540 點(diǎn)
    下載積分: 3642 分
    在線時(shí)間: 375(小時(shí))
    注冊(cè)時(shí)間: 2011-03-20
    最后登錄: 2021-03-26
    查看supermax的 主題 / 回貼
    3樓  發(fā)表于: 2014-03-07 09:06
    table,,是數(shù)組,而/**table = SBUF;**/已經(jīng)注釋了被屏蔽了在程序里不起作用。

    supermax
    級(jí)別: 工控俠客
    精華主題: 0
    發(fā)帖數(shù)量: 590 個(gè)
    工控威望: 2540 點(diǎn)
    下載積分: 3642 分
    在線時(shí)間: 375(小時(shí))
    注冊(cè)時(shí)間: 2011-03-20
    最后登錄: 2021-03-26
    查看supermax的 主題 / 回貼
    4樓  發(fā)表于: 2014-03-07 09:15
    我的原程沒(méi)有注釋的,但你發(fā)問(wèn)已經(jīng)打上注釋符
    supermax
    級(jí)別: 工控俠客
    精華主題: 0
    發(fā)帖數(shù)量: 590 個(gè)
    工控威望: 2540 點(diǎn)
    下載積分: 3642 分
    在線時(shí)間: 375(小時(shí))
    注冊(cè)時(shí)間: 2011-03-20
    最后登錄: 2021-03-26
    查看supermax的 主題 / 回貼
    5樓  發(fā)表于: 2014-03-07 09:17
    那幾句意思是:如果 j >= 10,,就 j = 0,
    只是把table 指向 sbuf,
    supermax
    級(jí)別: 工控俠客
    精華主題: 0
    發(fā)帖數(shù)量: 590 個(gè)
    工控威望: 2540 點(diǎn)
    下載積分: 3642 分
    在線時(shí)間: 375(小時(shí))
    注冊(cè)時(shí)間: 2011-03-20
    最后登錄: 2021-03-26
    查看supermax的 主題 / 回貼
    6樓  發(fā)表于: 2014-03-07 09:21
    再有不明白你最好請(qǐng)教:shi2999,,我只是他手下,他真是恐怖的高手,我的一切都他教的,我也是剛?cè)腴T(mén)。
    supermax
    級(jí)別: 工控俠客
    精華主題: 0
    發(fā)帖數(shù)量: 590 個(gè)
    工控威望: 2540 點(diǎn)
    下載積分: 3642 分
    在線時(shí)間: 375(小時(shí))
    注冊(cè)時(shí)間: 2011-03-20
    最后登錄: 2021-03-26
    查看supermax的 主題 / 回貼
    7樓  發(fā)表于: 2014-03-07 13:48
    引用
    引用第11樓liuliangdt于2014-03-07 11:27發(fā)表的  :



    一起共勉一起學(xué)習(xí)吧!
    那兩句我那樣寫(xiě)不出來(lái)。學(xué)習(xí)了。

    坦白說(shuō)我平時(shí)不學(xué)51單片的,我們?nèi)径加肁RM了。
    本帖最近評(píng)分記錄:
  • 下載積分:+5(liuliangdt) 真誠(chéng)感謝!
    supermax
    級(jí)別: 工控俠客
    精華主題: 0
    發(fā)帖數(shù)量: 590 個(gè)
    工控威望: 2540 點(diǎn)
    下載積分: 3642 分
    在線時(shí)間: 375(小時(shí))
    注冊(cè)時(shí)間: 2011-03-20
    最后登錄: 2021-03-26
    查看supermax的 主題 / 回貼
    8樓  發(fā)表于: 2014-03-09 06:59
    樓主想這貼不沉下去,幾乎不可能,因?yàn)闆](méi)幾個(gè)搞低壓工業(yè)電器又能搞單片機(jī),幾乎是百萬(wàn)中無(wú)一,你的問(wèn)題沒(méi)幾個(gè)人能答上,自學(xué)單片并能與最新技術(shù)ARM同步成功的人可能是天才中的天才,不過(guò)還是不斷地有人勇于挑戰(zhàn)這個(gè)難于登天的高峰。樓主還是多百度一下吧!