?? main.c
字號:
/*************************************************************************************************
* 文 件 名:485c.c
* 功 能:485從機通信模塊
* 硬件條件: 1.CPU型號:ATMEL2051
* 2.晶振:11.0592
* 作 者:zwb
* 日 期:2009年04月27號
*************************************************************************************************/
//-----------------------函數(shù)聲明,變量定義--------------------------------------------------------
#include <reg51.h>
//#include <INTRINS.H>
#include <lcd1602.h>
#include <string.h>
#define unchar unsigned char
#define COUNT 10 // 定義發(fā)送緩沖區(qū)大小
unchar send_buffer[COUNT]={0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a}; //定義發(fā)送緩沖區(qū)
unchar COM_dzdata[2]={0x41,0x42};//定義從機地址和命令
unchar receive_buffer[2];//定義接受緩沖區(qū)
unchar Dis_horse[3];
unchar point=0; //定義接收數(shù)據(jù)個數(shù)指示變量
unchar FIFO; //定義從機通信緩沖區(qū)1字節(jié)
bit flag,lab=0;
sbit L0 = P3^5;
sbit L1 = P3^7;
//========================================================================================
//函數(shù)名稱:delay()
//輸入函數(shù):無
//輸出函數(shù):無
//函數(shù)功能:延時子函數(shù)
//=======================================================================================
void delay(void)
{
unchar i=124;
while(i--);
}
//--------------------------------------------------------------------------------------------------
// 函數(shù)名稱: UART_init()串口初始化函數(shù)
// 函數(shù)功能: 在系統(tǒng)時鐘為11.059MHZ時,設定串口波特率為9600bit/s
// 串口接收中斷允許,發(fā)送中斷禁止
//--------------------------------------------------------------------------------------------------
void UART_init()
{
//初始化串行口和波特率發(fā)生器
SCON =0xf0; //選擇串口工作方式3,打開接收允許
TMOD =0x20; //定時器1工作在方式2
PCON = 0x80; //波特率加倍
TH1 =0xf4; //實現(xiàn)波特率4800(系統(tǒng)時鐘11.0592MHZ)
TL1 =0xf4;
TR1 =1; //啟動定時器T1
ET1 =1;
EA = 1;
}
//--------------------------------------------------------------------------------------------------
// 函數(shù)名稱: COM_send()串口發(fā)送函數(shù)
// 函數(shù)功能: 把數(shù)據(jù)緩沖區(qū)的十位數(shù)據(jù)發(fā)送出去
//--------------------------------------------------------------------------------------------------
void COM_send(void)
{
if(flag==1)//從機發(fā)送數(shù)據(jù)判斷位
{
for(point=0;point<10;point++) //連續(xù)發(fā)送十位數(shù)據(jù)
{
SBUF=send_buffer[point];
while(TI==0);
TI=0;
}
flag=0;//發(fā)送完數(shù)據(jù)后從機重新處于多機通信狀態(tài)(即只能接收地址)
lab=0;
SM2=1;
L1=1;
}
}
//==================================================================================
//函數(shù)名稱:Send_display()
//輸入變量:
//輸出變量:
//函數(shù)功能:發(fā)送從機自加數(shù)列值給主機
//===================================================================================
void Send_display(void)
{
for(point=0;point<3;point++)
{
SBUF=Dis_horse[point];
while(TI==0);
TI=0;
}
}
//===================================================================
//函數(shù)名稱:Receive_COM ()
//輸入變量:無
//輸出變量:Receive_COM 接受主機發(fā)來的地址和命令,
//函數(shù)功能:核對是否為本機地址和命令,并置SM2=0;允許從機接受數(shù)據(jù)
//===================================================================
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)//核對主機發(fā)來的地址是否為從機地址
if(FIFO==0x41)
{
SM2=0;//是從機地址則允許從機接受數(shù)據(jù)
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();//正確則調用發(fā)送程序
}
}
void delay_1s(void)
{
unchar j;
for(j=0;j<255;j++)
{delay();}
}
//--------------------------------------------------------------------------------------------------
// 函數(shù)名稱: 主函數(shù)
// 函數(shù)功能: 調度個子函數(shù),完成通信過程
//--------------------------------------------------------------------------------------------------
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 + -