📄 main.c
字号:
/*************************************************************************************************
* 文 件 名:485c.c
* 功 能:485从机通信模块
* 硬件条件: 1.CPU型号:ATMEL2051
* 2.晶振:11.0592
* 作 者:zwb
* 日 期:2009年04月27号
*************************************************************************************************/
//-----------------------函数声明,变量定义--------------------------------------------------------
#include <reg51.h>
//#include <INTRINS.H>
#include <lcd1602.h>
#include <string.h>
#define unchar unsigned char
#define COUNT 10 // 定义发送缓冲区大小
unchar send_buffer[COUNT]={0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a}; //定义发送缓冲区
unchar COM_dzdata[2]={0x41,0x42};//定义从机地址和命令
unchar receive_buffer[2];//定义接受缓冲区
unchar Dis_horse[3];
unchar point=0; //定义接收数据个数指示变量
unchar FIFO; //定义从机通信缓冲区1字节
bit flag,lab=0;
sbit L0 = P3^5;
sbit L1 = P3^7;
//========================================================================================
//函数名称:delay()
//输入函数:无
//输出函数:无
//函数功能:延时子函数
//=======================================================================================
void delay(void)
{
unchar i=124;
while(i--);
}
//--------------------------------------------------------------------------------------------------
// 函数名称: UART_init()串口初始化函数
// 函数功能: 在系统时钟为11.059MHZ时,设定串口波特率为9600bit/s
// 串口接收中断允许,发送中断禁止
//--------------------------------------------------------------------------------------------------
void UART_init()
{
//初始化串行口和波特率发生器
SCON =0xf0; //选择串口工作方式3,打开接收允许
TMOD =0x20; //定时器1工作在方式2
PCON = 0x80; //波特率加倍
TH1 =0xf4; //实现波特率4800(系统时钟11.0592MHZ)
TL1 =0xf4;
TR1 =1; //启动定时器T1
ET1 =1;
EA = 1;
}
//--------------------------------------------------------------------------------------------------
// 函数名称: COM_send()串口发送函数
// 函数功能: 把数据缓冲区的十位数据发送出去
//--------------------------------------------------------------------------------------------------
void COM_send(void)
{
if(flag==1)//从机发送数据判断位
{
for(point=0;point<10;point++) //连续发送十位数据
{
SBUF=send_buffer[point];
while(TI==0);
TI=0;
}
flag=0;//发送完数据后从机重新处于多机通信状态(即只能接收地址)
lab=0;
SM2=1;
L1=1;
}
}
//==================================================================================
//函数名称:Send_display()
//输入变量:
//输出变量:
//函数功能:发送从机自加数列值给主机
//===================================================================================
void Send_display(void)
{
for(point=0;point<3;point++)
{
SBUF=Dis_horse[point];
while(TI==0);
TI=0;
}
}
//===================================================================
//函数名称:Receive_COM ()
//输入变量:无
//输出变量:Receive_COM 接受主机发来的地址和命令,
//函数功能:核对是否为本机地址和命令,并置SM2=0;允许从机接受数据
//===================================================================
void Receive_COM(void)
{
if((RI==1)&&(lab==0))
{
RI=0;
FIFO=SBUF;
receive_buffer[0]=FIFO;
lab=1;
// if(strcmp(receive_buffer,COM_dzdata)==0)//核对主机发来的地址是否为从机地址
if(FIFO==0x41)
{
SM2=0;//是从机地址则允许从机接受数据
lab=1;
}
}
if(SM2==0)
{
L0=1;
if(RI==1)
{
FIFO=SBUF;
receive_buffer[1]=FIFO;
flag=1;
LCD_set_position(0x08); //显示接受到得主机命令
LCD_prints(receive_buffer);
}
delay();
COM_send();//正确则调用发送程序
}
}
void delay_1s(void)
{
unchar j;
for(j=0;j<255;j++)
{delay();}
}
//--------------------------------------------------------------------------------------------------
// 函数名称: 主函数
// 函数功能: 调度个子函数,完成通信过程
//--------------------------------------------------------------------------------------------------
void main(void)
{
unsigned int i=0;
L0=0;
L1=0;
flag=0;
lab=0;
UART_init();//初始化串口
LCD_initial();
DispStrPosi("RFID:",0,0);
do
{
Receive_COM();//接受命令和地址
Dis_horse[0]= i/100%10 + '0';
Dis_horse[1]= i/10%10 + '0';
Dis_horse[2] = i%10 + '0';
delay_1s();
i++;
if(i==999)
{i=0;}
Send_display();
LCD_set_yposition(0x06);
LCD_prints(Dis_horse);
}while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -