搜索
bottom↓
回复: 6

单片机从串口接收到十六进制数组,与原有数组数值比较

[复制链接]

出0入0汤圆

发表于 2015-4-22 14:13:39 | 显示全部楼层 |阅读模式
#include <hidef.h>      /* common defines and macros */
#include "derivative.h"      /* derivative-specific definitions */
#include"string.h"
#define LEDCPU PORTK_PK4
#define LEDCPU_dir DDRK_DDRK4
#define LED_ON 0
#define LED_OFF 1
#define BUS_CLOCK                   32000000           //总线频率
#define QSC_CLOCK                   16000000           //晶振频率
#define BAUD 9600

unsigned char data_receive[]={ 0x81,0x00,0x02,0x1C,0x00,0x00,0x00,0x01,0x00,0x04,0xA4,0x00};
const char data_receivel[];
unsigned char i;
const char *rec;

/*************************************************************/
/*                      初始化锁相环                         */
/*************************************************************/
void INIT_PLL(void)
{
    CLKSEL &= 0x7f;       //set OSCCLK as sysclk
    PLLCTL &= 0x8F;       //Disable PLL circuit
    CRGINT &= 0xDF;
   
    #if(BUS_CLOCK == 40000000)
      SYNR = 0x44;
    #elif(BUS_CLOCK == 32000000)
      SYNR = 0x43;     
    #elif(BUS_CLOCK == 24000000)
      SYNR = 0x42;
    #endif

    REFDV = 0x81;         //PLLCLK=2×OSCCLK×(SYNR+1)/(REFDV+1)=64MHz ,fbus=32M
    PLLCTL =PLLCTL|0x70;  //Enable PLL circuit
    asm NOP;
    asm NOP;
    while(!(CRGFLG&0x08)); //PLLCLK is Locked already
    CLKSEL |= 0x80;        //set PLLCLK as sysclk
}


/*************************************************************/
/*                        初始化SCI                          */
/*************************************************************/
void INIT_SCI(void)
{
  SCI0BD = BUS_CLOCK/16/BAUD;   //设置SCI0波特率为9600
  SCI0CR1 = 0x00;        //设置SCI0为正常模式,八位数据位,无奇偶校验
  SCI0CR2 = 0x0c;        //允许接收和发送数据,禁止中断功能
}

/*************************************************************/
/*                       串口发送函数                        */
/*************************************************************/
void SCI_send(unsigned char data)
{
  while(!SCI0SR1_TDRE);         //等待发送数据寄存器(缓冲器)为空
  SCI0DRL = data;
}

/*************************************************************/
/*                       串口接收函数                        */
/*************************************************************/
unsigned char SCI_receive(void)
{

  while(!SCI0SR1_RDRF);          //等待发送数据寄存器满
  return(SCI0DRL);
}


/*************************************************************/
/*                         主函数                            */
/*************************************************************/
void main(void) {
  DisableInterrupts;
  INIT_PLL();
  LEDCPU_dir = 1;
  INIT_SCI();
  EnableInterrupts;
  LEDCPU=LED_ON;

  for(;;)
  {
  *rec="SCI_receive()";
  strcpy(data_receivel,rec) ;
    for(i=0;i<12;i++)
     {
    if(data_receive[i]==data_receivel[i])
      LEDCPU=LED_OFF;
    else
     LEDCPU=LED_ON;
         }
  }
}

2、问题:
   从串口调试助手发送十六进制数值:81 00 02 1c 00 00 00 01 00 04 A4 00,现在需要做数组比较,利用strcpy函数赋值字符串,如果数组完全一样,执行LED灯灭。
   目前不知道如何比较数组?

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2015-4-22 14:49:47 | 显示全部楼层
按顺序一个一个的比较,一个出错就是不同

出0入0汤圆

发表于 2015-4-22 15:38:12 | 显示全部楼层
不会比较数组难道你还不会比较变量吗?一个一个比较会死啊~

出0入0汤圆

 楼主| 发表于 2015-4-23 09:08:12 | 显示全部楼层
mcu5i51 发表于 2015-4-22 14:49
按顺序一个一个的比较,一个出错就是不同

目前需要发送一串字符串,因为要和触摸屏相连,协议也是那么定义的,字符串81 00 02 1C 00 00 00 01 00 04 A4 00,而飞思卡尔根据寄存器也是一下,就接受了,怎么进行一个一个的比较,跪求大神指点!谢谢

出0入0汤圆

 楼主| 发表于 2015-4-23 09:09:14 | 显示全部楼层
steaven2000 发表于 2015-4-22 15:38
不会比较数组难道你还不会比较变量吗?一个一个比较会死啊~

目前需要发送一串字符串,因为要和触摸屏相连,协议也是那么定义的,字符串81 00 02 1C 00 00 00 01 00 04 A4 00,而飞思卡尔根据寄存器也是一下,就接受了,怎么进行一个一个的比较,跪求大神指点!谢谢,
     一个一个的比较,是不是需要将这个字符串一个一个的写入到数组里面,怎么操作?用什么函数?谢谢

出0入0汤圆

发表于 2015-4-23 09:50:43 | 显示全部楼层
LOST星球 发表于 2015-4-23 09:09
目前需要发送一串字符串,因为要和触摸屏相连,协议也是那么定义的,字符串81 00 02 1C 00 00 00 01 00 0 ...

建议您换个行业。

出0入0汤圆

发表于 2015-4-23 11:24:16 | 显示全部楼层
在C中,字符和数组有本质的区别吗?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-26 17:56

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表