📄 usart.h~
字号:
#ifndef __USART_H__
#define __USART_H__
#include "MEGA16.h"
#include "INIT.h"
#include "EEPROM.h"
#define UDRE 5
#define R_485 PORTD= PORTD&0XDF
#define W_485 PORTD= PORTD|0X20
//发送函数
void send_data(unsigned char back)
{ uint a;
while( !( UCSRA & (1<<UDRE)) ) ;
UDR=back;
for(a=0;a<500;a++);
}
//反回数据
void return_data(uchar e,uchar f,uchar g,uchar h,uchar i,uchar j,uchar k,uchar L,uchar m,uchar n,uchar q)
{
W_485;//485发送
send_data(e);
send_data(f);
send_data(g);
send_data(h);
send_data(i);
send_data(j);
send_data(k);
send_data(L);
send_data(m);
send_data(n);
send_data(q);
R_485;//485接收
}
//反回指令
void return_com(uchar i,uchar j,uchar k)
{
W_485;//485发送
send_data(i);
send_data(j);
send_data(k);
R_485;//485接收
}
//串口数据处理
void suart_disposal(void)
{ uchar i,or;
if(b_com==1)
{
or=sbuf_data[2]^sbuf_data[3]^sbuf_data[4]^sbuf_data[5]^sbuf_data[6]^sbuf_data[7]^sbuf_data[8];
if((sbuf_data[0]==0x24)&&(sbuf_data[1]==0xdb)&&(sbuf_data[2]==0x0e)&&(sbuf_data[3]==0x02))
{ //接收到温度设置
}
if((sbuf_data[0]==0x24)&&(sbuf_data[1]==0xdb)&&(sbuf_data[2]==0x05))
{//写地址
return_com(0x06,addr,0xf9);
}
if((sbuf_data[0]==0x24)&&(sbuf_data[1]==0xdb)&&(sbuf_data[2]==0x07))
{//写机型
return_com(0x08,addr,0xf7);
}
if((sbuf_data[0]==0x25)&&((sbuf_data[1]==addr)||(sbuf_data[1]==0x00))&&(sbuf_data[2]==0xda))
{//暂停
b_run=0;
}
if((sbuf_data[0]==0x26)&&((sbuf_data[1]==addr)||(sbuf_data[1]==0x00))&&(sbuf_data[2]==0xd9))
{//停止
b_run=0;
}
if((sbuf_data[3]==0x01)&&(sbuf_data[4]==0x0D)&&(sbuf_data[9]==or))
{//接收转速值
return_com(0x06,addr,0xf9);
if((sbuf_data[2]==0x03)&&(mode==2))//温度值
{
temperature_data=sbuf_data[7]*256+sbuf_data[8];
mode_reg=mode+1;
}
if((sbuf_data[2]==0x04)&&(mode==2))//转速值
{
rpm_data=sbuf_data[7]*256+sbuf_data[8];
mode_reg=mode+1;
}
}
for(i=0;i<20;i++)
sbuf_data[i]=0x00;
b_com=0;
}
// #asm("wdr");
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -