韦根协议c语言,韦根协议(26位)及其读取算法

0000 0000 0000 0000 1000 1100

除去第一次原始数据的处理,每次与的数据都是向右移8位。

所有与完了都不要忘记向右移,我来分别说一下,右移的位数。

处理原始数据向右移1位;HID向右移16位;Pid1右移8位;

Pid2不用移了。

接下来放程序

[mw_shl_code=c,true]

volatile long reader = 0;

volatile int readerCount = 0;

long sign = 0xff0000;

void readerOne(void)

{

readerCount++;

reader = reader << 1;

reader |= 1;

}

void readerZero(void)

{

readerCount++;

reader = reader << 1;

}

void setup()

{

Serial.begin(9600);

attachInterrupt(3, readerZero, RISING);

attachInterrupt(2, readerOne, RISING);

delay(10);

reader = 0;

readerCount = 0;

}

void loop()

{

if(readerCount >=26)

{

Serial.print(" Reader:");

Serial.print(reader);

Serial.println("");

reader = reader & 0x1fffffe;

reader = reader >> 1;

long hid = reader & sign;

hid = hid >> 16;

hid = hid * 256 * 256;

sign = sign >> 8;

long pid1 = reader & sign;

pid1 = pid1 >> 8;

pid1 = pid1 * 256;

sign = sign >> 8;

long pid2 = reader & sign;

sign = 0xff0000;

long value = hid + pid1 + pid2;

Serial.println( value);

reader = 0, readerCount = 0;

hid = 0, pid1 = 0, pid2 = 0, value = 0;

}

}

[/mw_shl_code]

代码中的0x啥啥啥都是位与数据的换算成16进制得到的,若仔细看此贴,就知道为什么sign>>8的原因了。

70d8077d25d7c32fb2a7a7cb2bbf0996.gif

QQ截图20130123102852.png (22.54 KB, 下载次数: 779)

2013-1-23 10:28 上传

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值