Maxim实时时钟芯片设计指南5413-二进制编码十进制(BCD)格式实时时钟中的状态机逻辑
网上DS12C887的文章涉及到时间的存储格式使用的都是二进制代码,究竟使用BCD码该如何操作?正好美信官网上有一篇文章。美信官网不稳定,先贴到这里,有时间再翻译。
State Machine Logic in Binary-Coded Decimal (BCD)-Formatted Real-Time Clocks
A similar version of this article appears on Electronic Design, July 2012.
Introduction

| Register | Minimum (hex) | Maximum (hex) | Carry to Register |
| Hundredths | 00 | 99 | Seconds |
| Seconds | 00 | 59 | Minutes |
| Minutes | 00 | 59 | Hours |
| Hours (12-hour mode) | 41 | 72 | AM PM, PM AM + Day & Date |
| Hours (24-hour mode) | 00 | 23 | Day & Date |
| Day | 01 | 07 | — |
| Date | 01 | 31* | Month (*Month and Year dependent) |
| Month | 01 | 12 | Year |
| Year | 00 | 99 | Century (register or bit) |
| Century | 00 | 99 | — |
Register Descriptions
7). The Day register only has three functioning bits, so even though it initially seems impossible for the user to load a value greater than 7, any hex value > 7 written would store the bad value logic-ORd with the three functioning bits (07h) (e.g., writing 1Fh would store a 07h, or writing F5h would store a 05h). Normal calendar convention is to define Sunday= 1, but that definition is arbitrary and fully under the user's control.| Table 2. Last Date of Month | ||
| Calendar Month | Numeric Month | End Date |
| January, March, May, July, August, October, December | 1, 3, 5, 7, 8, 10, 12 | 31 |
| April, June, September, November | 4, 6, 9, 11 | 30 |
| February | 2 | 28 (typical year), 29 (leap year) |
Leap_Year = ; default to No
If MODULO (CALENDAR_YEAR/) == ; divisible by ?
If MODULO (CALENDAR_YEAR/) == ; divisible by ?
If MODULO (CALENDAR_YEAR/) == ; divisible by ?
Leap_Year =
end ; if
else
Leap_Year =
end ; if
end ; if
Results When Illegal Data Is Written
| BCD | Binary | |
| 2Ah | 00101010 | Write to Month |
| 9Fh | 10011111 | Enabled bits in Month register (with Century bit) |
| 0Ah | 00001010 | Resulting content of "0Ah" after writing the Month |
| 12h | 00010010 | Logic match for "maximum value" |
| BCD | Binary | |
| FFh | 11111111 | Write to Hours |
| 7Fh | 01111111 | Enabled bits in Hours register |
| 7Fh | 01111111 | Resulting content of "7Fh" when reading the Hours |
| BCD | Binary | |
| 38h | 00111000 | Write to Hours |
| 7Fh | 01111111 | Enabled bits in Hours register |
| 38h | 00111000 | Resulting content of "38h" when reading the Hours |
| BCD | Binary | |
| AAh | 10101010 | Write to Seconds |
| FFh | 11111111 | Enabled bits in Seconds register |
| AAh | 10101010 | Resulting content of "AAh" when reading the Seconds |
| BCD | Binary | |
| 2Dh | 00101101 | Write to Date |
| 3Fh | 00111111 | Enabled bits in Hours register |
| 2Dh | 00101101 | Resulting content of "2Dh" when reading the Hours |
Summary
Maxim实时时钟芯片设计指南5413-二进制编码十进制(BCD)格式实时时钟中的状态机逻辑的更多相关文章
- Maxim实时时钟芯片设计指南5791-关于编写健壮的实时时钟控制代码的提示
用DS12C887设计一个万年历,虽然反复查看说明书,还是出各种的错误. 因此,从美信官网查询资料,翻译的不太通,凑合着对照看. 原文链接 Tips for Writing Bulletproof R ...
- Lsyncd实时同步搭建指南
linux文件实时同步: inotify+rsync.sersync.lsyncd工具比较 一.inotify + rsync 最近一直在寻求生产服务服务器上的同步替代方案,原先使用的是inotify ...
- 【代码】二进制转BCD [转]
BCD:Binary Coded Decimal 即用4位二进制编码表示1位的十进制数. 定义:BCD码这种编码形式利用了四个位元来储存一个十进制的数码,使二进制和十进制之间的转换得以快捷的进行. ...
- 使用Socket通信实现Silverlight客户端实时数据的获取(模拟GPS数据,地图实时位置)
原文:使用Socket通信实现Silverlight客户端实时数据的获取(模拟GPS数据,地图实时位置) 在上一篇中说到了Silverlight下的Socket通信,在最后的时候说到本篇将会结合地图. ...
- .net下二进制序列化的格式分析[转]
.net下二进制序列化的格式分析[转] -- 综合应用 (http://www.Host01.Com/article/Net/00020003/) --- .net下二进制序列化的格式分析 (http ...
- FPGA中将十进制数在数码管中显示(verilog版)--二进制转换为BCD码
这周有朋友问怎样在fpga中用数码管来显示一个十进制数,比如1000.每个数码管上显示一位十进制数.如果用高级语言来分离各位,只需要分别对该数做1000,100,10对应的取商和取余即可分离出千百十个 ...
- FPGA加三移位算法:硬件逻辑实现二进制转BCD码
本文设计方式采用明德扬至简设计法.利用FPGA来完成显示功能不是个很理想的方式,当显示任务比较复杂,要通过各种算法显示波形或者特定图形时,当然要用单片机通过C语言完成这类流程控制复杂,又对时序要求不高 ...
- C语言之linux内核--BCD码转二进制与二进制转BCD码(笔试经典)
在分析代码之前,我们先来了解一下,BCD码和二进制到底区别在哪? 学习过计算机原理的和数字电子技术这两门课的都会知道这两个到底是什么含义,也有的同学学过了,考过了,过了一段时间又忘记了,今天,我们通过 ...
- 基于Verilog HDL的二进制转BCD码实现
在项目设计中,经常需要显示一些数值,比如温湿度,时间等等.在数字电路中数据都是用二进制的形式存储,要想显示就需要进行转换,对于一个两位的数值,对10取除可以得到其十位的数值,对10取余可以得到个位的数 ...
随机推荐
- 选择IT行业的自我心得,希望能帮助到各位!(一)
我记得当时我还在读书的时候,也是卡在高三在后面,纠结我该怎么选择专业,一边顶着高考的压力又担心这担心那的,前怕狼后怕虎,一直犹犹豫豫,知道有一天我就听到谁谁谁的哥哥学IT老牛逼了,一个月多少多少钱,买 ...
- Daily Scrum 1/7/2015
Process: Zhaoyang: Do some code intergration and test the total feature in the IOS APP. Yandong: Cod ...
- 数据类型、运算符、Scanner的使用
一.常见的基本数据类型 数值型 byte(最小,2字节) short(4字节) int (默认 8字节) long(16字节) 浮点型 f ...
- idea ------- 源码调试运行
1.创建一个 想学 的 ,使用单步调试进行一步步学习 调整系统资源 单步调试 (F7) ,进入不了源码,调整idea 让我们可以进入底层学习 想要在源码里面添加注释,要将引用的源文件指向,我们刚才复制 ...
- vue使用trackingjs
前言:因为公司是做人工智能-AI的,所有一个web数据平台为了装X,需要做个人脸登陆.前台需要把人脸的base64发给后台去做人脸校验. 功能很简单,需要注意的是web需要实现“调用摄像头”和“自动拍 ...
- cmd命令行中查看、修改、删除与添加环境变量
注意:只在当前窗口生效!! 1.查看当前所有可用的环境变量:输入 set 即可查看. set 2.查看某个环境变量:输入 “set 变量名”即可 set python 3.修改环境变量 :输入 “se ...
- Laravel - 上手实现 - 文件上传、保存到 public 目录下
1.为了访问方便,将上传的文件保存在 public 目录下,需要进行修改配置. 找到 config/filesystems.php 文件然后修改 root.具体如下: 'local' => [ ...
- SQL Server 之T-SQL基本语句 (3)
继续来用例子总结sql基本语句用法. 在这里在建一个表:课 课程名 上课时间 数学 周一 数学 周二 数学 周三 语文 周一 语文 周二 英语 周一 数据分组:GROUP BY select 课程 ...
- s3cmd s3命令行工具
Amazon S3 Tools: Command Line S3 Client Software and S3 Backup 官方网站
- 痞子衡嵌入式:大话双核i.MXRT1170之Cortex-M7与Cortex-M4互相激活之道
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是恩智浦i.MXRT1170上Cortex-M7与Cortex-M4内核互相激活的方法. 痞子衡最近在深耕i.MXRT1170这颗划时代的 ...