|
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统 驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe |
请大家帮我想一想好的算法 |
作者:yeool 栏目:单片机 |
是这样的,我用3片74HC240扩展了24通道的数字输入口。我怕外部输入有干扰,所以我想了这样一个方法,我每隔n毫秒对输入口进行扫描,当连续10次扫描某一通道的值不变时便认为是正确的读数。 我想的方法是每一个通道用一个8位的变量进行计数,然后再每一通道进行分别判断和计数,但是这样我觉得24个通道很繁琐,大家有没有什么好方法,用C51。 |
2楼: | >>参与讨论 |
作者: 2shift 于 2006/8/4 10:20:00 发布:
繁琐的东西有时候很好用 |
3楼: | >>参与讨论 |
作者: yeool 于 2006/8/4 10:58:00 发布:
11 我想的是大家有什么好方法实现,像我这样做的话每一次扫描的时间也比较长。 |
4楼: | >>参与讨论 |
作者: hexiaoxiao 于 2006/8/4 13:02:00 发布:
好象没什么好方法 为什么扫描十次呢? |
5楼: | >>参与讨论 |
作者: yeool 于 2006/8/4 13:37:00 发布:
回楼上 抗干扰啊,当连续10次值不变时便认为是正确的读数 |
6楼: | >>参与讨论 |
作者: yeool 于 2006/8/4 17:11:00 发布:
我写了一个,大家看看有没有更简洁的方法 uint8 xdata PORT_DIO0 _at_ ADDR_DIO0; uint8 xdata PORT_DIO1 _at_ ADDR_DIO1; uint8 xdata PORT_DIO2 _at_ ADDR_DIO2; uint8 xdata PORT_DIO3 _at_ ADDR_DIO3; uint8 Dio_in_Data0; uint8 Dio_in_Data1; uint8 Dio_in_Data2; uint8 Dio_in_Data3; uint8 IoInTimer[24]; uint8 code SHIELD[8]= {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; void IoIn(void){ uint8 InData; uint8 i; InData = PORT_DIO0; for(i=0;i<8;i++){ if (((Dio_in_Data0^InData) & SHIELD[i]) == 0){ IoInTimer[i]=0; } else{ IoInTimer[i]++; if(IoInTimer[i]>10){ Dio_in_Data0^=SHIELD[i]; IoInTimer[i]=0; } } } InData = PORT_DIO1; for(i=0;i<8;i++){ if (((Dio_in_Data1^InData) & SHIELD[i]) == 0){ IoInTimer[i+8]=0; } else{ IoInTimer[i+8]++; if(IoInTimer[i+8]>10){ Dio_in_Data1^=SHIELD[i]; IoInTimer[i+8]=0; } } } InData = PORT_DIO2; for(i=0;i<8;i++){ if (((Dio_in_Data2^InData) & SHIELD[i]) == 0){ IoInTimer[i+16]=0; } else{ IoInTimer[i+16]++; if(IoInTimer[i+16]>10){ Dio_in_Data2^=SHIELD[i]; IoInTimer[i+16]=0; } } } } |
|
|
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入 |
Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号 |