串口通信中日期时间的表示为什么用BCD吗?

qq_33603542 2017-02-28 08:44:44
如题,用16进制不行吗?
自己也想过如果用一个16进制表示最大是255,但是我们一般年表示是00-99,BCD码的99是0X99,16进制的99是0X63,显然BCD码的显示更直接一些,是不是这个道理呢?
还有就是如果我们要表示1999年,显然16进制会很麻烦的,要两个16进制数,而且还要计算,但是用BCD码表示就方便了一个BCD码表示一位,四个BCD码就可以,我现在就可以敲出来,0X19(高位)0x99(低位),是不是这个道理呢?
求解,谢谢了
...全文
631 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzuning 2017-02-28
  • 打赏
  • 举报
回复
那是你们用的通讯协议规定的,没有为什么 在不合理也得执行! 用 BCD 码表示数值有简单直观的优势,单片机中用的很多
Forty2 2017-02-28
  • 打赏
  • 举报
回复
当然可以用BCD编码,只要发送方和接受方统一协议就可以了。 BCD的一个优点就是你说的日期上‘显示更直接一些‘。 不过,16进制一样是很好的编码,很通用,而且所有的程序员都能理解。
by_封爱 版主 2017-02-28
  • 打赏
  • 举报
回复
串口通讯 只是 PC跟串口 之间一根线 用byte[]传输而已. 所以哪来什么的日期? 比如我的设备接收到1跟2 设备返回3. 那么何来你所谓的"BCD"? 所以 这都跟串口通讯开发者设定的"协议"有关系.. 比如你是开发者. 那么你想怎么设计 就怎么设计. 比如 串口输出 4个字节(一个int) 那么完全可以表示20170303这个数字.. 或者人家输出 20 17 03 03 这4个字节 前2个组合成年 然后是月 然后是日 也可以. 或者 把字符串"20170303"当作字符串的方式 转换成年月日 也可以.. 所以最终这种东西 就是看"设计者"如何来设计,并没有硬性的规定说 是什么格式.具体你还得看硬件厂商提供的"协议"
一、实验目的   1、了解实时时钟的硬件控制原理及设计方法。   2、掌握S3C44B0X 处理器的RTC 模块程序设计方法。     二、实验设备   1、硬件: Embest EduKit-III 实验平台, Embest ARM 标准/ 增强型仿真器套件,PC 机。   2、软件: Embest IDE Pro ARM 集成开发环境, Windows 98/2000/NT/XP。   三、实验内容   学习和掌握 Embest EduKit-III 实验平台RTC 模块的使用,进行以下操作:   1、编写应用程序,修改时钟日期时间的设置。   2、使用EMBEST ARM教 学系统的串口,在超级终端显示当前系统时间。     四、实验原理   1. 实时时钟( RTC )   实时时钟( RTC)器件是一种能提供日历/ 时钟、数据存储等功能的专用集成电路,常用作各种计算机系统的时钟信号源和参数设置存储电路。RTC 具有计时准确、耗电低和体积小等特点, 特别是在各种嵌入式系统用于记录事件发生的时间和相关信息, 如通信工程、电力自动化、工业控制等自动化程度高的领域的无人值守环境。随着集成电路技术的不断发展, RTC 器件的新品也不断推出, 这些新品不仅具有准确的RTC,还有大容量的存储器、温度传感器和A/D 数据采集通道等,已成为集RTC、数据采集和存储于一体的综合功能器件,特别适用于以微控制器为核心的嵌入式系统。     RTC 器件与微控制器之间的接口大都采用连线简单的串行接口,诸如I2C、SPI、MICROWIR和ECAN 等串行总线接口。这些串口由 2~3 根线连接,分为同步和异步。     2. S3C44B0X 实时时钟( RTC )单元   S3C44B0X 实时时钟( RTC)单元是处理器集成的片内外设。由开发板上的后备电池供电,可以在系统电源关闭的情况下运行。RTC 发送8 位BCD 码数据到CPU。传送的数据包括秒、分、小时、星期、日期、月份和年份。RTC 单元时钟源由外部32.768KHz 晶振提供,可以实现闹钟(报警)功能。S3C44B0X 实时时钟( RTC)单元特性:BCD 数据:秒、分、小时、星期、日期、月份和年份   1、闹钟(报警)功能:产生定时断或激活系统   2、自动计算闰年   3、无2000 年问题   4、独立的电源输入   5、支持毫秒级时间断,为RTOS 提供时间基准读/ 写寄存器   访问 RTC 模块的寄存器, 首先要设 RTCCON的 bit0 为1。CPU 通过读取 RTC 模块寄存器 BCDSE、CBCDMIN、BCDHOU、RBCDDA、YBCDDAT、EBCDMON和 BCDYEAR的值,得到当前的相应时间值。然而,由于多个寄存器依次读出,所以有可能产生错误。比如:用户依次读取年(1989)、月(12)、日(31)、时(23)、分(59)、秒( 59)。当秒数为1 到59 时,没有任何问题,但是,当秒数为0 时,当前时间日期就变成了1990 年1 月1 日0 时0 分。这种情况下(秒数为0),用户应该重新读取年份到分钟的值。
《单片机应用技术》课程标准 一、课程信息 课程名称:单片机应用技术 课程代码: 学时/学分: 4学分 适用专业:电子、通信类专业 先 修 课:电子应用技术,C语言等 后 续 课:电子产品维修等 开课学院或教研室: 执笔: 审核:(教研室主任签字) 日期: 年 月 审定:(学院院长签字) 日期: 年 月 二、课程性质与作用 《单片机应用技术》是电子通信类专业的专业核心课,也是理工科学生学习、掌握单片 机在控制领域应用开发的入门课程。本课程以51单片机为范例,以应用为出发点,使学 生在熟练掌握单片机的内部结构、工作原理、程序设计等内容的基础上,获得在相应专 业领域内应用单片机的初步能力,为毕业后的就业打下坚实的基础。 本课程计划教学学时为:64学时+2周(专周实训)。 三、本课程与其它课程关系 本课程在第三学期开设,在电子与通信课程体系,本课程是一个培养综合技能和职 业岗位能力的课程,其相关课程如下表所示: "先修课程 "为本课程支撑的主要能力 "后续课程 "本课程提供的主要能力 " "电子技术 "具备使用电路分析思维与方 "电子设计 "提供具备使用单片机技术进 " "基础 "法进行电路分析与应用能力 "与自动化 "行电子应用辅助设计的能力 " "电子产品 "具备正确使用电工工具,仪 "智能产品 "提供运用单片机技术维修相 " "工艺 "表进行焊接、制作与装配能 "维修 "关智能产品的能力。 " " "力 " " " "电子应用 "具备典型电子电路设计、调 "毕业/综合"提供具备使用单片机技术进 " "技术 "试与应用能力 "设计 "行电子系统设计的能力 " "程序设计 "具备程序编写与设计能力 " " " 四、课程教育教学目标 1.知识目标 (1)熟悉80C51的内部结构以及工作原理; (2)掌握80C51单片机存储空间、SFR、工作寄存器的使用; (3)掌握C语言应用以及程序设计; (4)掌握MCS-51单片机定时/记数器、断以及串行口的使用 ; (5)熟悉掌握存储器及其典型接口的扩展及编程技术。 2.能力目标 (1)帮助学生熟悉80C51系列单片机的特征、内部接口电路和工作原理,学习C语言 的应用程序设计; (2)培养学生在自动化、检测技术、信号处理以及电力传动等领域应用单片机的能 力,培养学生设计和开发单片机应用系统的能力。 3.素质目标 (1)具备良好的工作态度、责任心。 (2)具有较强的团队意识和协作能力。 (3)具有较强的学习能力、吃苦耐劳精神。 (4)具有较强的语言表达能力和协调人际关系能力。 (5)具有认识自身发展重要性以及确立自身继续发展目标的能力。 五、课程教学内容和建议学时 第一章 80C51单片机基础 【教学内容】 1.1单片机及其发展应用 单片机的产生及发展 单片机、单片机系统及单片机应用系统 常用单片机简介 单片机的应用 1.2 80C51单片机的内部结构 80C51单片机和80C51系列单片机 80C51单片机的基本组成 80C51典型产品的资源配置 80C51的内部结构 80C51引脚功能 1.3 80C51单片机的存储器结构 程序存储器ROM 数据存储器RAM 特殊功能寄存器 1.4 80C51单片机的并行I/O接口 并行I/O接口的结构特点 并行I/O接口的应用特性 并行I/O接口的负载能力 1.5 时钟与时序 时钟电路 CPU时序 1.6 复位电路 复位方式 复位方法 【目的要求】 理解:微型计算机的工作原理;单片机最小应用系统、单片机编程、烧录和运行的基 本概念,单片机时钟电路与输入输出口以及引脚的使用,注意"地址重叠"的问题和程序 状态字PSW各位的含义。 熟练掌握:二进制数、十进制数、八进制数和十六进制数及其之间的相互转换;计算 机存储容量单位之间的换算关系;微型计算机的基本结构以及各个部分的主要功能;单 片机芯片内部的组成及存储器结构,特别是片内RAM和并行I/O口的使用方法。 在实训方面,主要掌握单片机应用系统的基本结构、设计过程、开发工具和方法;学 会硬件系统和软件系统的设计特点、原则、要点和方法;Keil C51的使用方法,包括项目文件的建立、修改、添加、编译、连接等;Keil C51的调试技巧,包括设置和删除断点、查看和修改寄存器内容、并行口和定时器/计数 器的使用等技巧。 了解:BCD码和ASCII码的编码规则;单片机的发展、特点、基本组成、应用领域、学 习方法以及典型单片机系列的基本情况;单片机的硬件系统,存储器的分类和工作原理 ,SFR的功能介绍及使用方法。 【重点难点】 计算机不同数制之间的转换,微型计算机的基本结构以及各个部分的主要功能,单 片机芯片内部的组成及存储器结构,特别是片内RAM和并行I/O口的使用方法。 【课时分配】6学时 【实训与作业】 单灯点
近日完成了32*8点阵电子钟的部分制作,现在就在我的身边正常的行动着。 在此写一下制作及注意事项,便于大家共同进步。 我的这款32*8LED点阵电子钟是用多层夹板组成的,所以其非常像三明治,我就把它叫三明治电子钟了。这个电子钟的主要元件有4块8*8的单色行列式点阵屏单片机控制器,时钟发生芯片,温度检测芯片和一个BCD转16线的转换芯片。大家也可以根据自己的需要加装蜂鸣器和红外遥控接收头之类的外围接口。这台电子钟最关键的地方是LED的流动显示和对接口芯片数据的读取上。以下就原理方面就不像大家细说了。旨在详细的阐述一下制作与程序的设计。电路的设计:为了有效的利用I/O资源,我们利用外扩的芯片的方法解决。74HC154是4线BCD码转换为16线的译码器,在电路用作列的扫描。而行则是由单片机的P0、P2口直接驱动的,显示方式应该是逐列扫描。为了增加驱动能力,提高LED的显示亮度,我用了三极管8050和8550作显示驱动。 时钟的发生我采用了目前较流行的DS1302实时时钟芯片,而没有用单片机直接产生,因为单片机产生日期星期计算是比较复杂而且不精准的。而DS1302具有涡流电池备电,2100年以前的日期时间计算、SPI总线通信。并在内部集成了31个静态RAM。使用这款芯片可以减小CPU的工作量,使CPU主攻LED的扫描。温度检测我采用了DS18B20温度转感器,它是普通的三极管封装,内部直接将温度变成数字信号,并用先进的单总线输出。抗扰力强,占用资料少。更在内置的EEPROM。没用AD转换,使系统更简单。 在制作时一定请注意P0口和DS18B20的上拉电阻。LED屏的引线应先用万用表测好,行和列标出。我是引用一个16*16屏的电路图的原理,只是将它的拼成一行而已,再在软件上加以修理就行了。所以会作网上流行的16*16的屏再作我的电子钟就简单了许多。电源最好是用9V的稳压电压通过7805稳压得到,这样可以得到大一点的驱动力。 程序的设计:硬件部份对于有一定的电子制作基础的朋友并不是很难,甚至可以说是简单。这个东东的关键是程序的设计,思路、实现方法、技巧是我们要了解的重点之所在。 首先我来解决一下LED屏的显示问题吧!我们的时间显示是可以向左流动的数据显示,了解16*16LED点阵屏的朋友会知道他是用查表的方法来实现的,可是查表的方法只配合不变的或是很少改变的数据,而我们所要显示的时间是随时改动的。对此,我们引用了显示缓冲区的方法,也就是在单片机的RAM开辟一定的显示单元(视显示的字节数而定,本屏开了32个缓冲单元),LED屏的 显示子程序始终从这个缓冲区取显示的数据来显示,而我们的流动程序只要将显示缓冲区的数据左移或右移就可以了。而我们待显示的数据也是每隔一段时间将时钟和温度数据通过转换程序变成显示数据送入显示缓冲区的。 待显示的数据很长,显示缓冲区只有32个字节,怎么显示呢?在此,我们又开了一个RAM备用显示缓冲区,用来存放一个整屏没有显示完全的数据部份,我们用一个移动程序让备用显示缓冲区的数据移入显示缓冲区,当所有要显示的数据完成之后我们再读取新的时间和温度信息并转换成显示数据送入备用显示缓冲区。我们的数据显示问题就解决了。在此顺便说一下,现在有许多的爱好都朋友在学单片机时总是认为RAM没有什么太大的用处,其实正好相反。RAM在越高级的程序和系统的用处就越大,数据的堆栈,缓冲区,信息处理等都对RAM有一定的要求,因为我们平日的程序是小规模的,所以感觉128BIT的RAM已经是太多了。我认为只有当你可以很好的利用单片机的全部资源(如RAM,FALSH,定时/计数器,串口,内置比较器等)才算是真正的入门单片机,我也正和大家一样朝这个方向努力。 显示的问题解决了,下面看看怎么进行数据读取、转换并送入显示缓冲区的吧。我所说的只是一种思路,实际的程序还得大家自己考虑。其实学习最重要的不是学会某一样事物,而从事物学会一种好的学习方法,用这种方法来应对更多新的知识和技术。一个一个的学是跟不上技术的发展速度的。 我们从时钟芯片和温度传感器得到的只是十六进制或BCD码的数据,首先我们就得将其变为显示的数据类型,也就是每一列的字节数据。这是一组数据,用这一组数据字节组成一个要显示的值。这里我们用查表法将事先设定好的每一个数据的值逐一取出送入备用显示缓冲区。这一过程要在上一次循环显示完全结束后才可以进行,不然会显示乱码的。这样我们就得到了一个流程:读取时间、温度数据-----将其转换为一组表值数据-----将全部数据一次性送入备用显示缓冲区------当显示数据完全流出了备用显示缓冲区后---读取时间、温度数据-(循环)。时间显示的流动我们用定时器来完成,这样不会再占用CPU时间让显示流畅且稳定性高。而1~9,“月”,“日”,这样的数据表是分

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧