补充:编程思想
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
总的指导思想:利用中断来为数据的高低电平计数。
1 计时中断的时间是270us。我的脉冲宽度为300us,则在一个高(低)电平中能且只能产生一次计时中断,即计数1次。Rfcount等于1。
2 如果2个数据不同时,就会出现2个连续的高电平或低电平,即600us的高电平或低电平。但在这600us中能且只能产生2次计时中断,即计数2次。Rfcount等于2。
3 理论上如果中断时间是270us时,可以对脉冲宽度为271-404us的数据作出正确接收。因为只要能保证1个电平宽度大于1个中断时间和2个连续的电平宽度小于3个中断时间(3*270=810us)时即可。
4 在电平变化中断后重赋定时器初值是为了抵消时间的累积误差。
以图为例进行说明:
⑴ 在a处产生中断,“预备……”;
⑵ 在b处产生中断,“准备就绪”;
⑶ 在c处产生中断,“检查同步头中低电平宽度是否合法。OK,则准备进入数据接收;否则仍就“预备……””;
<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />⑷ ●在d处(图上)或e处(图下)产生中断,则判断是否产生了2次计时中断。很显然,对于图上只能产生1次计时中断,而图下就产生2次计时中断。产生了2次计时中断时,对数据进行判断,对于图下就能判断数据为1。对于图上,由于不足2次计时中断,所以直接退出中断。等待下一次中断(图上e处)。
● 图上在e处产生中断,很明显,计时中断数为2,对数据进行判断,为0。
⑸ 对数据进行判断后即清计时中断计数器。即Rfcount。为下一个数据接收作准备。返回到步骤⑷。如此反复,即可对所有的数据作出完整接收!
⑹ 由于以上接收时间为基准的,即Rfcount的2次计时中断。所以数据中的高电平和低电平都有计时,其中任何1个的宽度超限都能导致接收失败。
文章评论(0条评论)
登录后参与讨论