实验一 数据传送实验
实验内容:
将8031内部RAM 40H—4FH单元置初值A0H—AFH,然后将片内RAM 40H—4FH单元中的数据传送到片内RAM 50H—5FH单元。将程序经模拟调试通过后,运行程序,检查相应的存储单元的内容。
源程序清单:
ORG 0000H
RESET:AJMP MAIN
ORG 003FH
MAIN: MOV R0,#40H
MOV R2,#10H
MOV A,#0A0H
A1: MOV @R0,A
INC R0
INC A
DJNZ R2, A1
MOV R1,#40H
MOV R0, #50H
MOV R2, #10H
A3: MOV A, @R1
MOV @R0, A
INC R0
INC R1
DJNZ R2, A3
LJMP 0000H
思考题:
1. 按照实验内容补全程序。
2. CPU 对8031内部RAM存储器有哪些寻址方式?
直接寻址,立即寻址,寄存器寻址,寄存器间接寻址。
3. 执行程序后下列各单元的内容是什么?
内部RAM 40H~4FH ___0A0H~0AFH______________________
内部RAM 50H~5FH___0A0H~0AFH_______________________
实验二 多字节十进制加法实验
实验内容:
多字节十进制加法。加数首地址由 R0 指出,被加数和结果的存储单元首地址由R1指出,字节数由R2 指出。将程序经模拟调试通过后,运行程序,检查相应的存储单元的内容。
源程序清单: ORG 0000H
RESET: AJMP MAIN
ORG 0100H
MAIN: MOV SP, #60H
MOV R0, #31H
MOV @R0, #22H
DEC R0
MOV @R0, #33H
MOV R1, #21H
MOV @R1, #44H
DEC R1
MOV @R1, #55H
MOV R2, #02H
ACALL DACN
HERE: AJMP HERE
DACN: CLR C
DAL: MOV A, @R0
ADDC A, @R1
DA A
MOV @R1, A
INC R0
INC R1
DJNZ R2,DAL
CLR A
MOV ACC.0 , C
RET
思考题:
1. 按照实验内容补全程序。
2. 加数单元、被加数单元和结果单元的地址和内容为?
3130H,2120H,6688H
3. 如何检查双字节相加的最高位溢出?
看psw.3 的溢出标志位 ov=1 则溢出
4. 改变加数和被加数,测试程序的执行结果。
实验三 数据排序实验
实验内容:
将内部RAM 50H—59H中的数据按从小到大的次序排列。
将程序经模拟调试通过后,运行程序,检查相应的存储单元的数据是否为排序状态。
源程序清单:
ORG 0000H
RESET: AJMP MAIN
ORG 0100H
MAIN: MOV SP, #60H
MOV R0, #50H
MOV @R0, #6FH
INC R0
MOV @R0, #6EH
INC R0
MOV @R0, #6AH
INC R0
MOV @R0, #6CH
INC R0
MOV @R0, #6DH
INC R0
MOV @R0, #5BH
INC R0
MOV @R0, #67H
INC R0
MOV @R0, #69H
INC R0
MOV @R0, #68H
INC R0
MOV @R0, #64H
ACALL QUE
HERE: AJMP HERE
QUE: CLR 00H
MOV R7, #09H
MOV R0, #50H
MOV A , @R0
L2: INC R0
MOV R2, A
SUBB A, @R0
MOV A, R2
JC L1
SETB 00H
XCH A, @R0
DEC R0
XCH A, @R0
INC R0
L1: MOV A, @R0
DJNZ R7, L2
JB 00H, QUE
RET
思考题:
1. 按照实验内容补全程序。
2. 检查程序执行结果。
5BH,64H,67H,68H,69H,6AH,6CH,6DH,6EH,6FH
3. 修改程序,按从大到小次序排序。
ORG 0000H
RESET: AJMP MAIN
ORG 0100H
MAIN: MOV SP, #60H
MOV R0, #50H
MOV @R0, #6FH
INC R0
MOV @R0, #6EH
INC R0
MOV @R0, #6AH
INC R0
MOV @R0, #6CH
INC R0
MOV @R0, #6DH
INC R0
MOV @R0, #5BH
INC R0
MOV @R0, #67H
INC R0
MOV @R0, #69H
INC R0
MOV @R0, #68H
INC R0
MOV @R0, #64H
ACALL QUE
HERE: AJMP HERE
QUE: CLR 00H
MOV R7, #09H
MOV R0, #50H
MOV A , @R0
L2: INC R0
MOV R2, A
SUBB A, @R0
MOV A, R2
JNC L1
SETB 00H
XCH A, @R0
DEC R0
XCH A, @R0
INC R0
L1: MOV A, @R0
DJNZ R7, L2
JB 00H, QUE
RET
实验四 双字节乘法实验
实验内容:
[(R3)(R2)*(R5)(R4)]→R0指出的四个单元。将程序经模拟调试通过后,运行程序,检查相应的存储单元的内容。
源程序清单:
ORG 0000H
RESET: AJMP MAIN
ORG 0100H
MAIN; MOV SP, #60H
MOV R2, #0FFH
MOV R3, #0FH
MOV R4, #0FFH
MOV R5, #0FH
MOV R0, #33H
MOV R7, #04H
ML0: MOV @R0, #00H
DJNZ R7, ML1
ACALL M2
HERE: AJMP HERE
ML1: DEC R0
AJMP ML0
M2: MOV A, R2
MOV B, R4
MUL AB
ACALL ADDM
MOV A, R2
MOV B, R5
MUL AB
DEC R0
ACALL ADDM
MOV A, R4
MOV B, R3
MUL AB
DEC R0
DEC R0
ACALL ADDM
MOV A, R5
MOV B, R3
MUL AB
DEC R0
ACALL ADDM
RET
ADDM: ADD A, @R0
MOV @R0, A
MOV A, B
INC R0
ADDC A, @R0
MOV @R0, A
INC R0
MOV A, @R0
ADDC A, #00H
MOV @R0, A
RET
思考题:
1. 程序结果存放在哪几个单元中?
33H~30H
2. 乘积为多少?
0FFE001H
实验五 电子钟实验
实验内容:
熟悉单片机在线仿真调试方法。将仿真头插入实验板的CPU插座中,再打开电源,输入程序进行调试。程序运行时,按下S0键,蜂鸣器发出响声,两个数码管开始从零显示时间,定时器定时时间为一分钟,定时时间到,蜂鸣器再次发出响声,重新按下S0键,重复上述过程。
源程序清单:
ORG 0000H
START:
AJMP MAIN
ORG 000BH
AJMP PIT0
ORG 0100H
MAIN:
MOV SP,#60H
MOV 50H,#00H
MOV 51H,#00H
ACALL DISPLAY
MOV TMOD,#01H
MOV TL0,#0B0H
MOV TL1,#3CH
ACALL KEY
CLR P2.7
ACALL LONGDELAY
SETB P2.7
SETB 00H
SETB TR0
SETB EA
SETB ET0
MOV 30H,#20
ML0:
ACALL DISPLAY
MOV C,00H
JC ML0
CLR P2.7
ACALL LONGDELAY
SETB P2.7
AJMP MAIN
PIT0:
PUSH PSW
PUSH ACC
SETB PSW.3
MOV TL0,#0B0H
MOV TH0,#3CH
MOV A,30H
DEC A
MOV 30H,A
JNZ RET0
MOV 30H,#20
MOV R0,#51H
ACALL DAAD1
MOV A,R2
XRL A,#60H
JNZ RET0
ACALL CLR0
CLR 00H
RET0:
POP ACC
POP PSW
RETI
DAAD1:
MOV A,@R0
DEC R0
SWAP A
ORL A,@R0
ADD A,#01H
DA A
MOV R2,A
ANL A,#0FH
MOV @R0,A
MOV A,R2
INC R0
ANL A,#0F0H
SWAP A
MOV @R0,A
RET
CLR0:
CLR A
MOV @R0,A
DEC R0
MOV @R0,A
RET
DISPLAY:
MOV A,50H
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P2,A
MOV A,51H
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A
CLR P0.7
LCALL DELAY
RET
KEY:
MOV C,P3.0
JC KEY
ACALL DELAY
KEY1:
MOV C,P3.0
JNC KEY1
ACALL DELAY
RET
DELAY:
MOV R1,#250
LOOP:
DJNZ R1,LOOP
RET
LONGDELAY:
MOV A,R0
PUSH ACC
MOV A,R1
PUSH ACC
MOV R1,#250
LOOP1:
MOV R0,#250
LOOP2:
NOP
NOP
NOP
NOP
NOP
DJNZ R0,LOOP2
DJNZ R1,LOOP1
POP ACC
MOV R1,A
POP ACC
MOV R0,A
RET
TABLE:
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
END
思考题:
1程序中哪部分为显示程序?
DISPLAY:
MOV A,50H
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P2,A
MOV A,51H
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A
CLR P0.7
LCALL DELAY
RET
2程序中如何实现一秒钟的定时?
用T/C0定时50ms。共20次。
3写出各段子程序的作用。
MAIN:主程序,
PIT0:中断服务子程序
LONGDELAY和DELAY:延时的子程序
ADDA1是非压缩的BCD码和压缩的BCD码的转化程序
4根据实验要求画出电路图。
51单片机外部中断实验
实验报告要求:
1)整理本实验涉及的程序,将它们按正确的格式详细书写在实验报告纸上。
1.无中断时发光让发光二极管从左到右依次点亮,有外部中断请求时,4位数码管从0000开始加1显示(加到9999后复位为0000),同时蜂鸣器报警。
#include<reg51.h>
#include<intrins.h>
int n1,n2;
sbit beep=P3^5;
char
table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
void delay(int x)
{
int i,j;
for(i=0;i<x;i++)
for(j=0;j<200;j++);
}
void main()
{
EA=1;
EX0=1;
IT0=0;
EX1=1;
IT1=1;
PX1=1;
while(1);
}
void int0() interrupt 0 {
beep=0;
P2=0xfe;
delay(200);
for(n1=8;n1>0;n1--) {
P2=_crol_(P2,1); delay(200); }
}
void int1() interrupt 2 {
P0=0x00;
for(n2=0;n2<16;n2++) {
P1=table[n2];
delay(200);
}
}
2.设置中断优先级寄存器,当有外部中断0请求中断时,中断程序执行发光二极管程序,在此过程中,外部中断1也有中断请求,外部中断0的中断程序将被中断去执行外部中断1的中断程序(数码管加1显示程序)。
C语言程序
#include<reg51.h>
#include<intrins.h>
int n1,n2;
chartable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90, 0x88,0x83,0xc6,0xa1,0x86,0x8e};
void delay(int x)
{
int i,j;
for(i=0;i<x;i++)
for(j=0;j<200;j++);
}
void main()
{
EA=1;
EX0=1;
IT0=1;
P2=0xfe;
delay(200);
for(n1=8;n1>0;n1--) {
P2=_crol_(P2,1); delay(200); }
}
void int0() interrupt 0 {
EX0=1;
P0=0x00;
for(n2=0;n2<16;n2++) {
P1=table[n2]; delay(200); }
EX0=0;
}
汇编程序:
ORG 0000H AJMP MAIN
ORG 0003H LJMP EXT0_INT ORG 0013H LJMP EXT1_INT ORG 0100H
SETB EA
SETB EX0
SETB EX1
SETB PX1
CLR IT0
CLR IT1
AJMP $ MAIN:
EXT0_INT: MOV P2,#0FEH
MOV R4,#08H ACALL DELAY MOV A,P2 RL A MOV P2,A DJNZ R4,L1 RETI L1:
EXT1_INT: MOV P1,#0F0H MOV R5,#00H
MOV DPTR ,#TAB MOV A,R5 MOVC A,@A+DPTR MOV P0,A ACALL DELAY INC R5 CJNE R5,#0AH,L4 RETI L4:
TAB: DB 0C0H ,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H DELAY: MOV R6,#0FFH
L5:
L6:
(2)写出实验结果、实验收获与对本实验改进的意见。
1)无中断时发光二极管从左到右依次点亮,有外部中断请求时,4位数码管从0000开始加1显示(加到9999后复位为0000),同时蜂鸣器报警。
2)当有外部中断0请求中断时,中断程序执行发光二极管程序,在此过程中,外部中断1也有中断请求,外部中断0的中断程序被中断去执行外部中断1的中断程序(数码管加1显示程序)。 MOV R7,#0FFH NOP NOP DJNZ R7,L6 DJNZ R6,L5 RET END
(3)写出思考题的答案。
1)外部中断的边沿触发方式与电平触发方式有何不同之处?
设定方法:通过外部中断中的IT0可以设置触发方式。
IT0 = 1,边沿触发,IT0 = 0,电平触发。
电平触发,就是只有高电平的时候才做指定的事
边沿触发,就是有高电平向低电平转换,或者翻过来转换,这个转换过程触发一个动作。
2)什么是中断嵌套?实现中断嵌套需要设置什么寄存器? 当一个中断(暂且称它为中断A)发生后,处理器正在执行中断A服务程序时,又有一个中断B申请中断(前提是 中断B的优先级比中断A的优先级高),此时处理器不得不停止执行中断A服务程序,转而去执行中断B服务程序,执行完B后,返回到中断A继续执行,执行完A后,返回主程序。
以上中断A里面嵌套了中断B,这就叫做中断嵌套。
略
滨江学院微机原理与接口技术综合实验报告题目:简易电子琴设计学号:学生姓名:XXX院系:滨江学院专业:指导教师:二OXX年月日【摘要…
51单片机课程设计报告学院:专业班级:姓名:指导教师:设计时间:51单片机课程设计一、设计任务与要求1.任务:制作并调试51单片机…
08424020xx单片微型计算机原理学院班级学号姓名指导教师成绩120xx年6月08424020xx硬件实验实验一定时器中断实验…
08424020xx硬件实验实验一定时器中断实验实验内容fosc110592MHzT0方式2产生定时中断实现秒表功能数码管后两位显…
班级姓名学号单片机实验报告实验一CPU片内外清零1CPU片内RAM清零一实验目的掌握MCS51汇编语言的设计了解单片机的寻址方式以…
51单片机课程设计报告学院:专业班级:姓名:指导教师:设计时间:51单片机课程设计一、设计任务与要求1.任务:制作并调试51单片机…
绪论单片机应用简述电子时钟简介电子时钟的基本特点任务要求设计方案控制系统的硬件设计芯片的选择AT89S51的功能概述AT89S51…
51单片机精简开发板的组装及调试实训报告为期一周的单片机实习已经结束了通过此次实训让我们掌握了单片机基本原理的基础单片机的编程知识…
重庆科技学院学生实习实训总结报告学院电气与信息工程学院专业班级XXXXXX学生姓名XXX学号20xxXXXXXX实习实训地点逸夫科…
JINGCHUUNIVERSITYOFTECHNOLOGY单片机原理及应用课程设计报告题目电子时钟专业电气工程及其自动化班级20x…