一、 实验目的
学习汇编語言指令系统的编程与调试方法
二、 实验内容
1、参照教材图A.21完成实验二电路原理图的绘制; 2、根据图A.22的程序流程图编写汇编语言程序;
3、利用ISIS的汇编工具查找并修正程序的语法错误和逻辑错误; 4、观察仿真结果,完成实验报告。
三、 实验要求
提交的实验报告中应包括:1、完成的电路图(含绘图过程简述);2、编写的汇编源程序(含程序简要说明);3、使用的程序调试方法;4、实现的仿真效果(含运行截图与文字说明);5、实验小结(结论与体会)。
提交实验报告主题及存盘文件名格式(学号+姓名+实验**),例如:2011041220张三实验一。
1、电路原理图
图1
如图1所示,从左往右、从上往下看,如图,
这是由晶体振荡器和电容组构成的并联谐振回路,产生单片机的时钟
信号。如图,当单片机出现死机时,可以利用它来复位。这
种叫上电复位,产生复位的条件为:在高电平状态下,时间等于系统时钟振荡周期建立时间和两个机器周期时间(一般小于10ms)。如图
,这是80c51芯片共有40个引脚,4只电源及
晶振引脚—Vcc,Vss,XTAL1,XTAL2。4只控制引脚—(PSEN)[注:用“()”括着的为低电平有效,下同],ALE,(EA),RST 。32只并行I/O引脚—P0.0~P0.7,P1.0~P1.7,P2.0~P2.7,P3.0~P3.7。如图
,这是外部Rom允许访问/编程电源输入,当连接高
电平时,cpu从片内rom读指令。如图和
,连接它们用于在80c51的控制
下,实现相应功能,这里是使led灯闪烁,并使开关能控制。
2、汇编源程序
mov R5,#3
lOOP1:MOV P2,#0
ACALL DELAY MOV P2,#0FFH ACALL DELAY
DJNZ R5,LOOP1
LOOP2:MOV P2,P1
SJMP LOOP2
DELAY:MOV R0,#100
DEL0:MOV R1,#50 DEL1:MOV R2,#25 DEL2:DJNZ R2,DEL2
END
DJNZ R1,DEL1 DJNZ R0,DEL0 RET
说明:首先设置循环变量为3(实现灯闪三次),LOOP1为第一个条件入口。给P2赋值0,然后调用DELAY,给P2赋值#0ffh,再调用DELAY。以此来实现三次循环。LOOP2为第二个条件入口,实现最终开关控制灯。DELAY在这里只是用于耗费时间,共0.1秒/单位。
3、程序调试方法
根据图1及汇编源程序实现8盏led灯先亮三下,然后根据图
控制灯的亮或灭。具体实现如下:
安装proteus软件及keil UV4软件,proteus可用于模拟电路图连接,UV4可用于编译汇编程序。汇编编译成功后,在proteus描绘的的80c51芯片中右击属性,选择汇编源程序生成的.hex文件,加载,确认,运行试试。
4、仿真运行效果
图2
分析:开始会闪烁三下(间隔时间根据自己而定),然后根据开关控制灯的亮灭。如图2,左下的开关1,4,5,7,8闭合,相应地右下角1,4,5,7,8亮。
5、实验小结
本次实验了解自己编写程序及了解汇编语言,话说如果不是四处寻找资料,我还真做不出来。感谢小伙伴和网友的贡献。还有希望老师下次做实验时给我们讲解详细一点或提供什么资料什么的。我觉得
盲目的搜资料只是浪费时间。但有人又会认为,老师给出资料,那同学不是不会自己思考吗?我的答案是否定的,没有人第一次就会的,所以我认为还是有参考资料好。况且如果自己不想思考的话,那些忙于交作业的人只会搜答案,可想而知百度的强大。还不如你好我好大家好,给出参考资料。用心做的始终有收获,不用心的始终还是不会学。
附件:(这是在keil UV下用c语言编的)
#include\"REG51.H\"
void delay(int num) { int i=0,j; for(;i void main() { int i,j; for(i=0;i<3;i++) { my_led1(); } while(1) { P2=P1; } } 附件2(proteus下完整实验图): 因篇幅问题不能全部显示,请点此查看更多更全内容