打印

51的位(bit)具体是怎么用的菜鸟请教

[复制链接]
5100|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
code-03|  楼主 | 2010-3-6 21:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位大侠,51中有一个一位寄存器,定义了一个位后,具体怎么用,能否举个例子。。先谢各位了。。。

相关帖子

沙发
jerkoh| | 2010-3-6 21:15 | 只看该作者
本帖最后由 jerkoh 于 2010-3-6 21:22 编辑

20h-2Fh是位定义区
汇编 20h    就是 ** bit   20h.0
        21h     就是 **1 bit 20h.1
        ......



       jnb **,next1
       jmp   next2



C   定义  bit **2;

bit 只有 0 或者1  两种值供判断

   if(**2==1)
  {
  }
  else
  {
}

使用特权

评论回复
板凳
code-03|  楼主 | 2010-3-6 21:42 | 只看该作者
bit  ds_read_bit(void)    //读一位
{
   bit dat;
   ds=0;         //单片机(微处理器)将总线拉低
  _nop_();       //读时隙起始于微处理器将总线拉低至少1us
   ds=1;        //拉低总线后接着释放总线,让从机18b20能够接管总线,输出有效数据
   _nop_();
   _nop_();          //小延时一下,读取18b20上的数据 ,因为从ds18b20上输出的数据
//在读"时间隙"下降沿出现15us内有效
   dat=ds;           //主机读从机18b20输出的数据,这些数据在读时隙的下降沿出现//15us内有效
   TempDelay(10);    //所有读"时间隙"必须60~120us,这里77us
   return(dat);       //返回有效数据
}



这段程序是什么意思啊?定义了一个位ds-readd-bit,怎么又出现dat了?再次感谢,请教了,呵呵,,菜鸟正学中。。。

使用特权

评论回复
地板
jerkoh| | 2010-3-6 22:40 | 只看该作者
本帖最后由 jerkoh 于 2010-3-6 22:41 编辑

ds-readd-bit() 这是函数 不是定义了bit

这个函数执行完 返回是一个 bit 类型的值

dat是 局部变量, 也是就  最后返回的 return dat 的值 就是 函数ds_read_bit()  返回值

这里用到bit 是因为要返回一个 管脚DS的状态 是0 还是1  所有你的代码用到了bit

使用特权

评论回复
5
code-03|  楼主 | 2010-3-7 11:28 | 只看该作者
恩谢了。。有点懂了。。再看看。。

使用特权

评论回复
6
lsqdesign| | 2010-3-7 12:23 | 只看该作者
bit 类型变量就是布尔变量,用一个bit表示是或不是两种状态。
同样的状态用一个字节表示就会浪费MCU的资源。这就是为什么定义bit 类型变量的原因。当然你的RAM资源用不完的话也可以用byte型变量代替bit型变量。
51有专门的一个RAM区可以定义成布尔变量。

使用特权

评论回复
7
kymcu51| | 2010-3-7 14:04 | 只看该作者
BIT一般是作用是用人为来表示当前的程序运行状态
通过对BIT进行查询进行逻辑判断

程序系统自带类似的语言有JC、JNC等等

使用特权

评论回复
8
yidou| | 2010-3-7 15:57 | 只看该作者
一位寄存器?没听过

使用特权

评论回复
9
code-03|  楼主 | 2010-3-7 19:48 | 只看该作者
布尔处理机?

使用特权

评论回复
10
code-03|  楼主 | 2010-3-7 19:51 | 只看该作者
C51自带的吗?

使用特权

评论回复
11
电子马甲| | 2010-3-7 21:02 | 只看该作者
我来说说看
51 是8位机    8051它有RAM    00H-XXH       举个例子地址 0x80里面可以存2进制 11111111(8个1)十进制为255   
计算机课本上讲过 一个 字节是 8位2 进制 每一位 叫做(bit)
那么 地址0x80中就可存八个位   

8051有位寻址功能 sfr P0    = 0x80;
比如 P0^1=1;    就是给  地址0x80的最底位送1   则 0x80=(二进制00000001)

使用特权

评论回复
12
电子马甲| | 2010-3-7 21:07 | 只看该作者
且P0^1  只能是1或者是0   因为它是   P0(地址0X80)中的最  底  

使用特权

评论回复
13
电子马甲| | 2010-3-7 21:14 | 只看该作者
bit因该 是 51编辑器的 关键字 和    C语言中的   int  char  类似 不过我没有用过,

感觉这样不方便移植。

使用特权

评论回复
14
code-03|  楼主 | 2010-3-14 09:12 | 只看该作者
uchar ds_read_byte(void ) //读一字节
{

uchar value,i,j;
value=0;           //一定别忘了给初值
for(i=0;i<8;i++)
{
    j=ds_read_bit();
     value=(j<<7)|(value>>1);   //这一步的说明在一个word文档里面  //?????????????????????????????
}
return(value);        //返回一个字节的数据
}


打问号那句是怎么回事??

使用特权

评论回复
15
code-03|  楼主 | 2010-3-14 09:15 | 只看该作者
为是么还要用到串口通信????占用串口通信的口吗??at系列的能否编?用spi不能下载进去吗?

使用特权

评论回复
16
code-03|  楼主 | 2010-3-14 09:16 | 只看该作者
void ds_write_byte(uchar dat) //写一个字节
{
  uchar i;
  bit onebit;        //一定不要忘了,onebit是一位         //????????????????????
  for(i=1;i<=8;i++)
  {
    onebit=dat&0x01;        //?????????????????????????
    dat=dat>>1;
if(onebit)      //写 1



大问号的那两处是怎么回事?






以上问题求高手讲解。。。。。。。跪谢了。。。。

使用特权

评论回复
17
HonMe| | 2010-3-14 09:30 | 只看该作者
它实现把一个字节的数据从低位到高位依次发送出去

使用特权

评论回复
18
HonMe| | 2010-3-14 09:32 | 只看该作者
dat=dat>>1;
这句话表示dat向左移一位

使用特权

评论回复
19
code-03|  楼主 | 2010-3-14 09:43 | 只看该作者
恩,有点懂了。。呵呵。谢了,为是么向右移一位啊?value=(j<<7)|(value>>1); ???????

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

169

帖子

1

粉丝