當前位置:編程學習大全網 - 源碼下載 - 跪求:基於RS485的PC機與多單片機通信,要求PC機使用串口調試助手發送*1#指令給單片機時,單片機的led點亮。

跪求:基於RS485的PC機與多單片機通信,要求PC機使用串口調試助手發送*1#指令給單片機時,單片機的led點亮。

這個很簡單,我來教妳玩:

首先我們說下硬件接法,USB轉485信號電路塊(只要20元,貴了的都是坑妳的),MAX485芯片,11.0592M晶振(這個頻率的晶振產生的波特率誤差低)

思路:利用串口中斷方式對P0口的LED進行控制(我只是舉例,程序妳自己寫)

程序如下:

#include <reg51.h> //選用晶振11.0592MHz

#define AddressID 0x31 //本機地址1

sbit RS485E=P3^7; //定義485的使能腳// RS5485E=0為接收狀態 RS5485E=1為發送狀態

sbit MAX485_DIR=P3^7;

main()

{

//****************通訊設置

SCON = 0xF0; //REN=1允許串行接受狀態,串口工作模式3,SM2=1

TMOD|= 0x20; //定時器工作方式2

PCON|= 0x80; //波特率提高壹倍

IP=0x10; //串口優先級高

TH1 = 0xf4; //fa // //baud*2 /* 波特率4800、數據位8、停止位1。效驗位無 (11.0592M)

TL1 = 0xf4;

TR1 = 1; //開啟定時器1

EA = 1; // 開總中斷

ES = 1; //開串口中斷

RS485E=0; // RS5485E=0為接收狀態 RS5485E=1為發送狀態

while(1);

}

void counter4(void) interrupt 4 using 2 //串口中斷

{

while(RI==0);

RI=0;

if(SBUF==0x2a) //2a的ASCII碼是*

{

while(RI==0);

RI=0;

if(SBUF==AddressID) //發送本地地址31的ASCII碼是1

{

while(RI==0);

RI=0;

if(SBUF==0x23) //23的ASCII碼是#

{

P0=254; //P0=1111 1110,這裏寫妳要對LED控制的程序

}

}

}

}

就是這麽簡單,已經調試通過,註釋也有

PS:回答問題五天後的補充:解決了問題不追問,不給分,這個樓主不厚道,鑒定完畢 !

  • 上一篇:請問用java如何對文件進行加密解密?
  • 下一篇:手機閱讀app開發有哪些要點
  • copyright 2024編程學習大全網