![]() |
發布時間: 2017-11-6 09:56
正文摘要:本人初入單片機,小白一枚,現在用的開發板的單片機是stc89c52, 單片機的p20---p27口接的LED,想在電腦端 用“串口調試助手”直接控制這幾個LED燈 的亮或滅, 不知道怎么寫程序,大神能幫忙寫一個嗎,我 ... |
且聽風吟1314 發表于 2017-11-7 10:05 只要把串口接收到的數據用一個函數加以解析就可以按需要控制任意端口,用這個函數替換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; } } |
且聽風吟1314 發表于 2017-11-7 10:05 你先將這個程序好好看看吧。 看這么幾個方面? 第一:串口通訊都要設置些什么寄存器? 第二:每個寄存器的值是怎么來的?可不可以改變? 第三:控制部分在哪里?為什么可以控制?(這個看懂了,你自然會控制其它I/O口了) 我這個程序,只能是個示范程序,其實真的要完成有意義的控制,還有很多內容,努力學吧,祝成功! |
wulin 發表于 2017-11-6 13:22 非常感謝,我現在通過以上程序能用串口控制這幾個LED了,但是如果要把其它P口加入到里面一起控制的話,如把p00-p07 p10-p17 一起加入用串口控制,程序要怎么改呢,麻煩了 |
我的板子和你完全一樣,我這個程序,就是串口控制LED燈的。程序功能是:用字符方式發送1,LED燈最右邊的一個亮,以字符方式發送2,燈滅。 #include<reg52.h> typedef unsigned char u8; typedef unsigned int u16; sbit LED1=P2^0; u8 receiveData; u8 n[]="12"; void UsartInit()//串口初始化函數 { SCON=0X50;//設置為工作方式1 TMOD=0X20;//設置計數器工作方式2 PCON=0X80;//波特率加倍 TH1=0XF3;//計數器初始值設置,注意波特率是4800的 TL1=0XF3; ES=1;//打開接收中斷 EA=1;//打開總中斷 TR1=1;//打開計數器 } void main() { UsartInit();//串口初始化 while(1); } void Usart() interrupt 4//中斷函數 { unsigned char m; m=SBUF; if(m==n[0]) { LED1=0; } if (m==n[1]) { LED1=1; } receiveData=SBUF;//出去接收到的數據 RI = 0;//清除接收中斷標志位 SBUF=receiveData;//將接收到的數據放入到發送寄存器 while(!TI);//等待發送數據完成 TI=0;//清除發送完成標志位 } 串口調試軟件用的STC-ISP的串口調試功能。如圖所示設置就可以了。 ![]() 注意:串口號是你的號,這里的COM3是我的。 |
且聽風吟1314 發表于 2017-11-6 10:47 還是看不明白你的意思。 |
#include <reg51.h> #define uchar unsigned char uchar ch; bit flag=0; //接收完成標志, void init_uart() { TMOD=0X20; //定時器/計算器工作模式寄存器 TH1=0XFD; //波特率9600 TL1=0XFD; //波特率9600 SCON=0X50; //串行控制寄存器 TR1=1; //開定時器T1 EA=1; //開總中斷 ES=1; //開串行口中斷 } void main() { init_uart(); while(1) { if(flag==1) //接收完成標志為1 { ES=0; //關串口中斷 flag=0; //接收完成標志清0 SBUF=ch; //發送數據 while(!TI); //等待發送中斷請求標志位為1 TI=0; //發送中斷請求標志位清0 ES=1; //開串口中斷 } P2=~ch; //LED低電平顯示收到的數據 } } void UART_interrupt() interrupt 4 { RI=0; //接收中斷請求標志位 ch=SBUF; //獲取SBUF接收到的數據 flag=1; //接收完成標志置1 } ![]() |
本帖最后由 wulin 于 2017-11-6 13:26 編輯 ahshmj 發表于 2017-11-6 10:38 |
無標題.jpg (116.01 KB, 下載次數: 38)
你去找一下單片機串口例程的源碼 然后在源碼的基礎上修改一下就可以實現了 自己多看看書 多敲敲代碼 你這個其實不難的 自己動手才有意思 |
ahshmj 發表于 2017-11-6 10:38 不好意思我小白一枚,表達不準確,我要就是燒到單片機上的那個代碼,還有 怎么設置這個穿孔助手軟件 ![]() |
單片機的接收程序?單片機設置波特率,串口中斷接收,將接收到的數據送P2口。電腦上的可以用“串口助手”。![]() |