实现对四个两段8421拨码开关的读取,能否将下面的汇编改成C语言代码

我需要实现对四个两段8421拨码开关的读取,但是久久不能成功,以下是我从其他地方找到的代码,有哪位能够将其改写成C语言的?感激不尽

8421拨码开关对应的十位和各位的8421接在PORTB,公共端四个接PORTD,6;PORTD,5;PORTD,4;PORTC,4。采用扫描方式读取数值并存入对应的寄存器单元。
;********************BCDCHB********************
;本程序实现单字节压缩BCD码转化为二进制数。
;入口参数:原BCD码数在W中。
;出口参数:结果在W中。
;占用资源:W,STATUS,一重堆栈。
;该子程序取自一位高手的。
BCDCHB BANK0
MOVWF R2
SWAPF R2, W
ANDLW 0FH
MOVWF R3
MOVLW 0FH
ANDWF R2,F ;去掉高位
BCF C
RLF R3,0 ;高位乘以2
RLF R3,1
RLF R3,1
RLF R3,1 ;乘以8
ADDWF R3,W
ADDWF R2,F
MOVF R2, W
RETURN
这是经测试可以使用的程序。哈
如果像图中一样只有两个,接线方式应该怎么接?

两个及两个以上的BCD拨码盘可以使用公共引脚A动态扫描的方法
所有BCD拨码盘的公共引脚A分别作为不同的扫描线连接单片机。
如果8、4、2、1数据线上拉,则A端采用低扫描;如果8、4、2、1数据线下拉,则A端采用高扫描。
这里的低扫描具有两层含义:
第一,任意时刻扫描线中只有一条为低电平,其余扫描线为高电平;
第二, 在扫描过程中,扫描线需要周期性地依次变为低电平。高扫描则与低扫描完全相反。
还要注意的就是高扫描时从8、4、2、1引脚上读到的数值即为拨码盘输入对应的BCD码,而低扫描是需要取反才得到正确的BCD码

DialChangeA=1;DialChangeB=0;//扫描个位
__no_operation();__no_operation();__no_operation();__no_operation();
__no_operation();__no_operation();__no_operation();__no_operation();
__no_operation();__no_operation();__no_operation();__no_operation();
__no_operation();__no_operation();__no_operation();__no_operation();
__no_operation();__no_operation();__no_operation();__no_operation();
__no_operation();__no_operation();__no_operation();__no_operation();
val=PINC;
val >>= 2;
i = val & 0x0f; //按位与,i得到个位值。

DialChangeA=0;DialChangeB=1;//扫描十位
__no_operation();__no_operation();__no_operation();__no_operation();
__no_operation();__no_operation();__no_operation();__no_operation();
__no_operation();__no_operation();__no_operation();__no_operation();
__no_operation();__no_operation();__no_operation();__no_operation();
__no_operation();__no_operation();__no_operation();__no_operation();
__no_operation();__no_operation();__no_operation();__no_operation();
val=PINC;
val >>= 2;
l = val & 0x0f; //按位与,i得到十位值。

l *= 10; //十位值乘以10
i += l; //然后与个位值相加。
Dalay=1;
return i; //将得到的十进制数返回
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-01-03
程序,有很多的错误。追问

我不懂汇编,这个只是网上找来的,那请问要实现我的功能该怎么用C语言实现呢

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网