登录 免费注册 首页 | 行业黑名单 | 帮助
维库电子市场网
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统
驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe

请大家帮我想一想好的算法

作者:yeool 栏目:单片机
请大家帮我想一想好的算法
是这样的,我用3片74HC240扩展了24通道的数字输入口。我怕外部输入有干扰,所以我想了这样一个方法,我每隔n毫秒对输入口进行扫描,当连续10次扫描某一通道的值不变时便认为是正确的读数。
   我想的方法是每一个通道用一个8位的变量进行计数,然后再每一通道进行分别判断和计数,但是这样我觉得24个通道很繁琐,大家有没有什么好方法,用C51。


2楼: >>参与讨论
2shift
繁琐的东西有时候很好用
 
3楼: >>参与讨论
yeool
11
我想的是大家有什么好方法实现,像我这样做的话每一次扫描的时间也比较长。

4楼: >>参与讨论
hexiaoxiao
好象没什么好方法
为什么扫描十次呢?

5楼: >>参与讨论
yeool
回楼上
抗干扰啊,当连续10次值不变时便认为是正确的读数

6楼: >>参与讨论
yeool
我写了一个,大家看看有没有更简洁的方法
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;  
               }    
         }
     }

      

}

参与讨论
昵称:
讨论内容:
 
 
相关帖子
请问哪位知道keilc的这个警告什么意思啊?
帮我推荐几款集成片上A/D的单片机,51系列的,谢谢
请教一个C51中位操作的问题。
怎么解决PCF8583时钟芯片的误差?
一个驱动继电器的问题!
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入


Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号