历史上的今天
返回首页

历史上的今天

今天是:2024年11月15日(星期五)

正在发生

2019年11月15日 | PIC单片机上实时时钟PCF8563测试程序

2019-11-15 来源:51hei

..............................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);

}


推荐阅读

史海拾趣

Alliance Memory公司的发展小趣事

Alliance Memory是一家专注于存储器产品的公司,以下是其发展历程的五个相关故事:

  1. 成立与发展初期: Alliance Memory成立于2006年,总部位于美国南卡罗来纳州。公司专注于提供DRAM(动态随机存取存储器)和SRAM(静态随机存取存储器)解决方案。在成立之初,公司致力于与全球供应链建立紧密的合作关系,以确保产品的质量和可靠性。通过与先进制造厂商合作,Alliance Memory能够提供高品质的存储器产品,满足客户的需求。

  2. 扩大产品线: 随着市场需求的增长,Alliance Memory不断扩大其产品线,涵盖各种容量和类型的DRAM和SRAM产品。公司不断改进和优化其制造工艺,并与全球领先的技术合作伙伴密切合作,以确保产品的性能和稳定性。通过不断提供新的存储器解决方案,Alliance Memory成功吸引了更多的客户,并在行业中树立了良好的声誉。

  3. 全球市场拓展: Alliance Memory的产品销售遍布全球各个地区,包括美国、欧洲、亚洲等市场。公司与全球各地的分销商和代理商建立了稳固的合作关系,以扩大其产品的市场份额。通过在全球范围内提供及时和高效的客户服务,Alliance Memory不断增强了其在国际市场上的竞争力。

  4. 技术创新与研发投入: 作为一家技术驱动型公司,Alliance Memory不断投入研发和创新,以提供最先进的存储器产品。公司的研发团队与业界领先的技术合作伙伴密切合作,不断推出具有竞争优势的新产品。通过持续的技术创新,Alliance Memory得以不断满足客户不断增长的需求,并保持在行业中的领先地位。

  5. 可持续发展与社会责任: 除了致力于业务发展,Alliance Memory还积极履行企业社会责任,关注环境保护和社会公益事业。公司采取了一系列可持续发展的举措,包括节能减排、资源循环利用等,努力降低对环境的影响。此外,Alliance Memory还参与各种公益活动,支持教育、环保和社区发展等领域的项目,为社会做出积极贡献。

Green Solution Technology Co Ltd公司的发展小趣事

对于听音耳机电路,网友可能的问题涉及多个方面,以下是一些常见问题及相应的回答:

一、技术性问题

  1. 耳机电路的工作原理是什么?
    • 回答:耳机电路主要通过音频信号放大器将音频设备(如手机、电脑等)输出的微弱电信号放大,然后驱动耳机的驱动单元(扬声器)产生声音。这个过程中,耳机电路还负责音频信号的传输和转换,确保音质清晰、音量适中。
  2. 为什么耳机电路会出现杂音或失真?
    • 回答:耳机电路出现杂音或失真的原因可能有很多,包括电路接触不良、线路老化、驱动单元故障、音频信号源问题等。此外,电磁干扰、设备不兼容等也可能导致音质问题。解决这类问题通常需要检查电路连接、更换损坏部件或调整设备设置。
  3. 如何判断耳机电路是否损坏?
    • 回答:判断耳机电路是否损坏可以通过以下方法:首先,检查耳机是否能正常发声,如果无声或声音异常,可能是电路问题;其次,使用万用表等工具检测电路中的电阻、电压等参数是否正常;最后,可以尝试将耳机连接到其他音频设备上进行测试,以排除设备问题。

二、维护与保养

  1. 如何保养耳机电路以延长使用寿命?
    • 回答:保养耳机电路的关键在于避免潮湿、防止碰撞和摔落,并定期清洁。使用时应注意避免拉扯耳机线,以免损坏内部电路。此外,在不使用耳机时,应将其存放在干燥、通风的地方,避免阳光直射和高温环境。定期使用软布轻轻擦拭耳机表面和插头,可以去除污垢和灰尘,保持电路清洁。
  2. 耳机电路进水了怎么办?
    • 回答:如果耳机电路进水,应立即停止使用并切断电源。然后,使用干燥的软布或纸巾轻轻擦拭耳机表面和插头上的水分。如果条件允许,可以将耳机放在通风良好的地方自然晾干,避免使用吹风机等热源直接吹干,以免损坏电路。如果进水情况严重或无法自行处理,建议送往专业维修中心进行检修。

三、升级与改造

  1. 如何升级耳机电路以提升音质?
    • 回答:升级耳机电路以提升音质需要一定的专业知识和技术。一般来说,可以通过更换更高品质的音频信号放大器、使用更优质的线路材料、优化电路设计等方式来实现。然而,这些操作可能比较复杂且存在风险,如果不熟悉相关技术,建议寻求专业人员的帮助。
  2. 是否可以自己动手改造耳机电路?
    • 回答:虽然理论上可以自己动手改造耳机电路,但这需要具备较高的电子技术和动手能力。如果操作不当,可能会导致电路损坏甚至耳机报废。因此,在没有足够经验和专业知识的情况下,不建议自己尝试改造耳机电路。

综上所述,针对听音耳机电路的问题,网友可能关心的方面包括技术性问题、维护与保养以及升级与改造等。在解决这些问题时,应根据具体情况采取相应的措施和方法。

Connector City公司的发展小趣事

随着全球环保意识的不断提高,电子行业对绿色环保的要求也越来越高。Connector City公司积极响应国家环保政策,加强了对生产过程的环保管理。公司引进了先进的环保设备和技术,减少了生产过程中的废弃物排放和能源消耗。同时,公司还注重产品的环保性能设计,推出了多款符合环保标准的新型连接器产品。通过坚持绿色环保和可持续发展理念,公司赢得了社会的广泛赞誉和支持。

这五个故事仅是对Connector City公司可能发展路径的一种虚构描述,实际情况可能因市场变化、公司策略调整等多种因素而有所不同。在实际发展中,公司需要根据自身情况和市场环境做出灵活的调整和决策。

Andon Electronics公司的发展小趣事

为了降低生产成本、提高生产效率,Connector City公司开始实施产业链整合战略。公司与上游原材料供应商和下游客户建立了紧密的合作关系,实现了供应链的优化和协同发展。通过整合产业链资源,公司不仅降低了采购成本和市场风险,还提高了产品质量和交货速度,进一步增强了市场竞争力。

睿赫(crechip)公司的发展小趣事

作为一家有社会责任感的企业,睿赫公司始终关注环境保护和可持续发展。公司在产品研发和生产过程中,积极采用环保材料和绿色生产工艺,减少对环境的影响。同时,公司还积极参与公益事业,为社会做出了积极的贡献。

在可持续发展方面,睿赫公司致力于推动电子行业的绿色化和智能化发展。公司不断加强技术研发和创新,推出了一系列符合环保要求和高性能要求的产品,为电子行业的可持续发展做出了积极的贡献。

Advanced Optoelectronic Technology Corp公司的发展小趣事

随着产品线的不断扩展,AOTC开始进军国际市场。公司积极与各大电子厂商合作,将光电转换器集成到各类电子产品中,从而实现了市场份额的快速增长。同时,公司还不断投入研发,对产品进行升级迭代,以满足市场不断变化的需求。

问答坊 | AI 解惑

回答: ASIC是什么?FPGA是什么?

问: ASIC的中文翻译是专用集成电路,为什么说它是一种嵌入式微处理器呢?FPGA也是一种嵌入式微处理器吗?我听有人说FPGA指的是一种封装结构,这是正确的吗? 答: 用于专用应用场合的处理器就是嵌入式处理器,不管它是可编程的还是不可编程的。 ...…

查看全部问答>

LEM电流电压传感器

瑞士LEM互感器、LEM电流互感器、LEM电涌保护器、LEM传感器、LEM电压互感器、LEM电量传感器、LEM无线电能表 LEM 是全球电量传感器的知名制造者,也是电量传感器领域的领导者。 LEM集团全球拥有多家公司,销售办事处遍布全球。其中瑞士日内瓦、中 ...…

查看全部问答>

LPC2101无法仿真。看看是不是编译器的错?

RealView MDK-ARM Version:3.24 CPU是LPC2101 H-JTAG 0.8 软件仿真正常。 现象是仿真器连接都正常。 硬件仿真 在Startup.s中还正常,转向main()函数就死机。 查了好多天了。今天忽然注意到软件仿真的程序地址0x000041A4(比16K还多) 而LPC2 ...…

查看全部问答>

今年的电子设计大赛专科组的怎么做啊?

本帖最后由 paulhyde 于 2014-9-15 09:09 编辑 今年的电子设计大赛专科组的怎么做啊?  …

查看全部问答>

三端稳压器(78、79系列)管脚序号判断技巧 大赛资料

本帖最后由 paulhyde 于 2014-9-15 09:21 编辑 在78**、79**系列三端稳压器中最常应用的是TO-220和TO-202两种封装。这两种封装的图形以及引脚序号、引脚功能如附图所示。 图中的引脚号标注方法是按照引脚电位从高到底的顺序标注的。这样 ...…

查看全部问答>

就做开发板吧:

    就做开发板吧!可以大家一起做。分析如下:     驱动2.4寸320*240 TFT 彩色液晶,这个只有用IO口模拟LCD的8位总线,最低需要耗费10个IO。这个并不难,难度系数0.3。     驱动SD卡,通过SPI接口 ...…

查看全部问答>

S3C2440平台WinCE5.0中串口发送堵塞现象的疑惑

S3C2440平台WinCE5.0中串口发送堵塞现象的疑惑:    本人开发一个软件,使用TQ公司的SKY2440开发板为模板,使用的是从4.2移植到wince5.0使用的BSP包。    该软件需要用到2个串口(COM0和COM1),TCP/UDP编程;修改MDD层的mdd ...…

查看全部问答>

2440 Camera接口配置

大家好,我请教一个关于2440的问题。我用2440连接一个ITU656接口时序的摄相头,为什么一直接不到同步信号?模块出来的同步开始是(FF,00,00,80),结束是(FF,00,00,90)。2440的ForthWord中的F,V,H是不是同步信号线上的电平?…

查看全部问答>

EVC中定义的数组如何存储到文本文件中

如题,我有一个数组,类型为short,想存储成文本文件怎么实现,希望高手不吝赐教,多谢!…

查看全部问答>

应变传感器与msp430f149的问题

请问下应变传感器输出的电压信号通过运放放大后,msp是怎么转换模拟信号为数字信号的,149的可以转换ad的输入电压范围是多少啊,有没有相关的程序啊…

查看全部问答>