當前位置:編程學習大全網 - 編程語言 - 求單片機串口通信協議,做設計要求:上位機通過串口實現點亮和滅3盞LED燈,不太懂協議,最好有示例代碼

求單片機串口通信協議,做設計要求:上位機通過串口實現點亮和滅3盞LED燈,不太懂協議,最好有示例代碼

#include<reg52.h>

#define uchar unsigned char

#define uint unsigned int

uchar idata trdata[]={'R','I','C','H','M','C','U','R','Z','-','5','1','V','2','.','0',0x0d,0,0x00};

sbit K1=P3^2; //對應開發板K1按鍵

/*-------------------------------------------------------------*/

//串口初始化

void UART_Init(void)

{

SCON = 0x50; //串口工作方式為1 , 串行允許接收

//SM0=0;

//SM1=1;

//REN=1;

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

//PCON = 0x80; //SMOD = 1; 波特率加倍

TH1 = 0xfd; //波特率 9600bps fosc="11".0592MHz

TL1 = 0xfd;

ES = 1; //開串口中斷

TR1 = 1; //允許定時器1工作

EA = 1; //開總中斷

}

void delay1ms(uint i)

{

uchar j;

while(i--)

{

for(j=0;j<115;j++) //1ms基準延時程序

{

;

}

}

}

/*-------------------------------------------------------------*/

//串口發送壹個字節

void Uart_SendChar(unsigned char dat)

{

SBUF = dat; //待發送的數據寫入緩沖區

while(!TI); //等待發送完成

TI = 0; //清零發送標誌位

}

/*-------------------------------------------------------------*/

//串口發送壹個字符串

void Uart_SendString()

{ uchar

i=0;

while(trdata[i]!=0x00)

{

SBUF=trdata[i];

while(!TI);

TI=0;

i++;

}

}

/*-------------------------------------------------------------*/

//主函數

void main(void)

{

UART_Init(); //初始化串口

while(1)

{

if(K1==0)

{

delay1ms(20);

if(K1==0)

{

Uart_SendString(); //發送數據

while(!K1); //等待按鍵釋放

}

}

}

}

/*-------------------------------------------------------------*/

//串口接收中斷函數

void INT_UartRcv(void) interrupt 4

{

unsigned char Rcv = 0;

if(RI) //查詢接收標誌位(有數據發送過來時置為1)

{

RI = 0; //接收標誌位清零

Rcv = SBUF; //存儲緩沖區的數據

P1=SBUF;

Uart_SendChar(Rcv); //讓從計算機上傳到單片機的數據 , 傳回的計算機顯示

}

}

///////////////////////////////

9600波特率,P1口接LED

用串口大師發送數據,要勾選十六進制發送和接受。

發送:ff (全亮/全滅)

00 (全滅/全亮)

01 (p1.0亮/p1.0滅)

這個方式是最簡單的,

其意思就是把妳發送的十六進制數據直接賦值到P1端口

  • 上一篇:光電傳感器測轉速的原理妳知道嗎
  • 下一篇:技術員要學多少電子知識?
  • copyright 2024編程學習大全網