📄 hmi.c
字号:
#include ".\STC89c5x.H"
#include"comm.h"
unsigned char uart_complete=0;
unsigned char uart_number=0;
unsigned char timer_buf;
unsigned char uart_buf[120];
unsigned int read_hmi_buf[50];
unsigned char write_hmi_buf[100];
unsigned char timer_flag=0;
unsigned char uart_begin_flag=0;
unsigned char run_flagwait=0;
unsigned char timer_number;
sbit RUN=P1^6;
extern unsigned char i;
void uart_timer_set(void)
{
TCON=0x00;
PCON=PCON_VALUE; //波特率选择
IP=IP_VALUE; //设置各中断优先级
TMOD=TMOD_VALUE; //设置各定时器的工作方式
T2CON=T2CON_VALUE;
SCON=SCON_VALUE; //设置串行工作方式
TH1=TL1=BAUD_VALUE; //设定波特率的值
TR1=TRUE;
TR0=TRUE;
TI=RI=FALSE;
uart_number=0;
uart_complete=0;
timer_buf=TIMEOUT;
}
//发送一个字节
void uart_send(unsigned char s)
{
SBUF=s;
while(TI!=TRUE)
;
TI=FALSE;
}
//-----------------------------------------------------------------------------
void_writehmi_message(void)
{
EA=DISABLE; //turn off EA
uart_send(UART_START);
uart_send(UART_WHITE);
uart_send(ADDRH_WHITE);
uart_send(ADDRL_WHITE);
uart_send(0);
uart_send(NUMBER_WHITE);
for(i=0;i<(NUMBER_WHITE*2);i++)
{
uart_send(write_hmi_buf[i]);
}
EA=ENABLE; //turn on EA
}
//--------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void readhmi_message(void)
{
EA=DISABLE; //turn off EA
uart_send(UART_START);
uart_send(UART_READ);
uart_send(ADDRH_READ);
uart_send(ADDRL_READ);
uart_send(00);
uart_send(NUMBER_READ);
RI=FALSE;
ES=ENABLE;
EA=ENABLE; //turn on EA
TH0=TH0_VALUE; //20mS
TL0=TL0_VALUE;
TR0=1;
}
//-----------------------------------------------------------------------------
void uart_int(void) interrupt 4 using 2
{
unsigned char data u;
u=SBUF;
RI=FALSE;
if(uart_number==0)
{
if(u==UART_START)
uart_begin_flag=1;
}
if(uart_begin_flag==1) //HMI 串口协议
{
uart_buf[uart_number]= u; //read SBUF
uart_number++; //counter add 1
if(uart_number==(NUMBER_READ*2+2))
{
if(run_flagwait>=RUN_FLAGWAIT)
{
run_flagwait=0;
RUN=!RUN;
}
else run_flagwait++;
ES=DISABLE;
RI=FALSE;
uart_number=0;
uart_complete = UART_COMPLETE;
for(i=0;i<NUMBER_READ;i++)
{
read_hmi_buf[i]=((unsigned int)(uart_buf[i+2])*0x100+uart_buf[i+3]);
}
uart_begin_flag=0;
TR0=0;
}
}
}
//*****************************************************************************
void timer0_int(void) interrupt 1 using 3
{
TF0=FALSE;
TH0=TH0_VALUE; //20mS
TL0=TL0_VALUE;
timer_number++;
if(timer_number==timer_buf)
{
timer_number=0;
timer_buf=TIMEOUT;
timer_flag=1;
TR0=0;
}
//else if((uart_complete== UART_COMPLETE))
// {
// timer_number=0;
// timer_buf=TIMEOUT;
// timer_flag=0;
// TR0=0;
// }
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -