51单片机驱动DS12C887的时钟芯片C语言程序

发布者:灵感狂舞最新更新时间:2015-07-03 关键字:51单片机  DS12C887  时钟芯片 手机看文章 扫描二维码
随时随地手机看文章
本程序旨在读出DS12C887的时间,显示部分只做了分和秒的部分,已通过测试,详细注释很好用的。

#include < absacc.h >  

#include < reg51.h >  

#define uchar unsigned char  

#define MCA XBYTE [ 0xbf0a ]    /*寄存器A*/  

#define MCB XBYTE [ 0xbf0b ]    /* 寄存器B*/  

#define MCC XBYTE [ 0xbf0c ]    /* 寄存器C*/  

#define MCD XBYTE [ 0xbf0d ]    /*寄存器D */  

#define HOURW XBYTE [ 0xbf05 ]  /*时报警*/  

#define SECONDW XBYTE [ 0xbf01 ]  /*秒报警*/  

#define YEAR XBYTE [ 0xbf09 ]  

#define MONTH XBYTE [ 0xbf08 ]  

#define DAY XBYTE [ 0xbf07 ]  

#define HOUR XBYTE [ 0xbf04 ]  

#define MU XBYTE [ 0xbf02 ]    

#define SECOND XBYTE [ 0xbf00 ]  

sbit uip_bit = ACC^7;   /* 保存更新周期标志位*/  

uchar  dt[6] = { 0x06,0x01,0x01,0x00,0x00,0x00 };  /* 时标缓冲区及初值 ,设置时间,用于时间校准?*/  

sbit bita=P2^0;  

sbit bitb=P2^1;  

sbit bitc=P2^2;  

sbit bitd=P2^3;  

code uchar dispcode[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//段码  

uchar dispbit[4]={0,0,0,0};/*显示位*/  

/*显示函数*/  

void disp()  

    {  

    uchar k;  

    bita=1;bitb=bitc=bitd=0;  

    P0=dispcode[dispbit[0]];  

    for(k=0;k<150;k++);  

    bita=bitc=bitd=0;bitb=1;      

    P0=dispcode[dispbit[1]];      

    for(k=0;k<150;k++);        

    bita=bitb=bitd=0;bitc=1;        

    P0=dispcode[dispbit[2]];        

    for(k=0;k<150;k++);        

    bita=bitb=bitc=0;bitd=1;        

    P0=dispcode[dispbit[3]];        

    for(k=0;k<150;k++);      

    }  

 

/* 初始化工作状态函数*/  

void initstat ( void )  

{  

   MCA = 0x2f;   /*选时钟32.768KHz,中断周期500ms*/  

   ACC = MCC;  /* 清中断请求标志 */  

   ACC = MCD;  /* VRT = 1,数据有效 */  

   /* 中断允许,时标十进制,24小时制,芯片开始工作*/  

   MCB = 0x72;  

/*  HOURW = 0x17;*/  /*每小时报警中断*/  

   SECONDW=0X3b; /*每秒报警中断  , 可以选用,用于显示秒点的闪动*/    

   EA = 1;  

   EX0 = 1;  /* 开外部中断0*/  

}  

/* 写时标函数 */  

void wMC ( void )  

{  

   MCB = 0x80;   /* 置SET位为1,芯片停止工作 */  

   YEAR=dt[0];  

   MONTH=dt[1];  

   DAY=dt[2];  

   HOUR=dt[3];  

   MU=dt[4];  

   SECOND=dt[5];  

 

}  

 

/* 读时标函数 */  

void rMC ( void )  

{  

   do  { ACC = MCA; }   /* 读取UIP位 */  

   while ( uip_bit );        /* 等待周期更新结束 */  

   dt[0]=YEAR;  

   dt[1]=MONTH;  

   dt[2]=DAY;  

   dt[3]=HOUR;  

   dt[4]=MU;  

   dt[5]=SECOND;  /* 读时标值到缓冲区 */  

}  

void main ( void )  

{  

   SP=0x60;  

   wMC ( ); /* 调用写时标函数 */  

   initstat ( ); /* 调用初始化工作状态函数*/  

   while (1)  

      {  

       rMC();  

       dispbit[0]=dt[3]/16;  

       dispbit[1]=dt[3]%16;  

       dispbit[2]=dt[4]/16;  

       dispbit[3]=dt[4]%16;  

       disp();  

       }  

}  

/* 外部中断0服务函数*/  

void time ( void ) interrupt 0 using 1  

{  

   ACC = MCC;  /* 读取寄存器C*/  

   if ( ACC^4 )   rMC ( );  /* 周期更新结束,读取时标值*/  

   if ( ACC^5 )   rMC( );  /* 秒报警*/  

   SECONDW=0x3b;  

/*  HOURW = 0x17; */ /* 每小时报警中断 */  

}   
关键字:51单片机  DS12C887  时钟芯片 引用地址:51单片机驱动DS12C887的时钟芯片C语言程序

上一篇:51单片机编程让新手最容易出错的几点总结
下一篇:单片机I/O口的红外遥控软件调制技术

推荐阅读最新更新时间:2024-03-16 14:23

51单片机入门 - UART串口
对于单片机来说,通信则与传感器、存储芯片、外围控制芯片等技术紧密结合,成为整个单片机系统的“神经中枢”。 1、初步认识 一位一位的发送出去的,要发送 8 次才能发送完一个字节。 STC89C52有两个引脚是专门用来做 UART串行通信的,一个是 P3.0一个是 P3.1,它们还分别有另外的名字叫做 RXD和TXD,由它们组成的通信接口就叫做串行接口,简称串口。 波特率:发送二进制数据位的速率,习惯上用 baud 表示;即我们发送一位二进制数据的持续时间=1/baud。 通信过程:在UART 通信的时候,一个字节是 8 位,规定当没有通信信号发生时,通信线路保持高电平,当要发送数据之前,先发一位 0
[单片机]
<font color='red'>51单片机</font>入门 - UART串口
51单片机C编程(七、5个IO口扫描10个按键)
程序名称:5个IO口扫描10个按键 作 者:jumpmysoul 日 期:2009年5月22日 程序功能:用P1口的P00~P04实现10个按键的扫描,并将键值用一个数码管显示 proteus仿真电路如下: #include reg51.h #define uchar unsigned char #define uint unsigned int #define SEG P0 uchar code tab ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x08};//共阳数码管段码 void delay1ms(uint); uchar pr
[单片机]
51单片机汇编语言(三)
7.2功能说明 用一位数码管循环显示0~9数字,数字变换间隔的时间为1秒。 程序:SMG2.ASM 01: START: MOV DPTR, #TABLE ; 存表 02: MOV R0, #0 ; 设定初始值 03: LOOP : MOV A, R0 04: MOVC A, @A+DPTR ; 取表代码 05: MOV P0, A ; 送P0输出 06: ACALL DLY1S
[单片机]
以89C51单片机为控制核心的开关电源优化设计
  引言   开关电源是利用现代电力电子技术控制功率开关管(MOSFET,IGBT)开通和关断的时间比率来稳定输出电压的一种新型稳压电源。从上世纪90年代以来开关电源相继进入各种电子、电器设备领域,计算机、程控交换机、通讯、电子检测设备电源、控制设备电源等都已广泛地使用了开关电源。利用单片机控制的开关电源,可使开关电源具备更加完善的功能,智能化进一步提高,便于实时监控。其功能主要包括对运行中的开关电源进行检测、自动显示电源状态;可以通过按键进行编程控制;可以进行故障自诊断,对电源功率部分实现自动监测;可以对电源进行过压、过流保护;可以对电池充放电进行实时控制。   开关电源的系统结构   通信用-48V开关电源结构图如图1所
[单片机]
以89C<font color='red'>51单片机</font>为控制核心的开关电源优化设计
51单片机(二十一)—— 定时器计数功能
在本文,我们对51单片机定时器的计数功能进行测试,采用定时器0通过方式2产生10KHz的方波,并通过单片机的P1.0口输出。定时器1采用方式1的计数功能,即对外部输入的脉冲进行计数。T1与P3.5引脚复用。实验时,需要用杜邦线将单片机的P1.0引脚,与P3.5引脚连接在一起。T0输出的脉冲又通过P3.5引脚输入给定时器1的计数器。定时器1对脉冲进行计数,设置为5000个脉冲溢出一次。脉冲的周期为0.1ms,即定时器1的溢出周期为500ms,所以LED1以1秒一次的频率闪烁。 定时器0和定时器1的初始化代码如下所示 void init_T0_T1(void) { TMOD= 0x52; //定时器0使用方式2,8位自
[单片机]
51单片机外部中断处理源程序
//--------------------------------------------------- #include reg52.h //--------------------------------------------------- //重定义I/0引脚名称 sbit led1=P1^1; sbit led2=P1^2; sbit led3=P1^3; sbit led4=P1^4; sbit P32=P3^2; //--------------------------------------------------- //全局变量及位标志定义 bit FINT0; bit FINT1; bit FT0; bit
[单片机]
基于51单片机和nRF905的无线通信装置的设计
0 引言 随着当前网络通信技术的高速发展,人们对各类场合下的无线通信的需求也随之增高。在短距离低成本的无线通信的应用中,基于51单片机以及Nordic公司的nRF905无线通信芯片的应用方案被广泛采用。比如,文献设计了一种基于51单片机与nRF905收发器的无线智能控制交通灯,文献设计了一种基于AT89S52和nRF905的无线遥控系统。 本文设计了一种基于AT89S52单片机和nRF905的无线通信装置。该装置适用于小范围的室内无线点对点文字信息交换应用。 1 系统总体设计 本文设计的装置是由发送和接收两个完全相同的节点模块构成,图1所示为系统示意图。需发送的信息通过PC机上的客户端软件输入,接收的信息显示在节点模
[单片机]
基于<font color='red'>51单片机</font>和nRF905的无线通信装置的设计
MCS-51单片机最大的时序定时单位是多少
  MCS-51单片机是一种集成的电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统。   这篇文章主要和大家介绍一下关于MCS-51单片机最大的时序定时单位,同时把MCS-51单片机的结构特点和内部包含的功能部件也做了个汇总,跟随小编一起来了解一下吧。   MCS-51单片机结构特点   (1)一个8位微处理器CPU。   (2)数据存储器RAM和特殊功能寄存器SFR。   (3)内部程序存储器ROM
[单片机]
MCS-<font color='red'>51单片机</font>最大的时序定时单位是多少
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved