义隆单片机课堂
EM78P447S单片机入门与实作系列讲座

🏠 首页 《无线电》杂志 2003年 🔗 第3期 🔗 第1065353216页 分类:电脑与单片机 🔗

分立发光二极管LED组件的应用

[实验1] 跑马灯。

图1
图1 🔍原图 (640×480)

※实现的功能

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

※硬件电路规划

电路图请参考本刊上期38页图1。

※程序流程图

主程序和子程序的流程图见图2。

图2
图2 🔍原图 (451×314)

※程序清单

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
图3 🔍原图 (709×76)

3.利用“软硬件模拟器SIM447”对目标文件LED123 .CDS进行模拟仿真:

(1) 启动SIM447,进入模拟器工作窗口。为了操作上方便和高效,可以按与上述相同的方式给SIM447在Windows环境下建立一个快捷方式。见图4。

图4
图4 🔍原图 (709×78)

(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数据资料光盘。