⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 com.h

📁 远程遥控家电
💻 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 + -