时钟日历芯片NXP8563写字地址无应答,求教

[复制链接]
 楼主| alieve 发表于 2012-2-17 13:34 | 显示全部楼层 |阅读模式
本帖最后由 alieve 于 2012-2-17 16:00 编辑

MCU是飞思卡尔8位单片机MC9S08DZ48。
IIC成功初始化。
发启动信号后,发送器件地址0xa2,此时8563有应答。
其后,再发字地址,无论是哪一个,都没有应答信息。
疑惑……求教各位。
 楼主| alieve 发表于 2012-2-17 15:09 | 显示全部楼层
什么情况,楼上晓得其中猫腻?
贴一段代码过来。
  1. void Send_Data(uchar ch)
  2. {
  3.   IICS_IICIF |= 1;
  4.   IICD = ch;
  5.   while(!IICS_IICIF);
  6. }

  7. void Wait_Ack(void)
  8. {
  9.   while(IICS_RXAK);
  10. }

  11. void main(void) {
  12.   byte second = 0;
  13.   byte i, temp;
  14.   
  15.   Init_MCG();
  16.   IICF_MULT = 0b00;
  17.       // 00 mul=1
  18.   IICF_ICR = 0x1D;
  19.       // 011101 ICR = 160
  20.       // IIC baud rate is: 8M/(1*160)=50kb
  21.   IICC1_IICEN |= 0b1;
  22.   while(IICS_BUSY);
  23.   // start IIC in master transmit mode
  24.   IICC1 |= 0x30;
  25.   while(!IICS_BUSY);
  26.   Send_Data(0xa2);
  27.   Wait_Ack();
  28.   Send_Data(0x0);
  29.   IICS_IICIF |= 1;
  30.   Wait_Ack();
  31.   IICS_IICIF |= 1;
  32.   Send_Data(0x0);
  33.   IICC1_RSTA |= 1;
  34.   Send_Data(0xa3);
  35.   Wait_Ack();
  36.   IICC1_TX &= 0;
  37.   IICD;
  38.   for(i = 0; i < 16; ++i) {
  39.     IICS_IICIF |= 1;
  40.     second = IICD;
  41.   }
  42.   IICC1_MST &= 0;
  43.   EnableInterrupts; /* enable interrupts */
  44.   for(;;) {
  45.     __RESET_WATCHDOG(); /* feeds the dog */
  46.   } /* loop forever */
  47.   /* please make sure that you never leave main */
  48. }
  1. /*
  2. ** MCG in PEE mode
  3. ** using external oscillator
  4. ** oscillator clock 16MHz
  5. ** bus system clock 8MHz
  6. */
  7. void Init_MCG(void)
  8. {
  9.   /* set system clock */
  10.   MCGC2 = 0x36;
  11.         // 00 BDIV divide-by-1
  12.         // 1  RANGE high frequency range
  13.         // 1  HGO external oscillator for high gain operation
  14.         // 0
  15.         // 1  EREFS a crystal is being used
  16.         // 1  ERCLKEN ensure the external reference clock is active
  17.         // 0
  18.   while(!MCGSC_OSCINIT);
  19.   MCGC1 = 0xB8;
  20.         // 10 CLKS select external reference clock as system clock source
  21.         // 111 RDIV divide-by-128
  22.         // 0   IREFS select the external reference  clock
  23.         // 00
  24.   while(MCGSC_IREFST);
  25.   while(MCGSC_CLKST != 0b10);
  26.   MCGC1 = 0xA0;
  27.   MCGC3 = 0x44;
  28.         // 0
  29.         // 1  PLLS  select the PLL
  30.         // 0
  31.         // 0
  32.         // 0100  VDIV  multiply-by-16 1MHz reference * 16 = 16MHz
  33.   while(!MCGSC_PLLST);
  34.   while(!MCGSC_LOCK);
  35.   MCGC1 = 0x20;
  36.   while(MCGSC_CLKST != 0b11);
  37. }
16M晶振, 8M总线频率。
用示波器查看SCL, SDA时序,与寄存器反应的情况相符合:发A2H, slave device有应答,然后是字地址00H无应答。SDA第9位高电平。

求教是哪个地方原因。程序中有错误也恳请指出。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

2

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

0

主题

2

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部