8052单片机怎样读出8421BCD码拨码开关设定的数值

如题,8052单片机怎样读出8421BCD码拨码开关的设定的数字,拨码开关只要4位2进制数即可显示对应的十进制数,
而单片机I/O口有八位,请问怎么转换?请各位赐教,谢谢。

例:拨码开关设定十进制数2,对应的BCD码1101,对应接到单片机P1.0,P1.1,P1.2,P1.3

void read()
{
unsigned char ge,shi; //用两个变量来存放转换后的个位(ge)与十位(shi)
unsigned char temp_P1;//用来存放P1口的状态
temp_P1=~P1; //读取P1口并取反,例如P1口为1010 1100则temp_P1=0101 1100
temp_P1=temp_P1&0x0f;//去掉高4位后temp_P1=0000 1100
shi=temp_P1/10; //读取二进制数0000 1100的十位,此例中等到数据“1”
ge=temp_P1%10; //读取二进制数0000 1100的个位,此例中等到数据“2”
//至此,成功把单片机P1.0,P1.1,P1.2,P1.3状态(1100)转换成十进制数12,并分别保存在变量shi,ge中
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-02-19
MOV A,P1 ;读拨码开关
CPL A ;拨盘码开关公共端接负,读取的是反码,所以此处求反
ANL A,#0FH ;屏蔽高4 位
MOV 22H,A ;送22H暂存读到的数,这个数就可送显示处理,显示10进数

如果你用汇编语言,可参考我空间的做成实物的例子:

第2个回答  2010-02-19
读P1,取反,去掉高4位
第3个回答  2010-02-19
首先,单片机本身是不会处理十进制数的,所有电脑能识别十进制数都必须有一个操作系统(也就是有一个底层的管理软件),但8052一般都不会用操作系统,因为其资源太少转不过来。
那么我们在使用这类单片机时一般都用汇编和C来编程序这时会用到各种数的进制如十进制,但这个进制只是编译系统认识,最后存到单片机的还是二进制的数,所以没有目的的将二进制转成十进制毫无意义。那么在单片机里将二进制转成十进制必有其使用上的目的如去驱动一个数码管。然而数码管有多段笔画构成需要用多个I/O来合作控制,故不是一个十进制的数,或用串行的方式直接将二进制的数给数码管的驱动IC由他来进行数的转换我们不用管。所以没法就你的问题直接作答,那么只能用一个数的转换方法来进行一个最基础的答复,有了这个方法可以通过编程用在各个地方,当然也可以在网上找到解决这个问题的好多不同方法。
4位8421,其含义是每位代表不同的数,将你的I/O取反乘他们的数相加就是十进制的结果。十进制=!(p1.0)*8+!(p1.1)*4+!(p1.2)*2+!(p1.3)*1
对于高4位的,如果你没用到那都接到0位就不用管了。如果你用了那将p1口的数传给一个变量然后和一个这样的8位二进制数相“与”就可以了(00001111)把高4位清0

相关了解……

你可能感兴趣的内容

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