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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8160|回復: 4
收起左側

PIC單片機上實時時鐘PCF8563測試程序

[復制鏈接]
ID:1 發表于 2014-6-12 20:53 | 顯示全部樓層 |閱讀模式
...............................PCF8563測試程序主函數............................
................................................................................
................................................................................
#include
#include "pcf8563.h"
#include "IIC.h"
__CONFIG(FOSC_INTOSC&WDTE_OFF&MCLRE_OFF);  //PIC配置位設置
void init_fosc()    //PIC內部晶振設置
{
OSCCON=0x61;
}
...................在PCF8563.h頭文件里定義的結構體.....................
struct Time
{
uchar second;
uchar minute;
uchar hour;
uchar day;
uchar week;
uchar month;
uchar year;
};

.....................................................................
struct Time time;
void main()

{
init_fosc();
time.second=55;
time.minute=51;
time.hour=11;
time.day=2;
time.week=6;
time.month=4;
time.year=14;
P8563_Set_Time();   //PCF8563設置時間子函數
nop();nop();
while(1)
{
P8563_Read_Time();//讀取PCF8563子程序
TRISB=0b00000000;
PORTB=~time.second;
uint n;
for(n=0;n<600;n++)
{
nop();
}
}
while(1);
}
...............................IIC通訊子程序.................................
.............................................................................
.............................................................................

#include
#include "IIC.h"
void start()   //IIC起始程序
{
TRISC5=0;   //SCL輸出
TRISC4=0;   //SDA輸出
    SDA_OUT=1;
    SCL_OUT=1;
nop();     
SDA_OUT=0;
nop();      //大于4us
SCL_OUT=0;  
}
void stop()  //IIC停止子程序
{
TRISC5=0;
TRISC4=0;   
        SDA_OUT=0;
        SCL_OUT=1;
nop();        //大于4us
SDA_OUT=1;
TRISC4 = 1;   //  結束后釋放總線,sda輸入
}
uchar IIC_Get_Ack(void)   //檢測應答信號
{
TRISC4=1;        //應答信號由從機發出,所以SDA設為輸入
SCL_OUT=0;
SCL_OUT=1;
nop();
if(SDA_IN==1)    //讀取SDA狀態時,SCL保持高電平
{
ACK=1;
}
else
{
ACK=0;
}
SCL_OUT=0;
return (ACK);
}
void IIC_Ack()           //主機向從機應答,發送繼續信號
{
TRISC4=0;
TRISC5=0;
SDA_OUT=0;
        SCL_OUT=0;
SCL_OUT=1;
nop();            //大于4us
SCL_OUT=0;
SDA_OUT=1;
}
void IIC_NOAck()         //主機向從機非應答,停止繼續讀取
{
TRISC4=0;
TRISC5=0;
SDA_OUT=1;
SCL_OUT=0;
SCL_OUT=1;
    nop();
SCL_OUT=0;
SDA_OUT=0;
}
void IIC_Write_Byte(uchar dat)     //發送一個字節
{
uchar bitcount=8;
do
{
TRISC4=0;
TRISC5=0;
if((dat&0x80)==0x80)       //dat最高位為1,SDA拉高;dat最高位為0,SDA拉低
{
SDA_OUT=1;
}
else
{
SDA_OUT=0;
}
SCL_OUT=0;
SCL_OUT=1;
nop();
SCL_OUT=0;       //SCL為低電平時,允許SDA電平變化
dat=dat<<1;
bitcount--;
}while(bitcount);
TRISC4=1;
nop();nop();
}
uchar IIC_Read_Byte()            //接受一個字節
{
uchar temp1=0;
uchar bitcount1=8;
TRISC4=1;                //SDA設置為輸入
TRISC5=0;
do
{
SCL_OUT=0;
SCL_OUT=1;
nop();
if(SDA_IN)
{
temp1=temp1|0x01;    //如果SDA為1,則置高temp1最低位
}
else
{
temp1=temp1&0xfe;    //如果SDA為0,則置低temp1最低位
}
SCL_OUT=0;
if(bitcount1-1)
{
temp1=temp1<<1;
}
bitcount1--;
}while(bitcount1);
return (temp1);
}
................................PCF8563子程序.......................................
....................................................................................
....................................................................................

#include
#include "PCF8563.h"
#include "IIC.h"
struct DownCounter dcounter;
struct Time time;
uchar Val2BCD(uchar x)   //十進制轉BCD碼子程序
{
return ((x/10)<<4)+((x)&0x0F);  
}
uchar PCF8563_Write_Bytes(uchar addr,uchar length,uchar *pbuf)  //寫入子程序
{
uchar send_da;
uchar i=0;
start();
IIC_Write_Byte(0xA2);     //器件地址
do
{;
}while(IIC_Get_Ack());
IIC_Write_Byte(0x02);    //器件讀取起始位
do
{;
}while(IIC_Get_Ack());
for(i=0;i
{
send_da=*(pbuf++);
IIC_Write_Byte(send_da);
do
{;
}while(IIC_Get_Ack());
}
stop();
nop();nop();
}
uchar PCF8563_Read_Bytes(uchar addr,uchar length,uchar *pbuf)  //PCF8563讀取子程序
{
uint receive_da;
uchar i=0;
start();
IIC_Write_Byte(0xa2);   //器件地址
do
{;
}while(IIC_Get_Ack());
IIC_Write_Byte(0x02);   //最小地址
do
{;
}while(IIC_Get_Ack());
start();
IIC_Write_Byte(0xa3);   //器件讀取地址
do
{;
}while(IIC_Get_Ack());
TRISC4=0;
while(length--)
{
receive_da=IIC_Read_Byte();
*(pbuf++)=receive_da;
IIC_Ack();
}
IIC_NOAck();
stop();
nop();nop();nop();nop();nop();nop();
return pbuf[i];
}
uchar P8563_Read_Time()   //PCF8563讀取時間子程序
{
uchar temp[7];
PCF8563_Read_Bytes(0x02,0x07,temp);
time.second=BCD2Val(temp[0]&0x7f);
time.minute=BCD2Val(temp[1]&0x7f);
time.hour=BCD2Val(temp[2]&0x1f);
time.day=BCD2Val(temp[3]&0x3f);
time.week=BCD2Val(temp[4]&0x07);
time.month=BCD2Val(temp[5]&0x1f);
time.year=BCD2Val(temp[6]);
return 0;
}
uchar BCD2Val(uchar x)   //BCD轉十進制
{
return ((x>>4)&0x0f)*10+(x&0x0f);
}
uchar P8563_Set_Time()   //PCF8563設置時間子程序
{
uchar temp[7];
uchar i;
for(i=0;i<7;i++)
{
temp[i]=Val2BCD(((uchar *)(&time))[i]);
}
return PCF8563_Write_Bytes(0x02,7,temp);
}
uchar P8563_Set_DownCounter()
{
return PCF8563_Write_Bytes(0x0e,2,(uchar *)&dcounter);
}
uchar P8563_Read_DownCounter()
{
return PCF8563_Read_Bytes(0x0e,2,(uchar *)&dcounter);
}


回復

使用道具 舉報

ID:55838 發表于 2014-6-13 23:11 | 顯示全部樓層
感謝分享,收了學習學習
回復

使用道具 舉報

ID:105313 發表于 2016-2-16 12:29 來自手機 | 顯示全部樓層
謝謝分享
回復

使用道具 舉報

ID:128391 發表于 2016-6-28 19:13 | 顯示全部樓層
謝謝大大的分享
回復

使用道具 舉報

ID:128391 發表于 2016-6-28 19:14 | 顯示全部樓層
謝謝大大的分享
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲成人av一区二区 | 欧美精品一区二区三区在线 | 99久久久国产精品 | 激情国产视频 | 黄色成人在线观看 | 麻豆hd | 色.com| 精品一区精品二区 | 在线观看免费福利 | 视频一区二区国产 | 日本一区视频在线观看 | 一区二区三区视频 | 久久久久久国模大尺度人体 | 国产999精品久久久久久绿帽 | 色爱av| 国产成人久久精品一区二区三区 | 在线一区 | 午夜三级在线观看 | 日韩高清一区 | 久久男人| 91成人在线 | 久久久久久国产精品免费免费狐狸 | 久久久免费少妇高潮毛片 | 91在线导航 | 噜噜噜噜狠狠狠7777视频 | 午夜av电影 | 精品亚洲一区二区三区 | 精品婷婷| 欧美性精品 | 嫩草视频网 | 狠狠涩| 天天色影视综合 | 亚洲成人高清 | 国产欧美精品一区二区 | 久久99精品国产 | av黄色片在线观看 | 国产三级精品三级在线观看四季网 | 国产欧美日韩在线一区 | 视频一区二区在线观看 | 日韩一区二区在线视频 | 日本三级全黄三级三级三级口周 |