首页 理论教育学习单片机多语言编程方法,实现74HC164显示任意字形

学习单片机多语言编程方法,实现74HC164显示任意字形

【摘要】:本例是为了进一步熟悉PC上的编程方法。在PC左侧指令表中选SUBX n并双击,弹出对话框,输入标号地址X3,然后单击“确定”按钮,在.asm文件窗口显示语句。子程序的结束要用RETX指令结束。在第3个子程序结束后,选用END做整个程序结束。至此,汇编完成。利用0D、0E输出可以控制74HC164显示任意字形,包括文字和数字,例如“P”、“L”、“0”、“8”等。

本例是为了进一步熟悉PC上的编程方法。任何源程序应先在.org文件窗口中编辑好,再在.asm文件窗口中用指令表产生地址和机器代码。而不要直接在.asm文件窗口中输入。

1.【例1-4】 指示灯D0闪烁,间隔为0.5s。

(1)编程

进入“学习平台”,在.org文件窗口中,输入源程序如下:

978-7-111-47138-7-Chapter01-26.jpg

将上述程序输入到.org文件窗口中。

(2)汇编

将助记符指令组成的程序,编辑为机器代码程序。

在窗口左侧的指令表中,逐一选择对应指令,按系统提示操作。在.asm文件窗口中得到汇编结果:

978-7-111-47138-7-Chapter01-27.jpg

在程序末尾,单击指令end,加入伪指令代码“:1d *”。

将标号地址X1改为绝对地址00。

(3)软仿真

在主菜单中单击“调试”按钮将弹出对话框,若已保存源文件,单击“是”,弹出调试窗口。

单击“复位”按钮,显示“-1”,表明仿真开始。

单击“单步”按钮,执行第1条语句,端口00输出到c。由于端口00复位后为1,所以c=1。

单击“单步”按钮,执行第2条语句,c取反,c=0。

单击“单步”按钮,执行第3条语句,端口00输出,端口00=0。端口00变为绿色。

单击“单步”按钮,执行第4条语句,由于是延时,略过。

单击“单步”按钮,执行第5条语句,程序转移到起点,继续循环。

单击“跟踪”按钮,程序连续单步执行,可观察到端口00循环置0再置1再置0……也就是闪烁。因是纯软件执行,对延时不做计算。

通过软仿真,可以确定程序逻辑正确。

(4)下载到实验机执行

按之前介绍的方法将此程序下载到实验机执行,应观察到同样效果。

(5)存储程序

在主菜单中单击“文件→另存为→asm”,在当前文件夹输入demo_2.asm,单击“保存”按钮,将文件保存到PC。

2.【例1-5】 指示灯D0、D1、D2循环闪烁,间隔为0.5s。

(1)编程

进入“学习平台”,在.org文件窗口中,输入源程序如下:

978-7-111-47138-7-Chapter01-28.jpg

978-7-111-47138-7-Chapter01-29.jpg

将上述程序输入到.org文件窗口中。

(2)汇编

在PC左侧指令表中选(14)SUBX n并双击,弹出对话框,输入标号地址X1,然后单击“确定”按钮,在.asm文件窗口显示语句。

在PC左侧指令表中选(14)SUBX n并双击,弹出对话框,输入标号地址X2,然后单击“确定”按钮,在.asm文件窗口显示语句。

在PC左侧指令表中选(14)SUBX n并双击,弹出对话框,输入标号地址X3,然后单击“确定”按钮,在.asm文件窗口显示语句。

在PC左侧指令表中选(17)JMP n并双击,弹出对话框,输入标号地址X4,然后单击“确定”按钮,在.asm文件窗口显示语句。

一般子程序地址距离主程序较远,这里设为20。

在PC左侧指令表中选中(29)ORG n并双击,弹出对话框,输入绝对地址20。

单击“确定”按钮后,在.asm文件窗口显示语句:“20:1C *”,表示新的起始地址是20。同样操作继续选其他4条指令,生成机器码。子程序的结束要用RETX指令结束。

确定第2个子程序的起始地址为30。

在PC左侧指令表中选(29)ORG n并双击,弹出对话框,输入绝对地址30。

单击“确定”按钮,在.asm文件窗口显示语句:“30:1C *”,表示新的起始地址是30。继续选其他4条指令,生成机器码。子程序的结束要用RETX指令结束。

确定第3个子程序的起始地址为40。

单击“确定”按钮,在.asm文件窗口显示语句:“40:1C *”,表示新的起始地址是40。继续选其他4条指令,生成机器码。子程序的结束要用RETX指令做结束。

在第3个子程序结束后,选用END做整个程序结束。

在通过汇编生成机器代码后,还要将标号地址X1、X2、X3、X4改为绝对地址,X1是20、X2是30、X3是40、X4是00。

至此,汇编完成。

(3)软仿真

在主菜单中单击“调试”按钮将弹出对话框,若已保存源文件,单击“是”,弹出调试窗口。

单击“复位”按钮显示-1,仿真开始。

单击“单步”按钮,执行第1个子程序,端口00置0。(www.chuimin.cn)

单击“单步”按钮,执行第2个子程序,端口01置0。

单击“单步”按钮,执行第3个子程序,端口02置0。

单击“单步”按钮,执行跳转指令到地址00,循环进行。

单击“跟踪”按钮,观察到端口00~02循环置0,置1。也就是灯的循环闪烁。

(4)下载到实验机执行

按上节的方法将此程序下载到实验机执行,应观察到同样效果。

(5)存储程序

在主菜单中单击“文件→另存为→asm”,在当前文件夹输入demo_ 3.asm,单击“保存”按钮,将文件保存到PC。

3.【例1-6】 3键抢答器

所谓抢答器,就是判断比赛中谁先按下按键的机器。由于计算机程序运行速度要比人操作按键快得多,所以无论3个人如何抢按键,结果只能有一只键显示按下。3个按键的编号是08(+1键),09(-1键),0a(H键)。

(1)编程

在.org文件窗口内,输入下列程序:

978-7-111-47138-7-Chapter01-30.jpg

978-7-111-47138-7-Chapter01-31.jpg

单击“文件→另存为→.org文件”,保存.org文件为demo_ 2.org。

(2)汇编

在.asm文件窗口内按.org文件选择指令,逐条汇编生成机器码。

978-7-111-47138-7-Chapter01-32.jpg

下面的指令应当转移到一个新地址,这主要是为了使程序更清晰。方法是选中指令ORG n,并双击,在弹出的对话框中输入新实际地址10,单击“确定”按钮,生成新的起始地址。

978-7-111-47138-7-Chapter01-33.jpg

继续按.org文件选择指令,逐条汇编生成机器码。在第2段起始改变起始地址为20。程序结束要加指令END。

978-7-111-47138-7-Chapter01-34.jpg

978-7-111-47138-7-Chapter01-35.jpg

下面还必须将标号地址X1,X2,X3,X4改为绝对地址,即X1=10,X2=20,X3=28,X4=00。

978-7-111-47138-7-Chapter01-36.jpg

至此,源程序汇编结束,保存文件demo_ 4.asm。

(3)下载到目标板,并运行

下载程序机器码检验正确后,进入执行状态,显示-1。当按+1键时,灯D0点亮,同时蜂鸣器响。按-1键,灯D1点亮,同时蜂鸣器响。按H键,灯D2点亮,同时蜂鸣器响。可以3人共同进行抢答验证。

4.【例1-7】 在数码管上显示“LL”

(1)说明

输出口0D就是U3(74HC164)的数据输入口,输出口0E就是U3(74HC164)的移位脉冲输入口。由于电路板的限制,这两个端口只能做输出使用。利用0D、0E输出可以控制74HC164显示任意字形,包括文字和数字,例如“P”、“L”、“0”、“8”等。

(2)74HC164真值表

首先应了解移位寄存器74HC164的真值表,也就是它的动作时序。引脚图和真值表如图1-14所示。

978-7-111-47138-7-Chapter01-37.jpg

图1-14 74HC164引脚图和真值表

当74HC164的1、2引脚输入为1或0状态时,在CLOCK时钟端输入一个上升沿脉冲,输入状态即移位到QA。当下一个上升沿脉冲时,继续移位。按照真值表就可以将任意2个数据字节移位到2个74HC164显示字符

(3)编程

在.org文件窗口内输入下列程序:

978-7-111-47138-7-Chapter01-38.jpg

978-7-111-47138-7-Chapter01-39.jpg

当d-1=03-1不为0时,则转X1执行,移位11100011。第2次执行,移位11100011。对于共阳极数码管,当引脚为1时,对应段灭;当引脚为0时,对应段亮。11100011相应于a、b、c、d、e、f、g、h各段,即字符“LL”。

单击“文件→另存为→org文件”,保存.org文件为demo_ 5.org。

(4)汇编

在.asm文件窗口内按org文件选择指令,逐条汇编生成机器码。

978-7-111-47138-7-Chapter01-40.jpg

将文件中的标号地址改为绝对地址。

978-7-111-47138-7-Chapter01-41.jpg

至此,汇编结束,保存文件demo_ 5.asm。

(5)下载到目标板

执行后,数码管显示器显示“LL”。若在实验机上直接输入机器代码,则应取消所有伪指令。