PIC16F877A我需要接收几组不同的串口数据来执行不同的操作,但是要识别数组,不知怎么来实现:
请帮忙指点,可以举一组数据来供我参考,谢谢!
/********************************************************************************************
* RS232串行通迅实验
* CPU型号: PIC16F877A
* 晶振: 11.0592MHz (如果更换其他频率的晶振需要自已相应修改程序)
//4MHz (如果更换其他频率的晶振需要自已相应修改程序)
* 说明: 串口调试软件波特率设为9600
RD1 BUSY LED工作灯亮一直亮
* 作 者:abadboy
* 日 期:2013年10月28号
收到串口数据“SL00 换行 回车"即HEX”53 4C 30 30 0A 0D",RD2 LED亮
收到串口数据“NDWT"即HEX”4E 44 57 54",RD3 LED亮
//收到串口数据“V"即HEX"56",RD5 LED亮
//收到串口数据“PO00 空字符"即HEX"50 4F 30 30 00",RD7 LED亮
*********************************************************************************************/
#include<pic.h> //包含单片机内部资源预定义
__CONFIG(0x3F32);
unsigned char RXDATA_SL00[] = {0x53,0x4c,0x30,0x30,0x0A,0x0D};
//**************************调用串口中断函数*****************
void interrupt usart(void) //串口中断函数,usart自己定义的名称;
{
if(RCIE&&RCIF) //RCIE=1接收中断允许,RCIF=1接收中断判断是否为串口接收中断
TXREG=RCREG; //把接收到的数据发送回去
}
//**************************调用延时函数*****************
void delay1ms (unsigned int i)
{
unsigned char j;
while (i--)
{
for (j = 0; j < 244 ; j ++ ){} //j < 244,11.0592M晶振对应1ms基准延时;
//for (j = 0; j < 88 ; j ++ ){} //j < 88,4M晶振对应1ms基准延时;
}
}
//**************************调用LED指示函数*****************
void LED2_OUT() //LED2取反亮灭变化;
{
RD2 = 0;delay1ms(1000);RD2 = 1;delay1ms(100);
}
void LED3_OUT() //LED3取反亮灭变化;
{
RD3 = 0;delay1ms(1000);RD3 = 1;delay1ms(100);
}
/*
void LED4_OUT() //LED2取反亮灭变化;
{
RD5 = 0;delay1ms(1000);RD5 = 1;delay1ms(100);
}
void LED5_OUT() //LED2取反亮灭变化;
{
RD7 = 0;delay1ms(1000);RD7 = 1;delay1ms(100);
}
*/
//**************************调用初始化设置*****************
void init () //
{
//**********配制输出端口***********************
TRISD1=0;TRISD2=0;TRISD3=0;TRISD5=0;TRISD7=0; //设置灯D1 D2 D3 D5 D7为输出
//**********配制输入端口***********************
TRISC=0XFF; //设置C口方向全为输入,不设置为输入,用串口会出问题
//**********配制串口设置***********************
//SPBRG=5; //11.0592M晶振SPBRG值为5对应设置的波特率为115200BPS
//SPBRG=25; //4M晶振SPBRG值为25对应设置的波特率为9600BPS
SPBRG=71; //11.0592M晶振SPBRG值为71对应设置的波特率为9600BPS
TXSTA=0X24; //使能串口发送,选择高速波特率
RCSTA=0X90; //使能串口工作,连续接收
RCIE=0X1; //使能接收中断
GIE=0X1; //开放全局中断
PEIE=0X1; //使能外部中断
}
//========================================================================
//波特率计算公式: BRGH=1时(高速模式)SPBRG=Fosc/(16 * 波特率)-1
//
//TXSTA=0x24=0010_0100:_ 8位发送 发送使能 异步 _ 高速波特率模式 TSR满 无校验
//RCSTA=0X90=1001_0000:使能 8位 _ _ 允许禁止连续接收 _ 无溢出错误 不接收数据第9位
void main()
{
init ();
RD2=1,RD3=1,RD5=1,RD7=1; //按键指示LED灯默认不亮
RD1 =0,delay1ms(500),RD1 =1,delay1ms(500),RD1 =0; //开机启动BUSY灯亮灭一次
while(1) //等待中断
{
//**************************接收到串口数据为“V"(0x56)*****************
if (RCREG == 0x56)
{
LED2_OUT(); //调用LED2输出
}
//**************************接收到串口数据为“SL00"*****************
}
}
|