永发信息网

使用AT24C02时ACC寄存器的问题

答案:1  悬赏:0  手机版
解决时间 2021-08-18 23:12
  • 提问者网友:遁入空寂
  • 2021-08-18 17:56

我的移位写子函数程序如下:

void write(uchar date)  
{
 uchar temp=0,i;
 temp=date;
 for(i=0;i<8;i++)
 {
  temp=temp<<1;
  SDA=CY;   
  _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  SCL=1;
  _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  SCL=0;
  _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
 }
}

这样调试过是没问题的。

但是我改为这样:

先定义个   sbit ACC7=ACC^7;

然后

void write(uchar date)  
{
 uchar   i;
 ACC=date;
 for(i=0;i<8;i++)
 {
  SDA=ACC7;

  ACC=ACC<<1;
  _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  SCL=1;
  _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  SCL=0;
  _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
 }
}

这样就不行了。读取的数是255,无论事先存什么数到AT24C02,读回来的都是255。有高手能帮忙吗?

最佳答案
  • 五星知识达人网友:三千妖杀
  • 2021-08-18 18:29
一、选择题(共30分)1、8051有( B )内部ROM。A.0K    B.4K    C.8K    D.64K2、在使用8031时,EA信号引脚应(  A  )。A.接地    B.接电源    C.悬空     D.接地址线3、下列说法不正确的是(  D  )。A.复位后,CPU使用“0”组工作寄存器B.内部RAM00H—1FH单元为工作寄存器组使用的区间C.执行RETI指令时,CPU不响应中断D.8051不可连接两个以上的外部中断源4、8051单片机堆栈的容量不能超过(  C  )字节。A.32    B.64    C.128    D.2565、单片机复位后,SP、PC、I/O口的内容为( C )A.SP = 07H    PC = 00H    P0 = P1 = P2 = P3 = FFHB.SP = 00H    PC = 0000H    P0 = P1 = P2 = P3 = 00HC.SP = 07H    PC = 0000H    P0 = P1 = P2 = P3 = FFHD.SP = 00H    PC = 00H    P0 = P1 = P2 = P3 = 00H 6、在MCS-51单片机中,当有压入或弹出堆栈操作时,SP的内容将随之增大或减小;程序计数器PC的内容将始终指示下一条将要执行指令的地址,所以只要改变PC的内容将改变程序的运行路径。SP的内容与PC的内容(  B  )。A.都是8位地址    B.都是16位地址C.位数相同    D.位数不同7、若A=00H,下列指令中( D )执行后,CY=0。A.SUBB  A,#01H        B.DEC  A  C.CJNE  A,#01H,REL    D.ORL  C,/ACC.08、下列指令中,不影响堆栈指针的指令是(B)。A.RET    B.JB bit,relC.LCALL addr16    D.RETI9、在进行串行通信时,若两机的发送与接收可以同时进行,则称为(  D   )。A.半双工传送  
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯