久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 1526|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

時(shí)鐘芯片PCF2129的單片機(jī)讀寫(xiě)子程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
時(shí)鐘芯片PCF2129精度高,論壇沒(méi)有這個(gè)芯片資料,剛好自己用到,找了好久改寫(xiě)調(diào)試通過(guò),補(bǔ)充一下論壇資料,其他不多說(shuō)了。

單片機(jī)源程序如下:
  1. #include <C8051F410.h >
  2. #include "C8051F410_SMBUS.h"
  3. #ifndef __PCF2129_H__
  4. #define __PCF2129_H__
  5. #define  PCF2129_SLA    0xA2            //  定義PCF2129的器件地址                                    
  6. #define  s              0x00            //  定義PCF2129的秒寄存器地址     
  7. #define  m              0x01            //  定義PCF2129的分寄存器地址     
  8. #define  h              0x02            //  定義PCF2129的小時(shí)寄存器地址   
  9. #define  d              0x03            //  定義PCF2129的天寄存器地址     
  10. #define  wd             0x04            //  定義PCF2129的星期寄存器地址   
  11. #define  mo             0x05            //  定義PCF2129的月寄存器地址     
  12. #define  y              0x06            //  定義PCF2129的年寄存器地址
  13. //extern idata unsigned char        Time[7];
  14. extern xdata unsigned char        Time[7];  //時(shí)間寄存器

  15. void PCF2129_W_time(void);
  16. void PCF2129_R_time(void);
  17. void PCF2129_Init(void);

  18. #endif

  19. 由于我使用的是C8051F410芯片的硬件SMBUS(IIC)不具有通用性C文件就不發(fā)了,隨便找一個(gè)模擬IIC子程序改寫(xiě)一下就好
  20. #ifndef __C8051F410_SMBUS_H__
  21. #define __C8051F410_SMBUS_H__
  22. //------------------------------------------------------------------
  23. void SMbus_W(uchar wrda ,uchar dat);//寫(xiě)半個(gè)字節(jié)(器件碼,數(shù)據(jù))
  24. //適用與PCF8574iic擴(kuò)展IO 器件碼4e, 8574A器件碼7e;
  25. uchar SMbus_ByteR(uchar wrda );  //讀半個(gè)字節(jié) (器件碼)
  26.   //適用與PCF8574iic擴(kuò)展器件碼4e, 8574A器件碼7e;           smbus時(shí)鐘50khz
  27. //=============================================================================
  28. void SMbus_Write(uchar wrda ,uchar dest_addr, uchar dat);               
  29. //         寫(xiě)一個(gè)字節(jié) (   器件碼  ,   地址          ,   數(shù)據(jù)         )
  30. uchar SMbus_ByteRead(uchar wrda ,uchar dest_addr);           
  31. //     讀一個(gè)字節(jié)      器件碼         地址  
  32. //讀流程為 (起始,器件碼寫(xiě),應(yīng)答,操作地址,應(yīng)答,停,起始,器件碼讀,應(yīng)答,讀數(shù)據(jù))。
  33. // 適用與EEPROM存儲(chǔ)器件        24c02,器件碼a0,24c16器件碼a0-ae, 時(shí)鐘PCF2129,取件碼a2
  34. //=======================================================================================
  35. void SMbus_WriteArray(uchar wrda , uchar dest_addr, uchar *src_addr, uchar len);
  36. //連續(xù)寫(xiě)一串?dāng)?shù)組        器件碼         起始地址        數(shù)組             字?jǐn)?shù)
  37. //流程為(起始,器件碼寫(xiě),應(yīng)答,操作地址,應(yīng)答,寫(xiě)數(shù)據(jù),應(yīng)答,寫(xiě)N個(gè)數(shù)據(jù)————停)
  38. void SMbus_Write_Array(uchar wrda,uchar dest_addr, uchar *src_addr,uchar len);
  39. //斷續(xù)寫(xiě)一串?dāng)?shù)組        器件碼         起始地址        數(shù)組          字?jǐn)?shù)  
  40. void SMbus_ReadArray (uchar wrda,  uchar src_addr, uchar *dest_addr,  uchar len);
  41. //    讀取一串?dāng)?shù)組      器件碼      起始地址            讀出存儲(chǔ)位置                     字?jǐn)?shù)
  42. //讀流程為(起始,器件碼寫(xiě),應(yīng)答,操作地址,應(yīng)答,停,起始,器件碼讀,應(yīng)答,讀數(shù)據(jù)應(yīng)答,————讀N數(shù)據(jù),停)

  43. #endif

  44. //=================================================================
  45. #include "C8051F410.h"
  46. #include "C8051F410_SMBUS.h"
  47. #include "PCF2129.h"
  48. //======================================================================

  49. xdata unsigned char        Time[7];  //時(shí)間寄存器


  50. #define BCD_TO_HEX(bcd) ((((bcd)>>4)*10)+((bcd)&0x0F))
  51. #define HEX_TO_BCD(hex) ((((hex)/10)<<4)+((hex)%10))  


  52. void PCF2129_W_time(void)
  53. {   
  54.     xdata unsigned char Time_o[7];
  55.    uchar x = 0;
  56.     for (x=0; x < 7; x++)               //  清空數(shù)據(jù)緩沖區(qū)
  57.         Time_o[x] = 0;
  58.   SMbus_Write( 0xa2,0x00,0X20);         //停止時(shí)鐘
  59.     Time_o[s]  = (HEX_TO_BCD(Time[s]))&0x7f;  //  秒
  60.         Time_o[m]  = (HEX_TO_BCD(Time[m]))&0x7f;  //  分
  61.         Time_o[h]  = (HEX_TO_BCD(Time[h]))&0x3f;  //  小時(shí)
  62.         Time_o[d]  = (HEX_TO_BCD(Time[d]))&0x3f;  //  日
  63.         Time_o[wd] = (HEX_TO_BCD(Time[wd]))&0x07;  //  星期
  64.         Time_o[mo] = (HEX_TO_BCD(Time[mo]))&0x3f;  //  月
  65.         Time_o[y]  = (HEX_TO_BCD(Time[y]));  //  年
  66.         SMbus_WriteArray(0xa2,0x03,Time_o, 7);
  67.   SMbus_Write( 0xa2,0x00,0X00);         //啟動(dòng)時(shí)鐘
  68. }

  69. void PCF2129_R_time(void)
  70. {   
  71.             xdata unsigned char Time_in[7];
  72.      SMbus_ReadArray (0xa2,  0x02, Time_in, 7);
  73.            Time[s]  = BCD_TO_HEX((Time_in[s]&0x7F)) ;        //  秒
  74.            Time[m]  = BCD_TO_HEX(Time_in[m]) ;        //        分
  75.            Time[h]  = BCD_TO_HEX(Time_in[h]) ;        //        小時(shí)
  76.            Time[d]  = BCD_TO_HEX(Time_in[d]) ;        //        日
  77.            Time[wd] = BCD_TO_HEX(Time_in[wd]) ;        //        星期
  78.            Time[mo] = BCD_TO_HEX(Time_in[mo]) ;        //        月
  79.            Time[y]  = BCD_TO_HEX(Time_in[y]) ;        //        年
  80. }

  81. void PCF2129_Init(void)
  82. {
  83.    // u8 x = 0;  
  84.         SMbus_Write( 0xa2,0x00,0X00);         //啟動(dòng)時(shí)鐘
  85.         SMbus_Write( 0xa2,0x01,0X00);         //啟動(dòng)時(shí)鐘
  86.         SMbus_Write( 0xa2,0x02,0X00);         //啟動(dòng)時(shí)鐘

  87. //        SMbus_Write( 0xa2,0x10,0X82);                 //看門(mén)狗秒報(bào)警控制。
  88.         SMbus_Write( 0xa2,0x0f,0X06);                 //  設(shè)置CLKOUT為1Hz
  89.         SMbus_Write( 0xa2,0x19,0X0C);                 //  晶振老化補(bǔ)償設(shè)為-4ppm
  90. }

  91. //================================================================
復(fù)制代碼

注意重點(diǎn)這個(gè)芯片時(shí)間寄存器讀和寫(xiě)位置是不同的 ,雖然手冊(cè)給的寄存器序號(hào)03開(kāi)始是秒但是我的2129芯片卻是00寄存器只能寫(xiě)不能讀,
讀的時(shí)候自動(dòng)跳過(guò)。也就出現(xiàn)了SMbus_WriteArray(0xa2,0x03,Time_o, 7);    //=====重點(diǎn) 把Time_o數(shù)組寫(xiě)入器件A2 從地址0X03開(kāi)始寫(xiě),寫(xiě)7個(gè)數(shù)據(jù)。讀的時(shí)候卻是秒從0X02開(kāi)始SMbus_ReadArray (0xa2,  0x02, Time_in, 7);       //==========重點(diǎn)

附PCF2129手冊(cè): pcf2129.pdf (951.52 KB, 下載次數(shù): 12)

評(píng)分

參與人數(shù) 1黑幣 +80 收起 理由
admin + 80 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:16255 發(fā)表于 2022-12-2 11:23 | 只看該作者
這么貴啊……


回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲 中文 欧美 日韩 在线观看 | 亚洲成人一区二区 | 久久不卡| 国产综合视频 | 日韩高清中文字幕 | 亚洲第一视频 | 国产精品高潮呻吟久久 | 伊人看片 | 亚洲日日夜夜 | 一区二区三区四区电影视频在线观看 | 日日综合 | 国产伦精品一区二区三区视频金莲 | 国产精品美女在线观看 | 国产精品一二三区 | 自拍偷拍av | 日韩精品一区中文字幕 | av国产精品毛片一区二区小说 | 久久不卡 | 久久精品小视频 | 超碰在线97国产 | 久久青| 国产传媒 | 欧美三级电影在线播放 | 日韩一级电影免费观看 | 黑人精品xxx一区一二区 | 国产探花 | 久久久久亚洲精品 | 欧美人妇做爰xxxⅹ性高电影 | 精品乱码一区二区 | 欧美日韩综合视频 | 在线观看亚洲专区 | 亚洲视频在线观看免费 | 精品国产99 | 成人深夜福利在线观看 | 亚洲一区二区三区四区在线观看 | 国产9久 | 日韩伦理一区二区 | 国产在线网站 | 亚洲精品国产成人 | 国产精品久久久免费 | 成人国产精品免费观看 |