基于proteus的51单片机仿真实例二十四、C51中位运算符演示实例

1、在单片机的程序设计中,经常需要用到位操作。例如先是要让P0口的第3位(即P0.3)输出高电平,其余位输出低电平,而在接下来的处理中又要让P0口的第四位(P0.4)输出高电平,其余位的状态保持不变,这种情况下虽然使用赋值操作也能完成,但是用位操作会大大简化程序代码,提高程序的可读性。
2、能对运算对象进行按位操作是C语言的一大特点,也正是由于这一特点是C语言具有了汇编语言的一些功能,使之能够直接对硬件进行操作。
位运算符的作用是按位对变量进行运算,并不改变参与运算的变量的值,如果希望按位改变变量的值,则应利用相应的赋值运算。另外,位运算符不能对浮点数进行操作。
C语言*有6种位运算符,按优先级从高到低依次是:
按位取反(运算符~)--左移(运算符<<)--右移(运算符>>)--按位与(运算符&)--按位异或(运算符^)--按位或(运算符|)
 
3、本例演示两个变量的位运算,分别实现按位取反、按位与、按位或、按位异或等操作,并将结果输出到P0口上
 
4、在keil c51中新建工程ex13,编写如下的程序代码,并编译生成ex13.hex文件。
//实例13:利用P0口输出显示变量的按位取反,按位与,按位或,按位异或的运算结果
#include <reg51.h>               //包含头文件
void delay(void)     //定义一个延时函数
{
  unsigned int i,j;
 for(i = 0;i < 1000;i++)
 for(j = 0;j < 500;j++); 
}
void main(void)
{
  unsigned char num1,num2;  //定义两个变量
 num1 = 55;       //变量赋初值
 num2 = 66;
 P0 = ~num1;     //将变量num1执行按位取反操作
 delay();     //延时一段时间
 P0 = num1 & num2;     //将两个变量执行按位相与操作
 delay();
 P0 = num1 | num2;    //将两个变量执行按位相或操作
 delay();
 P0 = num1 ^ num2;   //将两个变量执行按位异或操作
 delay();
 while(1)
 {
 }
}
 
5、在proteus中新建仿真文件ex13.dsn,电路图如下所示

 基于proteus的51单片机仿真实例二十四、C51中位运算符演示实例
6、启动仿真,观察运行效果,如下图
变量取反的运行结果

基于proteus的51单片机仿真实例二十四、C51中位运算符演示实例