📄 master.c
字号:
#include<reg51.h>
sbit RE_DE P1^0;
#define COUNT 10
#define Slaver_NUM 10
unsigned char bdata flag;
sbit time_over_flag=flag^0;
unsigned char buffer[COUNT];
unsigned char point;
unsigned char Slave_AD[Slave_NUM];
unsigned char ADD_num;
unsigned char idata count_10ms;.
// UART_init()串口初始化函数
void UART_init()
{
SCON=0xF8;//设置串口工作方式为3,打开接收允许,TB8=1
TMOD=0x21;
TR=1; //启动timer1计数
ES=1;
PS=1;
TH1=0xFA; //定时高 波特率:4800bps
TL1=0xFA;//定时低
ET1=0; //T1中断禁止
}
// timer0_init() 初始化T0
void timer0_init()
{
time_over_flag=0;
count_10ms=0;
ADD_num=0;
TL0=0x0F0;
TH0=0x0D8;
ET0=1; //T0中断允许
}
//com_interrup()串口接收中断处理函数
com_interrup(void) interrupt 4 using 3
{
unsigned char RECEIVR_buffer;
if(RI)
{RI=0;
RECEIVR_buffer=SBUF;
if(point==0)
{
if(RECEIVE_buffer=0xFE)
{
buffer[point++]=RECEIVR_buffer;
}
else
{
point=0;
}
}
else if(point>0&&point<10)
{
buffer[point++]=RECEIVR_buffer;
}
else if(point==10)
{
if(RECEIVR_buffer==0xEF)
{
buffer[point]=RECEIVR_buffer;
Slave_AD[ADD_num++]=buffer[2];
}
}
else{point=0}
else{point=0}
if(TI)
{
TI=0;
}
}
//timer0_interrup()T0中断服务程序
timer0_interrup(void) interrupt 1 using 2
{
count_10ms++;
if(count_10ms==50)
{
ET0=0;//T0中断关闭
TR0=0;//停止T0
timer_over_flag=1;
count_10ms=0x00;
}
else
{
TL0=0x0F0;
TH0=0x0D8;
}
}
//COM_send()串口发送函数
void COM_send(void)
{
RE_DE=1;
for(point=0;point<=10,TI=1;point++)
{
SBUF=buffer[point];
TI=0;
}
RE_DE=0;
}
//write_buffer()写发送缓冲区数据
void write_buffer(unsigned char slaver_add)
{
unsigned char i;
TB8=1;
buffer[0]=0xFE;
buffer[1]=slaver_add;
for(i=2;i<9;i++)
{
buffer[i]=send_data[i-2];
}
buffer[9]=0xEF;
}
//主函数
void main(void)
{
unsigned i=0;
UART_init();
timer0_init();
EA=1;
do
{
write_buffer(i++);
COM_send();
timer0_init();
}
while (time_over_flag&&i<10);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -