分立发光二极管LED组件的应用
[实验1] 跑马灯。

※实现的功能
主要实验电子组件LED1(或LED2、LED3)的显示功能和驱动方法。在这个程序中,利用循环方式,将接到 PORT5(或PORT6或PORT7)端口上的8只LED,自右向左轮流点亮,并且周而复始,形成类似跑马灯的视觉效果。其余组件可以关闭(如图1所示)。
※硬件电路规划
电路图请参考本刊上期38页图1。
※程序流程图
主程序和子程序的流程图见图2。

※程序清单
SETCHIP EM78447;向汇编器目标单
片机型号
PORT EQU 5;设置驱动端口
COUNT EQU 20H;定义延时变量
ORG 000H;程序起始存放ROM地址
MAIN MOV A,@0X11;
IOW 0X0E;禁止看门狗活动
MOV A,@00H;端口方向数据送A
IOW PORT;设置驱动端口方向为全出
MOV A,@00000001B;初始点灯数据
MOV PORT,A;点亮LED0一只
BC STATUS,0;清零进位位C
LEFT RLC PORT;亮灯位置左移一步
CALL DELAY;调用延时子程序
JMP LEFT;循环
;***** 延时子程序 *****
DELAY MOV A,@0FH;延时参数送A
MOV COUNT,A;转送延时控制变量
D1 DJZ COUNT;变量递减,为0跳一步
JMP D1;跳回
RET;子程序返回
;****************
ORG 0XFFF;定义复位矢量
JMP MAIN;跳转到主程序
;****************
END;汇编程序结束
※实验操作步骤和程序调试方法
1.利用“文本编辑器”将汇编语言源程序录入计算机,保存为扩展名为“.ASM”或“.DT”的源程序文件(注意:文件名不要超过8个字符),比如LED123.ASM或LED123.DT,并且保存到预先在MASM78和SIM447同在的目录下建立的一个工作子目录中(比如叫WORK)。应该注意:在录入源程序时,注释之前的分号“;”必须是半角符号,即西文符号。
2.利用“汇编器MASM78”对于源程序进行汇编(在Input file-name:-后输入源文件名时应该携带路径信息,即WORK/LED123.ASM),产生用于模拟调试的两个文件LED123 .CDS或LED123.SYM。为了操作上方便和高效,可以给MASM78在Windows环境下建立一个快捷方式,并且剪贴到桌面上或进一步放到“C:/WINDOWS/APPLICA-TION DATA/MICRISOFT/INTERNET EX-PLORER/QUICK LAUNCH”之下。见图3。

3.利用“软硬件模拟器SIM447”对目标文件LED123 .CDS进行模拟仿真:
(1) 启动SIM447,进入模拟器工作窗口。为了操作上方便和高效,可以按与上述相同的方式给SIM447在Windows环境下建立一个快捷方式。见图4。

(2) 对于第一条询问信息直接按一次回车键,即不载入此前可能保留的环境设置。
(3) >L WORK/LED123↓;载入目标程序。
(4) >G↓;连续执行程序,观察LED有何变化,并观察寄存器P5的变化。
(5) >?邀ESC?妖↓;如果想中止程序的执行则运行此步。
(6) 将语句“DELAY MOV A,@0FH”中的延时常数0FH改变为FFH后再观察LED排变化的速度有何不同。
(7) >RESET↓;如果需要复位单片机,则使用此命令。
(8) >CLS↓;如果需要清屏的话,执行此步。
(9) >Q↓;如果调试完毕,退出。
※说明
1.如果把禁止看门狗活动的两条语句“MOV A,@0X11”和“IOW 0X0E”去掉(在它们前面加一个分号“;”,即可临时屏蔽掉这两条语句),则在程序连续运行过程中,每隔一定时间看门狗就溢出一次,单片机也就复位一次。此时屏幕会给出以下提示信息:
Watch Dog Timer Overflow!
Reset EM78-447B Simulator O.K.
2. 将伪指令语句“PORT EQU 5”中的“5”改为“6”或“7”,分别重新进行汇编、装载和调试,就可以分别验证电子组件LED2或LED3。
3. 如果把定义复位矢量和跳转到主程序入口的两条语句“ORG 0xFFF”和“JMP MAIN”省却,程序可以照常执行。这是因为:在每次复位时,12比特宽的程序计数器PC=FFFH,单片机都会自动从ROM的FFFH单元开始执行第一条指令,然后PC加1并且高位溢出使得PC=000H,就自动回绕到000H单元继续执行。如果在该ROM单元不写入任何指令的话,其空白状态值为1FFFH(即保持13位全1,这是由单片机芯片的制造工艺所决定的),经过查对这相当于一条“ADD A,0XFF”指令的机器码。该条指令对从000H开始存放的正式的用户程序不构成任何影响。
拨动开关DIP组件的应用
电子组件DIP1、DIP2和DIP3主要用作程序运行过程中的动态开关量输入,如果通过精心安排也可以用作程序运行之前的初始化设定(就是用于静止状态下的输入开关量设置,类似于拨码开关的用途)。比如,在装载被调试程序之前,就让SIM447进入连续运行状态,此间利用?邀F3?妖功能键再配合0~7数字键,即可改变DIP组件的设定状态,然后再装载用户程序来进行调试。
[实验2]利用拨动开关组DIP输入数字量
※实现的功能
本实验把端口7设置为输入,端口5设置为输出。利用端口7外接组件DIP3为单片机输入数字量,利用端口5上外接的组件LED1显示DIP3组件的状态。
※硬件电路规划
电路图请参考本刊上期38页图2。
※程序流程图
程序流程图见图5。
※程序清单
;****************
SETCHIP EM78447;向汇编器声明目标
单片机型号
DIP==7;定义DIP输入端口的地址为7
P5==5;定义端口5的地址
ORG 000H;声明主程序开始地址
MOV A,@0X11;控制数据送累加器
IOW 0X0E;禁止看门狗活动
LOOP MOV A,@00H;
IOW P5;设定端口5引脚全部输出
MOV A,@0FFH;
IOW DIP;设接有DIP的端口引脚均输
入
MOV A,DIP;读取DIP连接的端口
MOV P5,A;转送到端口5显示
JMP LOOP;循环回去
;****************
END;告知汇编器源程序结束
※程序调试方法
在程序进入连续运行的过程中,按动?邀F3?妖键3次,屏幕信息切换到“Input P7 Dip Switch 3” 之后,再任意按动0~7数字键,观察LED1的变化。
如果把语句“DIP == 7”中的7改为6,即可验证DIP2组件的输入功能。
单只LED数码管组件SEG1的应用
[实验3]十六进制数码显示
※实现的功能
在这个范例中将P6定义为输出口,P7定义为输入口,利用了P6口外接的电子组件SEG1和P7口外接的电子组件DIP3,实现如何以查表方式,把从DIP3低4位读取的4位二进制数,转换为供7段LED数码管驱动显示的笔段码,并且利用单片机控制的七段数码管,把DIP3的低4位状态以十六进制形式显现出来。
※硬件电路规划
电路图请参考上期38页图3。注意,数码管中的每只LED与端口P6的对应连接关系,对应关系不同笔段码也会不同。笔段码与显示字形对应关系如图6所示。
※程序流程图
主程序和查表子程序的流程图如图7所示。
※程序清单
;****************
SETCHIP EM78447;向汇编器声明目标
单片机型号
ORG 000H;声明主程序开始地址
MOV A,@0X11;控制数据送累加器
IOW 0X0E;禁止看门狗活动
MOV A,@0;令A=00H
IOW 6;设置端口6为输出
MOV A,@FFH;令A=FFH
IOW 7;设置端口7为输入
LOOP MOV A,7;从端口7读取DIP3开
关设定数据
AND A,@0FH;只保留低4比特
CALL TABLE;调用查表子程序
MOV 6,A;将查得笔段码送口6显示
JMP LOOP;循环回去
;****************
TABLE;查表子程序入口和名称
TBL;查表指令
RETL 00111111B;0的笔段码
RETL 00000110B;1的笔段码
RETL 01011011B;2的笔段码
RETL 01001111B;3的笔段码
RETL 01100110B;4的笔段码
RETL 01101101B;5的笔段码
RETL 01111101B;6的笔段码
RETL 00000111B;7的笔段码
RETL 01111111B;8的笔段码
RETL 01101111B;9的笔段码
RETL 01110111B;A的笔段码
RETL 01111100B;b的笔段码
RETL 00111001B;C的笔段码
RETL 01011110B;d的笔段码
RETL 01111001B;E的笔段码
RETL 01110001B;F的笔段码
;****************
END;源程序结束
※程序调试方法
在程序进入连续运行的过程中,按动{F3}键3次,屏幕信息切换到“Input P7:Dip Switch 3” 之后,再任意按动0~3数字键,观察SEG1的变化。
如果把语句“AND A,@0FH”中的“0FH”改为“F0H”,即可验证DIP3组件的高4位输入功能。
大海创作室@
本期有奖问答的题目是:
1.通常情况下在编写源程序时,如果把定义复位矢量和跳转到主程序入口的两条语句“ORG 0xFFF”和“JMP MAIN”省却,为何程序能够照常执行?
2. 在录入源程序时,注释之前的分号“;”如果使用的不是半角符号(即西文符号),而是全角符号(即中文符号),会出现什么结果?
答案请来信至编辑部,或E-mail至computer@radio.com.cn。
本刊2003年第1期“义隆单片机课堂”有奖问答获奖名单
廉世军 孙 勇 陈国军 廖昌家 贾福生
魏 杰 彭星来 严明宽 董定忠 郝光辉
以上读者将收到由义隆公司赠送的IC数据资料光盘。