標(biāo)題: 求助:stc單片機(jī)程序改arduino時(shí),iic通訊調(diào)試不通? [打印本頁(yè)]

作者: 3205440665    時(shí)間: 2020-6-22 21:02
標(biāo)題: 求助:stc單片機(jī)程序改arduino時(shí),iic通訊調(diào)試不通?
學(xué)習(xí)arduino,需要從rx8025中讀取時(shí)間,但是讀出來(lái)的時(shí)間都是0;

被注釋的程序是stc的程序,能正常使用,嘗試改成arduino的iic通訊,一直調(diào)試不通。

麻煩幫我看看》》

//還有部分其他程序,但到時(shí)調(diào)用這兩個(gè)函數(shù),應(yīng)該無(wú)關(guān)吧�。。�!




/**************************************
寫(xiě)一個(gè)字節(jié)數(shù)據(jù)到指定地址
**************************************/
void R8025T_WriteOneByte(unsigned char  Addr,unsigned char  Data)
{
            /*以下是stc單片機(jī)程序
               IIC_Start();
               IIC_SendByte(R8025T_Address);
               IIC_SendByte(Addr);
               IIC_SendByte(Data);
               IIC_Stop();
               */

    //以下是自己寫(xiě)的arduino程序
    Wire.beginTransmission(R8025T_Address);
    Wire.write(Addr);
    Wire.write(Data);
    Wire.endTransmission();
}
/**************************************
在指定地址讀一個(gè)字節(jié)數(shù)據(jù)
**************************************/
unsigned char  R8025T_ReadOneByte(unsigned char  Addr)
{
    unsigned char  Data;

                  /*以下是stc單片機(jī)程序
                  IIC_Start();                    //起始信號(hào)
                  IIC_SendByte(R8025T_Address);     //發(fā)送設(shè)備地址+寫(xiě)信號(hào)
                  IIC_SendByte(Addr);               //發(fā)送存儲(chǔ)單元地址
                  IIC_Start();                      //起始信號(hào)
                  IIC_SendByte(R8025T_Address+1);   //發(fā)送設(shè)備地址+讀信號(hào)
                  Data = IIC_RecvByte();
                  IIC_SendACK(1);
                  IIC_Stop();                       //停止信號(hào)
                  return(Data);
                 */


    Wire.beginTransmission(R8025T_Address);
    Wire.write(Addr);   
    Wire.beginTransmission(R8025T_Address+1);
    Wire.requestFrom(R8025T_Address+1,1);
    Data=Wire.available();
    Wire.endTransmission();
    return (Data);  
}






作者: 3205440665    時(shí)間: 2020-6-22 21:03
現(xiàn)附上調(diào)用的程序
作者: 3205440665    時(shí)間: 2020-6-22 21:04
/******************************************************************************* * 函數(shù)名 : BCD2HEX * 描述    : BCD轉(zhuǎn)為HEX * 參數(shù)    : -bcd_data:傳入BCD格式的數(shù)據(jù) * 返回值 : 十六進(jìn)制數(shù) *******************************************************************************/ unsigned char  BCD2HEX(unsigned char  bcd_data)   {          unsigned char temp;   temp=(bcd_data>>4)*10+bcd_data&0x0f;     return temp; }  /******************************************************************************* * 函數(shù)名 : HEX2BCD * 描述    : HEX轉(zhuǎn)為BCD   * 參數(shù)    : -hex_data:傳入十六進(jìn)制格式的數(shù)據(jù) * 返回值 : BCD碼 *******************************************************************************/ unsigned char  HEX2BCD(unsigned char  hex_data)   {        unsigned char  temp;      temp=((hex_data/10)<<4) + (hex_data%10);        return temp;   } /******************************************************************************* * 函數(shù)名 : Reset_Time * 描述    : 設(shè)置出廠時(shí)間 * 參數(shù)    : 無(wú) * 返回值 : 無(wú) *******************************************************************************/ void Reset_Time(void) {   //R8025T_WriteOneByte(0x07, 0x00);//不使用   //R8025T_WriteOneByte(0x0E, 0x20);//設(shè)置24小時(shí)制,可能只有R8025SA才行。    //寫(xiě)入出廠時(shí)間 00:00:00    R8025T_WriteOneByte(0, HEX2BCD(33) ); //寫(xiě)入R8025T 秒   R8025T_WriteOneByte(1, HEX2BCD(35) ); //寫(xiě)入R8025T 分   R8025T_WriteOneByte(2, HEX2BCD(20) ); //寫(xiě)入R8025T 時(shí)  }  void Get_Time(void) {   BUF[0] = R8025T_ReadOneByte(0);   BUF[1] = R8025T_ReadOneByte(1);   BUF[2] = R8025T_ReadOneByte(2); //  DateTime[0] = BCD2HEX(BUF[0]);//讀分   DateTime[1] = BCD2HEX(BUF[1]);//讀秒   DateTime[2] = BCD2HEX(BUF[2]);//讀時(shí)    //說(shuō)明:DateTime[2],BUF[0],DateTime[1]分別存放十六進(jìn)制的時(shí)、分、秒   // 為什么BUF[0]存放分的值,而不是DateTime[0],原因不明。 }
作者: 3205440665    時(shí)間: 2020-6-23 07:52
3205440665 發(fā)表于 2020-6-22 21:04
/******************************************************************************* * 函數(shù)名 : BCD2HEX ...

另外一部分程序


/*******************************************************************************
* 函數(shù)名 : BCD2HEX
* 描述    : BCD轉(zhuǎn)為HEX
* 參數(shù)    : -bcd_data:傳入BCD格式的數(shù)據(jù)
* 返回值 : 十六進(jìn)制數(shù)
*******************************************************************************/
unsigned char  BCD2HEX(unsigned char  bcd_data)  
{   
   
  unsigned char temp;
  temp=(bcd_data>>4)*10+bcd_data&0x0f;
    return temp;
}

/*******************************************************************************
* 函數(shù)名 : HEX2BCD
* 描述    : HEX轉(zhuǎn)為BCD  
* 參數(shù)    : -hex_data:傳入十六進(jìn)制格式的數(shù)據(jù)
* 返回值 : BCD碼
*******************************************************************************/
unsigned char  HEX2BCD(unsigned char  hex_data)  
{   
    unsigned char  temp;
    temp=((hex_data/10)<<4) + (hex_data%10);
  
    return temp;  
}
/*******************************************************************************
* 函數(shù)名 : Reset_Time
* 描述    : 設(shè)置出廠時(shí)間
* 參數(shù)    : 無(wú)
* 返回值 : 無(wú)
*******************************************************************************/
void Reset_Time(void)
{
  //R8025T_WriteOneByte(0x07, 0x00);//不使用
  //R8025T_WriteOneByte(0x0E, 0x20);//設(shè)置24小時(shí)制,可能只有R8025SA才行。

  //寫(xiě)入出廠時(shí)間 00:00:00
  R8025T_WriteOneByte(0, HEX2BCD(33) ); //寫(xiě)入R8025T 秒
  R8025T_WriteOneByte(1, HEX2BCD(35) ); //寫(xiě)入R8025T 分
  R8025T_WriteOneByte(2, HEX2BCD(20) ); //寫(xiě)入R8025T 時(shí)
}

void Get_Time(void)
{
  BUF[0] = R8025T_ReadOneByte(0);
  BUF[1] = R8025T_ReadOneByte(1);
  BUF[2] = R8025T_ReadOneByte(2);
//  DateTime[0] = BCD2HEX(BUF[0]);//讀分
  DateTime[1] = BCD2HEX(BUF[1]);//讀秒
  DateTime[2] = BCD2HEX(BUF[2]);//讀時(shí)
  //說(shuō)明:DateTime[2],BUF[0],DateTime[1]分別存放十六進(jìn)制的時(shí)、分、秒
  // 為什么BUF[0]存放分的值,而不是DateTime[0],原因不明。
}
作者: aking991    時(shí)間: 2020-6-23 08:32
IIC通訊能不能成功最關(guān)鍵就是時(shí)序,時(shí)序搞對(duì)了就沒(méi)有問(wèn)題,查查自子函數(shù)的IIC延時(shí)時(shí)間對(duì)應(yīng)和晶振對(duì)應(yīng)關(guān)系,這樣就應(yīng)沒(méi)問(wèn)題




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1