📄 linpro.c
字号:
//接受采用中断的形式,发送不用中断
//*******************************本节点地址01*****************************//
// 接受来自10地址的数据
//*******************************ch的定义格式******************************/
//********** ***************/
//********** 第1位:"1"远程帧,"0"为数据帧 ***************/
//********** 第2、3位:接收地址 10 ***************/
//********** 第4、5位:发送地址 01 ***************/
//********** 第6位接收数据 ** 000:P1.0=0 011:P1.3=0 ***************/
//********** 第7位接收数据 ** 001:P1.1=0 ***************/
//********** 第8位接收数据 ** 010:P1.2=0 ***************/
//********** ***************/
//********** 只传输一个字节的数据 ***************/
//********** ***************/
//*************************************************************************/
#include<reg51.h>
#include <string.h>
bit read_flag=1;
unsigned char ch;//=0x01;//第一位1为远程帧,0为数据帧
sbit a0=P1^0;
sbit a1=P1^1;
sbit a2=P1^2;
sbit a3=P1^3;
sbit b=P2^0;
LIN_DATA_RECEIVE();
void DelayTime(unsigned char j);
//***********************************串口初始化************************************//
void init89s52(void)
{
SCON = 0x50; //SCON: serail mode 1, 8-bit UART, enable ucvr
TMOD |= 0x20; //TMOD: timer 1, mode 2, 8-bit reload
PCON |= 0x80; //SMOD=1;
TH1 = 0xe8; //设定定时器初值
TL1 = 0xe8; //Baud:9600 fosc=11.0592MHz
IE |= 0x90; //Enable Serial Interrupt
TR1 = 1; // timer 1 run
}
//**********************向串口发送一个字符串,strlen为该字符串长度********************/
void LIN_send_DATA()//unsigned char ch)
{
ch=0x48;//01001000
SBUF=ch;
while(TI==0);
TI=0;
}
//**************************************LIN接收函数**********************************/
void LIN_DATA_Receive()
{
if((ch==0x48)) //根据接收到的数据控制不同的转向灯01001001,P1.0=0
{
a0=0;
DelayTime(50);
a0=1;
}
if((ch==0x55)) //根据接收到的数据控制不同的转向灯01001001,P1.1=0
{
a0=0;
DelayTime(50);
a0=1;
}
if((ch==0x55)) //根据接收到的数据控制不同的转向灯01001001,P1.2=0
{
a0=0;
DelayTime(50);
a0=1;
}
if((ch==0x55)) //根据接收到的数据控制不同的转向灯01001001,P1.3=0
{
a0=0;
DelayTime(50);
a0=1;
}
}
//*************************************串口接收中断函数*********************************/
void serial() interrupt 4 using 3
{
if(RI)
{
RI = 0;
ch=SBUF;
LIN_DATA_Receive();
read_flag=1;
}
}
/************************************延时程序1ms函数****************************/
void DelayTime(unsigned char j)
{
unsigned char k,l;
for(l=0;l<=j;l++)
{
for(k=0;k<=150;k++)
{
;
}
}
}
//*****************************************主函数**************************************//
main()
{
init89s52(); //初始化串口
b=1;//NSLP为高电平
while(1)
{
if (read_flag) //如果取数标志已置位,就将读到的数从串口发出
{
read_flag=0; //取数标志清0
LIN_send_DATA();//unsigned char ch);//inbuf1,INBUF_LEN);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -