標(biāo)題: 求大神給個(gè)單片機(jī)與電腦串口通信的程序 [打印本頁(yè)]

作者: 且聽(tīng)風(fēng)吟1314    時(shí)間: 2017-11-6 09:56
標(biāo)題: 求大神給個(gè)單片機(jī)與電腦串口通信的程序
本人初入單片機(jī),小白一枚,現(xiàn)在用的開發(fā)板的單片機(jī)是stc89c52, 單片機(jī)的p20---p27口接的LED,想在電腦端 用“串口調(diào)試助手”直接控制這幾個(gè)LED燈 的亮或滅,  不知道怎么寫程序,大神能幫忙寫一個(gè)嗎,我研究研究,謝謝了

1.jpg (18.87 KB, 下載次數(shù): 42)

1.jpg

2.jpg (45.22 KB, 下載次數(shù): 44)

2.jpg

作者: ahshmj    時(shí)間: 2017-11-6 10:38
單片機(jī)的接收程序?單片機(jī)設(shè)置波特率,串口中斷接收,將接收到的數(shù)據(jù)送P2口。電腦上的可以用“串口助手”。

作者: 且聽(tīng)風(fēng)吟1314    時(shí)間: 2017-11-6 10:47
ahshmj 發(fā)表于 2017-11-6 10:38
單片機(jī)的接收程序?單片機(jī)設(shè)置波特率,串口中斷接收,將接收到的數(shù)據(jù)送P2口。電腦上的可以用“串口助手”。 ...

不好意思我小白一枚,表達(dá)不準(zhǔn)確,我要就是燒到單片機(jī)上的那個(gè)代碼,還有 怎么設(shè)置這個(gè)穿孔助手軟件
作者: 袁凱    時(shí)間: 2017-11-6 11:30
你去找一下單片機(jī)串口例程的源碼  然后在源碼的基礎(chǔ)上修改一下就可以實(shí)現(xiàn)了  自己多看看書 多敲敲代碼  你這個(gè)其實(shí)不難的
自己動(dòng)手才有意思
作者: wulin    時(shí)間: 2017-11-6 11:59
本帖最后由 wulin 于 2017-11-6 13:26 編輯
ahshmj 發(fā)表于 2017-11-6 10:38
單片機(jī)的接收程序?單片機(jī)設(shè)置波特率,串口中斷接收,將接收到的數(shù)據(jù)送P2口。電腦上的可以用“串口助手”。 ...
發(fā)錯(cuò)了,撤銷........


無(wú)標(biāo)題.jpg (116.01 KB, 下載次數(shù): 38)

無(wú)標(biāo)題.jpg

作者: wulin    時(shí)間: 2017-11-6 13:22
#include <reg51.h>
#define uchar unsigned char
uchar ch;
bit flag=0;                //接收完成標(biāo)志,

void init_uart()
{
        TMOD=0X20;         //定時(shí)器/計(jì)算器工作模式寄存器
        TH1=0XFD;         //波特率9600
        TL1=0XFD;         //波特率9600
        SCON=0X50;         //串行控制寄存器
        TR1=1;             //開定時(shí)器T1
        EA=1;                //開總中斷
        ES=1;                //開串行口中斷   
}

void main()
{
        init_uart();
        while(1)
        {
                if(flag==1)                //接收完成標(biāo)志為1
                {
                        ES=0;                //關(guān)串口中斷
                        flag=0;                //接收完成標(biāo)志清0
                        SBUF=ch;                //發(fā)送數(shù)據(jù)
                        while(!TI);        //等待發(fā)送中斷請(qǐng)求標(biāo)志位為1
                        TI=0;                //發(fā)送中斷請(qǐng)求標(biāo)志位清0
                        ES=1;                //開串口中斷
                }
                P2=~ch;                        //LED低電平顯示收到的數(shù)據(jù)

        }
}
void UART_interrupt() interrupt 4
{
        RI=0;     //接收中斷請(qǐng)求標(biāo)志位                 
        ch=SBUF;        //獲取SBUF接收到的數(shù)據(jù)
        flag=1;        //接收完成標(biāo)志置1      
}


作者: ahshmj    時(shí)間: 2017-11-6 15:34
且聽(tīng)風(fēng)吟1314 發(fā)表于 2017-11-6 10:47
不好意思我小白一枚,表達(dá)不準(zhǔn)確,我要就是燒到單片機(jī)上的那個(gè)代碼,還有 怎么設(shè)置這個(gè)穿孔助手軟件[em04 ...

還是看不明白你的意思。
作者: HC6800-ES-V2.0    時(shí)間: 2017-11-7 09:36
我的板子和你完全一樣,我這個(gè)程序,就是串口控制LED燈的。程序功能是:用字符方式發(fā)送1,LED燈最右邊的一個(gè)亮,以字符方式發(fā)送2,燈滅。
#include<reg52.h>

typedef unsigned char u8;
typedef unsigned int u16;

sbit LED1=P2^0;

u8 receiveData;
u8 n[]="12";

void UsartInit()//串口初始化函數(shù)
{
        SCON=0X50;//設(shè)置為工作方式1
        TMOD=0X20;//設(shè)置計(jì)數(shù)器工作方式2
        PCON=0X80;//波特率加倍
        TH1=0XF3;//計(jì)數(shù)器初始值設(shè)置,注意波特率是4800的
        TL1=0XF3;
        ES=1;//打開接收中斷
        EA=1;//打開總中斷
        TR1=1;//打開計(jì)數(shù)器
}

void main()
{
        UsartInit();//串口初始化
        while(1);
}

void Usart() interrupt 4//中斷函數(shù)
{
        unsigned char m;
        m=SBUF;
        if(m==n[0])
        {
                LED1=0;
        }         
        if (m==n[1])
        {
                LED1=1;
        }
        receiveData=SBUF;//出去接收到的數(shù)據(jù)
        RI = 0;//清除接收中斷標(biāo)志位
        SBUF=receiveData;//將接收到的數(shù)據(jù)放入到發(fā)送寄存器
        while(!TI);//等待發(fā)送數(shù)據(jù)完成
        TI=0;//清除發(fā)送完成標(biāo)志位
}


串口調(diào)試軟件用的STC-ISP的串口調(diào)試功能。如圖所示設(shè)置就可以了。


注意:串口號(hào)是你的號(hào),這里的COM3是我的。

作者: 且聽(tīng)風(fēng)吟1314    時(shí)間: 2017-11-7 10:05
wulin 發(fā)表于 2017-11-6 13:22
#include
#define uchar unsigned char
uchar ch;

非常感謝,我現(xiàn)在通過(guò)以上程序能用串口控制這幾個(gè)LED了,但是如果要把其它P口加入到里面一起控制的話,如把p00-p07  p10-p17 一起加入用串口控制,程序要怎么改呢,麻煩了
作者: HC6800-ES-V2.0    時(shí)間: 2017-11-7 11:26
且聽(tīng)風(fēng)吟1314 發(fā)表于 2017-11-7 10:05
非常感謝,我現(xiàn)在通過(guò)以上程序能用串口控制這幾個(gè)LED了,但是如果要把其它P口加入到里面一起控制的話,如 ...

你先將這個(gè)程序好好看看吧。
看這么幾個(gè)方面?
第一:串口通訊都要設(shè)置些什么寄存器?
第二:每個(gè)寄存器的值是怎么來(lái)的?可不可以改變?
第三:控制部分在哪里?為什么可以控制?(這個(gè)看懂了,你自然會(huì)控制其它I/O口了)
我這個(gè)程序,只能是個(gè)示范程序,其實(shí)真的要完成有意義的控制,還有很多內(nèi)容,努力學(xué)吧,祝成功!
作者: wulin    時(shí)間: 2017-11-7 11:41
且聽(tīng)風(fēng)吟1314 發(fā)表于 2017-11-7 10:05
非常感謝,我現(xiàn)在通過(guò)以上程序能用串口控制這幾個(gè)LED了,但是如果要把其它P口加入到里面一起控制的話,如 ...

只要把串口接收到的數(shù)據(jù)用一個(gè)函數(shù)加以解析就可以按需要控制任意端口,用這個(gè)函數(shù)替換P2=~ch;
void service()
{
        switch(ch)
        {
                case 0x01: P0=0X0F; break;
                case 0x02: P1=0Xf0; break;
                case 0x03: P2=0X55; break;
                ......
                ......
                case 0xff: P1=0Xaa; break;
                default: break;
        }       
}




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