📄 com.h
字号:
uint32 UART_BPS=9600;//初始化改变
uint8 Station=1;
uint8 Inch[128]={0};
uint8 Inch1[128]={'1','2'};
uint16 rcvnum0=0;
uint16 rcvindex0=0;
uint8 rcv_buf[128];//数据接收缓冲区
uint8 rcv_new;//接收新数据标志
uint8 rcv_num=0;
uint16 Data_lenth;// '数据长度
uint16 Send_lenth; // '串口发送数据总长度
uint8 Very; // '校验和
uint16 Issue=0;
uint8 synHead[7]={11,22,33,44,0,0,0};//初始化改变
uint8 synHead_num=4;
uint8 synTail[4]={66,77,88,99};
uint8 Cmd=4;
int i;
uint16 Data_lenth1;
/////////////////////////////////////////////////////////////////////////////////
/////串口0的发送数据函数
/////参数:data 要发送的数据
/////
/////////////////////////////////////////////////////////////////////////////////
void UART0_SendByte (uint8 data) //串口0发送数据
{
U0THR = data;
while ((U0LSR & 0x40) == 0); // 等待数据发送完毕
}
/////////////////////////////////////////////////////////////////////////////////
/////串口1的中断函数
/////
/////
////////串口UART0接收中断///////////////////////////////
void __irq IRQ_UART0(void)
{
if(0x04==(U0IIR&0x0f)) rcv_new=1;
rcv_buf[rcv_num++]=U0RBR;
VICVectAddr=0x00;
}
/////////////////////////////////////////////////////////////////////////////////
/////串口的初始化
/////1。将io口连接到uart0,uart1
/////2。初始化两个串口的波特率 3。设置uart1的中断
/////////////////////////////////////////////////////////////////////////////////
void UART0_Ini(void)
{ uint16 Fdiv;
U0LCR=0x83;
Fdiv=(Fpclk/16)/UART_BPS;
U0DLM=Fdiv/256;
U0DLL=Fdiv%256;
U0LCR=0x03;
}
/*'发送数据到串口
'数据格式:1前引导符(11,22,33,44)
' 2数据包括(2.1长度2字节,2.2流水号2字节,2.3站点1字节,2.4命令1字节,2.5数据若干,2.6数据校验位(2.1-2.5)1字节,不包括引导符)
' 3后引导符(55,66,77,88)
'说明:2.5校验为:长度,流水号,站点,命令,数据之和*/
int uart_com(int z){
PINSEL0=0x00000005;
UART0_Ini();
U0FCR=0x81;
U0IER=0x01;
////////////设置允许中断/////////////////////////
IRQEnable();
VICIntSelect=0x00000000;
VICVectCntl0=0x26;
VICVectAddr0=(int)IRQ_UART0;
VICIntEnable=0x00000040;
Data_lenth1=2;
Data_lenth = Data_lenth1 + 1 + 2 + 1 + 1 + 1; //'数据若干 +流水号2字节+站号1字节+命令1字节+校验1字节
Send_lenth = Data_lenth +9 ; //'包括引导符前4字节+后4字节)
//'数据报头
for(i=0;i<4;i++)
{ Inch[i] = synHead[i];}
//'发送数据的总长度,不包括报头和尾
Inch[4] = 9;//(Data_lenth + 2) & 255;
Inch[5] = (Data_lenth + 2) / 256;
//'数据包的流水号
Inch[6] = Issue & 255;
Inch[7] = Issue / 256;
Issue=Issue+1;
//'接受机器号
Inch[8] = Station;
//'数据的命令字
Cmd=z;
Inch[9] = Cmd; //'命令
//'数据
for(i=0;i<2;i++)
{ Inch[i + 10] = Inch1[i];}
//'校验
Very = 0 ; // '发送的数据和
for(i=0;i<Data_lenth;i++)
{ Very = (Very + Inch[i + 4]) & 255;}
Inch[i + 4] = Very;//
//'数据报尾
for(i=0;i<4;i++)
{ Inch[i +Data_lenth +5] = synTail[i];}
for(i=0;i<Send_lenth;i++)//Data_lenth+10
{UART0_SendByte(Inch[i]);}
//while(1);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -