欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
51單片機多機通信源碼
[打印本頁]
作者:
落星
時間:
2018-7-16 12:05
標題:
51單片機多機通信源碼
單片機源程序如下:
#include <reg52.h>
#include <string.h>
#include <stdio.h>
#define uchar unsigned char
#define uint unsigned int
#define addr1 0x00 //本機地址
#define led P2
uint buff_size = 15; //設置緩存大小
uint dat_count; //單次接收數(shù)據(jù)總數(shù)
uint buff_lenght; //計算接收數(shù)據(jù)長
bit buff_useful; //是否接收到字符串
uchar Read_buff[16]; //設置接收字符串
uchar *control = ""; //控制LED
bit getAddr = 0; //判斷連接
void Serial_write(uchar dat);
void Serial_print(uchar *STR);
void Serial_println(uchar *STR);
uint Serial_available();
uchar* Serial_Read();
void setup();
void loop();
void controlLED();
/*******************************************************************************
* 函數(shù)名 : delay10us(uint u)
* 函數(shù)功能 : 延時u*10 us
* 輸入 : uint u
* 輸出 : 無
*******************************************************************************/
void delay10us(uint u) //誤差 0us
{
unsigned char a,b;
for( ; u > 0 ; u --)
for(b=1;b>0;b--)
for(a=1;a>0;a--);
}
/*******************************************************************************
* 函數(shù)名 : delay(uint u)
* 函數(shù)功能 : 延時ums
* 輸入 : uint u
* 輸出 : 無
*******************************************************************************/
void delay(uint u) //延時ums 12M晶振誤差 0us
{
unsigned char a,b;
for( ; u > 0 ; u --)
for(b=199;b>0;b--)
for(a=1;a>0;a--);
}
/*******************************************************************************
* 函數(shù)名 : setup()
* 函數(shù)功能 : 初始化串口中斷
* 輸入 : 無
* 輸出 : 無
*******************************************************************************/
void beginINIT()
{
SCON=0Xf0; //設置為工作方式3,打開接收允許位
TMOD=0X20; //設置計數(shù)器1,工作方式2
PCON=0X80; //波特率加倍
TH1=0XF3; //計數(shù)器初始值設置,注意波特率是4800的
TL1=0XF3;
ES=1; //打開接收中斷
EA=1; //打開總中斷
TR1=1; //打開計數(shù)器
dat_count = 0;
buff_lenght = 0;
buff_useful = 0;
}
/*******************************************************************************
* 函數(shù)名 : serial()
* 函數(shù)功能 : 串口中斷,讀取串口數(shù)據(jù)
* 輸入 : 無
* 輸出 : 無
*******************************************************************************/
void serial()interrupt 4
{
uchar temp;
if(RI == 1)
{
temp = SBUF;
RI = 0;
if(RB8)
{
if(temp == addr1) //從機1
{
Serial_write(addr1);
getAddr = 1;
}
}
else if(getAddr)
{
getAddr = 0;
if(dat_count < buff_size && temp != '\r' && temp != '\n') //判斷接收結束
{
uint i;
if(dat_count == 0)
for(i = 0; i < buff_size;i ++) //清空接收緩存
Read_buff[i] = ' ';
Read_buff[dat_count] = temp; //將數(shù)據(jù)存入存儲
buff_useful = 0;
dat_count ++;
buff_lenght = dat_count; //獲取接收字符串長度
}
else
{
dat_count = 0;
buff_useful = 1;
}
}
}
}
/*******************************************************************************
* 函數(shù)名 : Serial_write(uchar dat)
* 函數(shù)功能 : 串口發(fā)送一個字節(jié)數(shù)據(jù)
* 輸入 : uchar dat
* 輸出 : 無
*******************************************************************************/
void Serial_write(uchar dat)
{
ES=0;
SBUF = dat;
while(!TI); //等待發(fā)送完成
TI = 0;
ES=1;
}
/*******************************************************************************
* 函數(shù)名 : Serial_print(uchar *STR)
* 函數(shù)功能 : 串口發(fā)送字符串
* 輸入 : uchar *STR
* 輸出 : 無
*******************************************************************************/
void Serial_print(uchar *STR)
{
while(*STR)
{
Serial_write(*(STR++));
}
}
/*******************************************************************************
* 函數(shù)名 : Serial_println(uchar *STR)
* 函數(shù)功能 : 串口發(fā)送字符串,并加上回車
* 輸入 : uchar *STR
* 輸出 : 無
*******************************************************************************/
void Serial_println(uchar *STR)
{
uchar *STR2 = "\r\n"; //回車做結束符
while(*STR)
{
Serial_write(*(STR++));
}
while(*STR2)
{
Serial_write(*(STR2++)); //發(fā)送回車做結束符
}
}
/*******************************************************************************
* 函數(shù)名 : Serial_available()
* 函數(shù)功能 : 判斷串口是否接收數(shù)據(jù)
* 輸入 : buff_useful
* 輸出 : 無
*******************************************************************************/
uint Serial_available()
{
return buff_useful;
}
/*******************************************************************************
* 函數(shù)名 : Serial_Read()
* 函數(shù)功能 : 讀取串口是接收的一個字節(jié)數(shù)據(jù)
* 輸入 : temp
* 輸出 : 無
*******************************************************************************/
uchar* Serial_Read()
{
uchar *p="";
if(buff_useful)
p = Read_buff;
buff_useful = 0;
return p;
}
/*******************************************************************************
* 函數(shù)名 : main()
* 函數(shù)功能 : 程序入口
* 輸入 : 無
* 輸出 : 無
*******************************************************************************/
void main()
{
setup();
while(1)
loop();
}
/*******************************************************************************
* 函數(shù)名 : controlLED()
* 函數(shù)功能 : 串口控制LED函數(shù)
* 輸入 : 無
* 輸出 : 無
*******************************************************************************/
void controlLED()
{
if(buff_useful)
control = Serial_Read();
if(strstr(control,"led_on") != NULL)
led = 0x00;
if(strstr(control,"led_off") != NULL)
led = 0xff;
}
/*******************************************************************************
* 函數(shù)名 : setup()
* 函數(shù)功能 : 初始化函數(shù)
* 輸入 : 無
* 輸出 : 無
*******************************************************************************/
void setup()
{
beginINIT();
}
/*******************************************************************************
* 函數(shù)名 : loop()
* 函數(shù)功能 : 功能函數(shù)
* 輸入 : 無
* 輸出 : 無
*******************************************************************************/
void loop()
{
controlLED();
}
復制代碼
所有資料51hei提供下載:
單片機多機通信程序.rar
(54.53 KB, 下載次數(shù): 44)
2018-7-16 11:59 上傳
點擊文件名下載附件
單片機多機通信主機從機程序源碼
下載積分: 黑幣 -5
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1