免費論壇 繁體 | 簡體
Sclub交友聊天~加入聊天室當版主
分享
返回列表 回復 發帖

BIT 資料宣告

struct _BITS_32
{
unsigned char bit00: 1;
unsigned char bit01: 1;
unsigned char bit02: 1;
unsigned char bit03: 1;
unsigned char bit04: 1;
unsigned char bit05: 1;
unsigned char bit06: 1;
unsigned char bit07: 1;
unsigned char bit08: 1;
unsigned char bit09: 1;
unsigned char bit10: 1;
unsigned char bit11: 1;
unsigned char bit12: 1;
unsigned char bit13: 1;
unsigned char bit14: 1;
unsigned char bit15: 1;
unsigned char bit16: 1;
unsigned char bit17: 1;
unsigned char bit18: 1;
unsigned char bit19: 1;
unsigned char bit20: 1;
unsigned char bit21: 1;
unsigned char bit22: 1;
unsigned char bit23: 1;
unsigned char reserved: 8;

};

typedef union
{
unsigned long AllMsg;
struct _BITS_32 bits;
}BITS_32;

BITS_32 tb;
void test(void)
{
unsigned long Alldata;
unsigned char i;
unsigned char cn;//收到的資料

//用這樣收集資料聚集起來,從hi bit開始收
for(i=0;i<23;i++)
{
Alldata = (Alldata << 1) | (cn & 0x01);
}

//用這樣收集資料聚集起來,從low bit開始收
for(i=0;i<23;i++)
{
Alldata = Alldata | ( (cn & 0x01) << i );
}

//最後如果要讀取一個bit的資料
tb.AllMsg = Alldata;
cn = tb.bits.bit00 ; //類似這樣就可以讀取bit0資料
}
----------------------------------------------------------------------------------




typedef union {
    unsigned char msgfields;
    struct{
       unsigned char idType:1;       // 1 bit (Standard Frame or Extended Frame)
        unsigned char frameType:1;    // 1 bit (Data Frame or RTR Frame)
        unsigned char dlc:4;          // 4 bit (No of data bytes a message frame contains)
        unsigned char formatType:1;   // 1 bit (CAN 2.0 Format or CAN_FD Format)
        unsigned char brs:1;          // 1 bit (Bit Rate Switch)
    };
} CAN_MSG_FIELD;


unsigned char AddrL @ 0x72;
struct {
        unsigned L0 :1;
        unsigned L1 :1;
        unsigned L2 :1;
        unsigned L3 :1;
        unsigned L4 :1;
        unsigned L5 :1;
        unsigned L6 :1;
        unsigned L7 :1;
}AddrLbits @ 0x72;


CAN_MSG_FIELD yy;

     yy.msgfields=0x80;            
            TXREG=yy.msgfields;
            __delay_ms(30);
            yy.brs=1;
            yy.dlc=0xf;
            yy.formatType=1;
            yy.frameType=1;
            yy.idType=1;
              TXREG=yy.msgfields;

驗證結果
0X80 與 0XFF

------------------------------

  AddrLbits.L0=1;
        AddrLbits.L1=0;
        AddrLbits.L2=1;
        AddrLbits.L3=0;
        AddrLbits.L4=0;
        AddrLbits.L5=1;
        AddrLbits.L6=0;
        AddrLbits.L7=1;
            TXREG=AddrL;
             __delay_ms(500);

驗證結果
0XA5
返回列表