单片机C语言
我看到单片机C语言一书中有这样一句:sbitIP_2=IP^2这个我根据上下文,它好象是把IP_2定义成IP的第2位但是我好象没发现C语言里有sbit这个指令,“^”好象...
我看到 单片机C语言 一书中有这样一句: sbit IP_2=IP^2 这个我根据上下文,它好象是把 IP_2定义成 IP的第2位
但是我好象没发现C语言里有sbit这个指令,“^”好象是按位异或,IP和2异或怎么会变成定义成IP第2位的这个意思啊? 展开
但是我好象没发现C语言里有sbit这个指令,“^”好象是按位异或,IP和2异或怎么会变成定义成IP第2位的这个意思啊? 展开
5个回答
展开全部
sbit 是C51拓展出来的关键字,是对Byte的位进行定义
sbit IP_2 = IP^2就是把 中断优先级寄存器IP的第三位(从0开始的)定义成IP_2这个名称,以后你操作IP的第三位就可以直接用IP_2的这个名字了。另外sbit只能用在可被位寻址的寄存器上,也就是地址可以被8整除的寄存器,否则编译器报错。
C51有异或的命令,但是在sbit后面的这个^表示的是位,不是异或的意思。
sbit还可以这么用
char temp
sbit temp_2 = temp^2
int temp
sbit temp_14 = temp^14
但是不支持float的,不可以用,会报错,其他均可,比如long
sbit IP_2 = IP^2就是把 中断优先级寄存器IP的第三位(从0开始的)定义成IP_2这个名称,以后你操作IP的第三位就可以直接用IP_2的这个名字了。另外sbit只能用在可被位寻址的寄存器上,也就是地址可以被8整除的寄存器,否则编译器报错。
C51有异或的命令,但是在sbit后面的这个^表示的是位,不是异或的意思。
sbit还可以这么用
char temp
sbit temp_2 = temp^2
int temp
sbit temp_14 = temp^14
但是不支持float的,不可以用,会报错,其他均可,比如long
展开全部
是s51,c51,s52,c52这一系列的单片机,定义P口的位定义方法.C语言里没有什么P口,所以不会有这些指令.
如定义: sbit IP_2=IP^2.指IP_2定义为IP口的第二位.
程序中对IP_2可读,可写.
例如,如果IP_2接一个光敏信号,则可通过读IP_2的高低电平得到信号.
如果IP_2接发光二极管,则可通过写,控制发光与否.
如定义: sbit IP_2=IP^2.指IP_2定义为IP口的第二位.
程序中对IP_2可读,可写.
例如,如果IP_2接一个光敏信号,则可通过读IP_2的高低电平得到信号.
如果IP_2接发光二极管,则可通过写,控制发光与否.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
“^”,这是单片机C语言里面的记法。
“这样一句: sbit IP_2=IP^2 根据上下文,它好象是把 IP_2定义成 IP的第2位”,
是的。
“这样一句: sbit IP_2=IP^2 根据上下文,它好象是把 IP_2定义成 IP的第2位”,
是的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
sbit位声明,不是异祸
IP_2=IP^2就是IP寄存器的低4位中间的一位,事实上应该是第3位
IP_2=IP^2就是IP寄存器的低4位中间的一位,事实上应该是第3位
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
调用库函数<intrins.h>;
这个函数定义了这些函数:
_crol_字符循环左移
_cror_字符循环右移
_irol_整数循环左移
_iror_整数循环右移
_lrol_长整数循环左移
_lror_长整数循环右移
_nop_空操作8051NOP指令
_testbit_测试并清零位8051JBC指令
因此,在程序里就可以直接使用上面想用的函数了。
当然,你可以在C:\Keil\C51\INC找到。
这个函数定义了这些函数:
_crol_字符循环左移
_cror_字符循环右移
_irol_整数循环左移
_iror_整数循环右移
_lrol_长整数循环左移
_lror_长整数循环右移
_nop_空操作8051NOP指令
_testbit_测试并清零位8051JBC指令
因此,在程序里就可以直接使用上面想用的函数了。
当然,你可以在C:\Keil\C51\INC找到。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询