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

📄 command.c

📁 avr mega128的源代码串口
💻 C
字号:
#include <iom128.h>
#include "rw910.h"
#include "command.h"
#include "crc.h"


void select_cmd(unsigned char target, unsigned char action, unsigned char membank,
                unsigned char maskadr,unsigned char masklen,unsigned char *maskstr,
                unsigned char truncate)
{    
  unsigned int crc16,totalen,len,rmd;     
  unsigned char send[20];
  
  maskadr = 0;masklen = 0;*maskstr = 0;  
  totalen = 29+(unsigned int)masklen;
  len = totalen/(sizeof(char))+1;
  rmd = totalen%(sizeof(char));
  
  send[0] = (SELECT<<4) | (target<<1) | (action>>2); 
  send[1] = (action<<6) | (membank<<4)| (maskadr>>4);
  send[2] = (maskadr<<4)| (masklen>>4);
  send[3] = (masklen<<4)| (truncate<<3);
  crc16 = caculate_crc16(send,len,rmd);
  send[3] = send[3]|((unsigned char)(crc16>>8))<<(sizeof(char)-rmd);
  send[4] = (unsigned char)(crc16>>8)<<rmd | (unsigned char)crc16>>rmd;
  send[5] = (unsigned char)crc16>>(sizeof(char)-rmd);
  txoutdata(send,len+2,rmd);
} 
/*
  数据放在字节的低5位
*/
void query_cmd(unsigned char dr, unsigned char m,      unsigned char trext,
               unsigned char sel,unsigned char session,unsigned char targ, unsigned char q)
{  
  unsigned char i,j,crc5,send[6];
  
  send[0] = (QUERY<<1) | dr;
  send[1] = (m<<3) | (trext<<2) | sel;
  send[2] = (session<<3) | (targ<<2) | (q>>2);
  send[3] = (q&0x03)<<3;
  crc5 = caculate_crc5(send);
  
  r_tPreamble();
  for(i=0;i<3;i++)
  {
    for(j=0;j<5;j++)
    {
      if(send[i]&0x10)txoutDataCode(1);
      else            txoutDataCode(0);
      send[i] = send[i]<<1;
    }
  }
  for(j=0;j<2;j++)
  {
    if(send[3]&0x10)txoutDataCode(1);
    else            txoutDataCode(0);
    send[3] = send[3]<<1;
  }
  for(j=0;j<5;j++)
  {
    if(crc5&0x10)txoutDataCode(1);
    else         txoutDataCode(0);
    crc5 = crc5<<1;
  }
}
void queryAdjust_cmd(unsigned char session,unsigned char updn)
{
   unsigned char send[5];
   send[0] = (QUERYADJUST<<4) | (session<<2) | (updn>>1);
   send[1] = (updn&0x01)<<7;
   txoutdata(send,2,1);
}
void queryRep_cmd(unsigned char session)
{
    unsigned char send[3];
    
    send[0] = (QUERREP<<6) | (session<<4);
    txoutdata(send,1,4);
}
/*
*str为需要发送的字符串;
byLen为整个字符串的长度;
rmd为字符串最后一个字节的有效位数长度
*/
void txoutdata(unsigned char *str,unsigned int bylen,unsigned int rmd)
{
  unsigned int i,j;
  
  r_tFrameSync();
  for(i=0;i<bylen-1;i++)
  {
    for(j=0;j<8;j++)
    {
        if(*str&0x80) txoutDataCode(1);
        else          txoutDataCode(0);  
        *str = *str<<1;
    }
    str ++;
  }
  for(j=0;j<rmd;j++)
  {
    if(*str&0x80) txoutDataCode(1);
    else  txoutDataCode(0);  
    *str = *str<<1;
  }
}  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -