PCF8563驱动程序演示实验 您所在的位置:网站首页 pcf8563引脚图 PCF8563驱动程序演示实验

PCF8563驱动程序演示实验

2024-01-21 12:52| 来源: 网络整理| 查看: 265

PCF8563驱动程序演示实验

一、实验目的PCF8563是一款性价比极高的时钟芯片。它已被广泛用于电表、水表、气表、电话、传真机、便携式仪器以及电池供电的仪器仪表等产品领域。本实验示例展示了如何在SmallRTOS 51 中编写PCF8563 的驱动程序。二、实验设备及器件PC 机 一台DP-51PROC 单片机综合仿真实验仪 一台三、 实验步骤1、 使用导线连接D5 区的SCL、SDA 和A2 区的P16、P17(SCL~P16、SDA~P17),短接D5 区的JP1 跳线;2、 下载PCF8653.hex 文件到DP-51PRO.NET 中并运行;四、实验参考程序主要部分/*************************************************************** Small RTOS(51)** The Real-Time Kernel(For Keil c51)** (c) Copyright 2002-2004, chenmingji** All Rights Reserved** V1.20***************************************************************/#include "CONFIG.h"uint8 code td[9]={0x00,0x12,0x00,0x30,0x12,0x06,0x05,0x02,0x04}; //定义初始化字uint8 disp_buf[8]={0,0,0,0,0,0,0,0}; //显示缓存uint8 rd[7]; //定义接收缓冲区void TaskA(void);void TaskB(void);/**************************************************************函数名称:unsigned char display_time(unsigned char *sd)*功能描述:驱动ZLG7290 进行时间显示。显示格式: 时、分、秒*************************************************************/unsigned char display_time(unsigned char *sd){sd[0]=sd[0]&0x7f;//秒屏蔽保留位sd[1]=sd[1]&0x7f;//分屏蔽保留位sd[2]=sd[2]&0x3f;//时屏蔽保留位

disp_buf[0] =(sd[0]%16);disp_buf[1] =(sd[0]/16);disp_buf[2] = 31;disp_buf[3] =(sd[1]%16);disp_buf[4] =(sd[1]/16);disp_buf[5] = 31;disp_buf[6] =(sd[2]%16);disp_buf[7] =(sd[2]/16);ZLG7290_SendBuf(disp_buf,8);return 0;}/**************************************************************函数名称:void Init_PCF8563(void)*功能描述:初始化PCF8563 芯片*************************************************************/void Init_PCF8563(void){RST=0;_nop_();_nop_();_nop_();RST=1;ISendStr(PCF8563,WRADDR,td,0x5);_nop_();_nop_();_nop_();ISendStr(PCF8563,WRADDR+5,&td[5],0x4);}/*******************************************************时间显示任务******************************************************/void TaskA(void){OSTaskCreate(TaskB,NULL,1);while(1){OS_ENTER_CRITICAL();display_time(rd);OS_EXIT_CRITICAL();OSWait(K_TMO,1);}}

/************************************************************** 取时间任务*************************************************************/void TaskB(void){while(1){OS_ENTER_CRITICAL();IRcvStr(PCF8563,RDADDR,rd,0x7);OS_EXIT_CRITICAL();OSWait(K_TMO,1);}}void main(){OSInit();TMOD = (TMOD & 0XF0) | 0X01;// 每10ms 发生一次T0 中断TL0 = (65536 - (11059200 / 12) / 100) % 256;TH0 = (65536 - (11059200 / 12) / 100) / 256;TR0 = 1;ET0 = 1;TF0 = 0;Init_PCF8563();OSTaskCreate(TaskA,NULL,0);while(1){PCON = PCON | 0x01; /* CPU 进入休眠状态 */}}五、实验示例程序简析有关PCF8563 芯片的应用和ZLG7290 的使用,这里不再详述。用户可以阅读DP-51PROC 的相关的实验例子和文档资料。本实验程序使用动态创建任务的方法创建了两个任务:TaskA 和TaskB 。方法如下:OSTaskCreate (TaskA, NULL, 0);OSTaskCreate (TaskB, NULL, 1);注意,TaskB 任务是在TaskA 任务内部创建的。并且TaskA 的优先级比TaskB 的高。由于对I2C 总线驱动程序的操作不具有可重入性,所以使用了以下宏OS_ENTER_CRITICAL ( );OS_EXIT_CRITICAL ( );

把display_time(rd)和IRcvStr(PCF8563,RDADDR,rd,0x7) 变成临界代码区,从而确保I2C总线驱动程序的互斥操作。使用信号量也可以实现I2C 总线驱动程序的互斥操作。若要使用信号量,则必须在OS_cfg.h 的EN_OS_SEM 置为1,把SmallRTOS 配置为允许使用信号量。示例程序中未对PCF8563 进行校时处理,用户可以自行添加代码以实现此功能。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有