整理实验二P1口控制LED发光二极管Word文档格式.docx
《整理实验二P1口控制LED发光二极管Word文档格式.docx》由会员分享,可在线阅读,更多相关《整理实验二P1口控制LED发光二极管Word文档格式.docx(22页珍藏版)》请在冰豆网上搜索。
2、在KeiluVision中完成程序编辑、调试及编译,生成.HEX文件
3、进行Protues与KeiluVision联动的相关设置:
4、在Proteus中仿真运行。
四、思考
1、将本实验的实验现象改为“不发光二极管循环移位”。
2、将本实验的实验现象改为“每隔0.5秒发光二极管循环移位”。
参考程序:
ORG0
LJMPMAIN
ORG30H
MAIN:
MOVA,#0FEH
LOOP:
MOVP1,A
LCALLDELAY
RLA
SJMPLOOP
DELAY:
MOVR7,#20H
DELAY1:
MOVR6,#200
DELAY2:
MOVR5,#123
DJNZR5,$
DJNZR6,DELAY2
DJNZR7,DELAY1
RET
END
实验三数码管静态显示实验
1、进一步熟悉51系列单片机
2、了解8051单片机P0口的使用方法
3、掌握共阴极数码管的原理及使用方法
4、学习8051的编程、调试、编译、仿真。
图3数码管静态显示电路原理图
注:
数码管要从元件库选择Optoelectronics类中的7SEG-COM-CAT-GRN。
三、要求及步骤:
在七段数码管上以递增方式循环显示数字0—9,间隔时间为一秒。
1、为什么要将P0口各引脚通过电阻R3-R9接到电源?
2、如何在共阴数码管上循环显示十六进制数字0—F(不区分字母的大小写)?
3、怎样修改程序使数字以递减方式循环显示?
4、若用共阳极数码管应如何修改电路和程序,才能完成本实验的功能?
ORG00H
LJMPSTART
START:
MOVDPTR,#TABLE
S1:
MOVR4,#00H
S2:
MOVA,R4
MOVCA,@A+DPTR
MOVP0,A
INCR4
CJNER4,#0AH,S2
SJMPS1
MOVR5,#20;
延时子程序
D2:
MOVR6,#200
D1:
MOVR7,#123
DJNZR7,$
DJNZR6,D1
DJNZR5,D2
RET
TABLE:
DB3FH,06H,5BH,4FH,66H;
段码表
DB6DH,7DH,07H,7FH,6FH
实验四基本输入/输出实验
1、进一步熟悉8051单片机并行I/O口的使用方法
3、掌握并行I/O口输入/输出操作的方法
图4并行I/O口基本输入/输出
按钮要从元件库选择Switches&
Relays类中的BUTTON。
在按钮动作的控制下,将十六进制数字0-F循环显示在数码管上(每按一次按钮,显示的数字加1)。
1、如何检测按钮是否按下?
2、怎样修改程序,可以使数字0-F在按钮控制下,以递减方式循环显示?
3、若在P0口接8个LED,如何实现每按一次按钮,点亮的LED左移一位(8个LED中只有一个点亮)?
ORG00H
LJMPSTART
ORG30H
MOVP1,#01H
MOVDPTR,#TABLE
MOVR4,#00H
CLRA
MOVCA,@A+DPTR
MOVP0,A
MOVA,P1
ANLA,#01H
JZLOOP
LOOP1:
JNZLOOP1
INCR4
MOVA,R4
ANLA,#0FH
SJMPLOOP
DB3FH,06H,5BH,4FH,66H;
DB6DH,7DH,07H,7FH,6FH
DB77H,7CH,39H,5EH,79H,71H,76H
END
实验五数据传送指令练习
1、进一步掌握Keil软件的使用。
2、熟悉数据传送指令功能及使用。
二、实验内容
1、输入数据传送指令并单步执行输入的指令;
2、练习数据传送指令的基本应用。
三、实验步骤
1、数据传送指令的功能
1)输入如下程序:
ORG0030H
MOVA,#0BBH
MOVDPTR,#0070H
MOVX@DPTR,A
MOVR0,#70H
MOV@R0,A
MOVA,#0CCH
XCHDA,@R0
SJMP$
END
2)观察DPTR、A、R0、内部RAM70H和外部RAM70H单元中内容并填入表中第一空行。
3)单步执行完上述程序,重新观察上述寄存器和存储单元中内容并填入表中第二空行。
表1程序执行前后有关寄存器和RAM单元内容对照表
程序执行
DPTR
A
R0
70H
内RAM
外RAM
前
后
4)分析程序运行结果,并把分析结果和运行结果进行比较。
2、PUSH指令对堆栈的影响
ORG0040H
MOVA,#0AAH
MOVPSW,#0CCH
PUSHACC
PUSHPSW
SJMP$
END
2)观察A、PSW、SP、07H、08H和09H单元中内容,并填入表表。
表2PUSH指令对堆栈的影响
PSW
SP
堆栈区
07H08H09H
3)单步执行上述程序,重新观察上述寄存器和堆栈区中内容填入表中。
4)分析程序运行结果,并把分析结果和实验结果进行比较,看两者是否相同。
3、编写把A、PSW、DPTR中内容入栈保护并恢复的程序,并验证。
4、编写将内RAM的30H、40H单元内容相互交换的程序,并验证。
5、编程实现交换外RAM1050H、1060H单元的数据,并运行验证。
四、实验总结:
1、堆栈操作的原则是什么?
在程序设计中需要保护和恢复数据时应注意什么?
2、对内RAM、外RAM及ROM进行数据传送的指令,分别可使用何种寻址方式?
实验六算术及逻辑运算指令练习
1、熟悉算术及逻辑运算类指令的功能。
2、掌握算术及逻辑运算类指令对标志位的影响。
3、掌握算术、逻辑运算指令的编程应用。
1、求两个16位无符号二进制数的和
2、四位十进制数的加法
3、算术、逻辑运算指令的基本应用
1、调试程序:
求两个16位数的和
设内RAM30H和32H开头的两个单元分别存放有两个16位无符号二进制数(低8位在30H或32H单元,高8位在31H或33H单元),将和存放在30H单元开始的存储区。
ORG0000H
LJMPMAIN
MOVA,30H
ADDA,32H
MOV30H,A
MOVA,31H
ADDCA,33H
MOV31H,A
选择几组数据测试该程序,如有错,将其改正。
2、编程:
四位十进制数的加法:
设内RAM中30H和32H开头的两个单元分别存放有两个四位十进制数的压缩BCD码(低8位在30H或32H单元,高8位在31H或33H单元),试编写程序求这两个十进制数的和,并将结果放在从34H单元开始的存储区(低8位在低地址单元)。
第一组
第二组
30H
31H
32H
33H
程序执行前
程序执行后
测试、调试程序,并记录测试数据及正确运行结果
3、分别编写实现如下功能的程序并运行、验证。
(1)外RAM1000H~1020H单元中8位无符号二进制数求和,结果存放在内RAM30H单元开始的存储区。
(2)外RAM的1000H和2000H单元中分别放着一个8位无符号二进制数X和Y,计算3X+4Y,并将结果存入内RAM的30H单元和31H单元。
(低8位在30H单元)。
(3)将两位十进制数的压缩BCD码转换成ASCII码。
(源数据在内RAM20H单元,结果存放在内RAM30H开始的两个单元,低字节在31H单元)
(4)将内RAM从30H开始的20个单元全部清零。
1、算术加、减法指令如何影响PSW中的有关标志位?
2、如何实现两个BCD数的减法?
实验七汇编语言程序设计
一、实验目的:
1、练习常见的简单的分支、循环程序结构的设计方法。
2、练习常见的程序调试方法。
二、实验内容:
1、编写程序,将内RAM的30H~40H单元存放的单字节数据传送到外RAM中以1000H为起始地址的存储区。
在内RAM的30H-40H随意输入数据,调试并运行程序,观察结果。
2、编写程序,查找外部RAM的1020H-1030H单元中是否有0AAH这个数,如果有,将内RAM的30H单元置为01H,否则将30H单元置为00H。
在外RAM中输入数据,运行程序,观察结果。
3、在内部RAM30-5FH单元存放着一组无符号数,编写程序查找出这些无符号数的