第1个回答 2011-11-24
10位整形变量是0000 00AB CDEF GHIJ。根据你的题目,为了能快速处理,可以这样:
先右移2位变成:0000 0000 ABCD EFGH
这时取低字节,即ABCD EFGH
屏蔽掉低三位,即ABCD E000,将其赋值到P1口即可,所以程序这样写(假设变量为x)
P1=(x>>2)&0xF8;
这样完成了高5位的输出。
低于低5位的输出,则将变量左移3位,即000A BCDE FGHI J000,然后取低字节(FGHI J000)输出到P1即可,所以程序是:
P1=(x<<3)&0xF8;
第2个回答 2011-11-24
说明:PP是一个10位的二进制数,说是是双字节的。
void MoveBit(void){
unsigned int pp=0x0355;//xxxx-xx11-0101-0101
unsigned char high_5bits;//高5位
unsigned char low_5bits;//低5位
unsigned char temp=0;
high_5bits=(unsigned char)(pp>>2);//取高5位:xxxx-x000
low_5bits=(unsigned char)pp;//取低5位:000x-xxxx
//先送高5位
temp=P1;
temp|=high_5bits&0xF8;
P1=temp;
//注:此地方用户需要加入延时或其它处理。
//后送低5位
temp=P1;
temp|=low_5bits&0x1F;
P1=temp;
}
此函数可以在KEIL/IAR/VC所有C编译环境都能实现。
第3个回答 2011-11-24
P1=(10位二进制数>>2)&0x00F0;//将高5位赋给P1
P1=10位二进制数&0x000F;//将低5位赋给P1
其中0x00F0的长度根据你单片机整型变量的长度可以适当修改