更多资料下载 www.sfmcu.com www.sf-edu.cn 盛方单片机整理
四、程序设计思想和相关指令介绍
本系统的主程序主要完成时间显示和定时输出判断功能。而年月日显示和各时间单元进
位,时间设定时,调定时间设定时等功能全部在中断服务程序中完成。
1.数据与代码转换。
由前述可知,从P2 口输出位选码,从P0 口输出段选码,LED 就会显示出数字来。但P0
口的输出的数据是要BCD 码,各存储单元存储的是二进制数,也就是和要显示出的字符表
达
的含义是不一致的。可见,将要显示的存储单元的数据直接送到P0 口去驱动LED 数码管
显
示是不能正确表达的,必须在系统内部将要显示的数据经过BCD 码行转换后,将各个单元
数
据的段选代码送入P0 口,给CD4511 译码后去驱动数码管显示。
具体转换过程如下:
我们先将要显示的数据装入累加器A 中,再将A 中的数据转换成高低两位的BCD 码,
再放回A 中,然后将A 中的值输出。如:有一个单元存储了45 这样一位数,则需转换成四
位的BCD 码:(0100)(0101)然后放入A 中。 A 中BCD 码,高位四位代表¡4¡低四位
代
表¡5¡同时送给两个译码器中,译码后¡ 45¡ 字就在两个LED 中显示出来。
2.计时功能的实现与中断服务程序
时间的运行依靠定时中断子程序对时钟单元数值进位调整来实现的。计数器T0 打开后,
进入计时,满100 毫秒后,重装定时。中断一次,满一秒后秒进位,满60 秒后即为1 分钟,
分钟单元进位,60 分到了后,时单元进位,24 小时满后,天单元进位。这样然后根据进
率,
得到年、月、日、时、分、秒存储单元的值,并经译码后,通过扫描程序送LED 中显示出
来,
实现时钟计时功能。累加是用指令INC 来实现的。
进入中断服务程序以后,执行PUSH PSW 和PUSH A 将程序状态寄存器PSW 的内容和累
加器A 中的数据保存起来,这便是所谓的¡ 保护现场¡ . 以保护现场和恢复现场时存取关键
数据的存储区叫做堆栈。在软件的控制之下,堆栈可在片内RAM 中的任一区间设定,而堆
栈
的数据存取与一般的RAM 存取又有区别,对它的操作,要遵循¡ 后进先出¡ 的原则。
3 时间控制功能与比较指令
系统的另一功能就是实现对执行设备的定时开关控制,其主要控制思想是这样的:先
将执行设备开启的时间和关闭时间置入RAM 某一单元,在计时主程序当中执行几条比较指
令,如果当前计时时间与执行设备的设定开启时间相等,就执行一条 CLR 指令,将对应的
那路P3 置为高电位,开启;如果当前计时时间与执行设备设定的关闭时间相等,就执行
SETB
对应的P3 置低电位,二极管截止,。实现此控制功能用到的比较指令为CJNE A,#direct,
rel,其转移条件是累加器A 中的值与立即数不等则转移。
参考文献
1、 谢自美,《电子线路设计、实验、测试 》武汉:华中理工大学出版社,2000
2、 何书森、何华斌《实用数字电路原理与设计速成》福州:福建科学技术出版社,
2000.6
3、 白驹衍, 《单片计算机及应用》北京:电子工业出版社, 1999.2