单片机实验报告
目录
软件实验一
软件实验二
软件实验三
软件实验四
软件实验五
硬件实验一
硬件实验二
硬件实验三
硬件实验四
软件实验一 数据传送实验
一、实验内容
1.编写程序,将内部RAM中30H-5FH中的数据设置为55H。
2.编写程序,将内部RAM中30H-5FH中的内容传送到90H开始的内部RAM中去。
3.编写程序,将内部RAM中30H-5FH中的内容传送到200H开始的外部RAM中去(注意实际系统中为扩展的内部RAM)。
二、实验目的与要求
1.学习与掌握针对不同区域RAM的操作方法。
2.学习与掌握指针的使用与循环程序的编写方法。
3.学习与掌握如何查看各个部分存储器的内容。
三、实验说明
对于不同区域的RAM操作需要使用不同的寻址方式与指令。对于内部RAM的低128字节,可以使用直接寻址也可以使用间接寻址;对于内部RAM的高128字节,只能使用间接寻址;对于外部RAM,只能使用指针DPTR进行间接寻址。对于数据块的操作一般使用循环程序完成。
编写程序并编译(build)检查语法错误。编译通过后进入调试环境,单步执行程序检查程序的正确性。最后连续执行程序并检查RAM内容是否正确。
注意主程序的最后应该加一条SJMP $ 指令,以避免由于连续执行时无法停机而造成无法预料的后果。
四、实验程序流程图
N
五、实验程序
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN: MOV SP,#70H
MOV A,#55H
MOV R7,#30H
MOV R0,#30H
LOOP1: MOV @R0,A
INC R0
DJNZ R7,LOOP1
;
MOV R6,#30H
MOV R0,#30H
MOV R1,#90H
LOOP2 : MOV A,@R0
MOV @R1,A
INC R0
INC R1
DJNZ R6,LOOP2
;
MOV R7,#30H
MOV R0,#30H
MOV DPTR,#0200H
LOOP3: MOV A,@R0
MOVX @DPTR,A
INC R0
INC DPTR
DJNZ R7,LOOP3
WAIT: SJMP WAIT
END
实验一第1题结果图:
实验一第2题结果图:
实验一第3题结果图:
软件实验二 数据分类与校验实验
一、实验内容:
1.编写程序,将内部RAM中30H-5FH中的数据设置为1-48。
2.编写程序,将内部RAM中30H-5FH中的奇数传送到90H开始的内部RAM中去。
3.编写程序,将内部RAM中30H-5FH中的数据按照奇校验设置最高位。
二、实验目的与要求:
1.学习与掌握判断数据奇偶性的方法。
2.学习与掌握分支程序的编写方法。
3.学习与掌握如何给存储器中的数据增加校验位。
三、实验说明:
汇编语言中判断数据的奇偶性很简单,数据的最低位为1为奇数,否则为偶数。分支处理是程序设计中的基本技巧,是根据某一条件是否成立执行或不执行规定操作的方法。数据的奇偶校验不是判断数据的奇偶性,而是判断数据中有奇数个1还是偶数个1。如果是奇校验,则增加校验位后的数据应该具有奇数个1。
编写程序并编译(build)检查语法错误。编译通过后进入调试环境,单步执行程序检查程序的正确性。最后连续执行程序并检查RAM内容是否正确。
四、实验程序流程图:
(传送奇数)
Y
N
五、实验程序
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN : MOV SP,#70H
MOV R0,#30H
MOV R1,#30H
LOOP1:MOV A,#31H
SUBB A,R0
MOV @R1,A
INC R1
DJNZ R0,LOOP1
;
MOV R7,#30H
MOV R0,#30H
MOV R1,#90H
LOOP2:MOV A,@R0
ANL A,#01H
JZ L2
JNZ L1
L1: MOV A,@R0
MOV @R1,A
INC R1
SJMP L2
L2: INC R0
DJNZ R7,LOOP2
;
MOV R7,#30H
MOV R0,#30H
LOOP3: MOV A,@R0
JNB P,L3
JB P,L4
L3:SETB 0E7H
MOV @R0,A
L4:INC R0
DJNZ R7,LOOP3
WAIT : SJMP WAIT
END
实验二第1、3题结果图:
实验二第2题结果图:
软件实验三 简单算术运算实验
一、实验内容:
1.编写程序,计算Z=X+Y+30。X、Y为位于内部RAM 30H、31H单元的单字节BCD变量。Z位于32H33H,低位字节在前。
2.编写程序,计算Z=X*10+Y/5-10。X、Y为位于内部RAM 30H、31H单元的单字节变量,Z位于32H33H,低位字节在前。
3.编写程序,计算1-100的累加和。结果存放于内部RAM的30H、31H中。低位字节在前。
二、实验目的与要求:
1.学习与掌握算术运算指令的使用方法。
2.学习与掌握BCD数据运算的处理方法。
3.学习与掌握多字节数据的运算方法。
三、实验说明:
MCS-51单片机的算术运算指令比较简单,因此功能也比较差。所有的算术运算必须使用累加器进行。如果数据和运算结果都是8位,则处理要简单得多。如果数据和结果高于8位,则必须做多字节运算的处理。
应该使用不同的数据对程序进行检验。在第一个程序中,可 分别令X=10、Y=20和X=100、Y=200。在第二个程序中,可分别令X=10、Y=30和X=100、Y=200。
编写程序并编译(build)检查语法错误。编译通过后进入调试环境,单步执行程序检查程序的正确性。最后连续执行程序并检查RAM内容是否正确。
四、实验程序流程图:
(数据累加)
N
五、编程内容
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN:MOV SP,#70H
MOV 30H,#99H
MOV 31H,#99H
MOV A,30H
ADD A,31H
DA A
MOV 32H,A
MOV A,#0
ADDC A,#0
DA A
MOV 33H,A
MOV A,32H
ADD A,#30H
DA A
MOV 32H,A
MOV A,33H
ADDC A,#0
DA A
MOV 33H,A
;
MOV 30H,#100
MOV 31H,#100
MOV A,#10
MOV B,A
MOV A,30H
MUL AB
MOV 32H,A
MOV 33H,B
MOV A,#5
MOV B,A
MOV A,31H
DIV AB
ADD A,32H
SUBB A,#10
MOV 32H,A
MOV A,33H
ADDC A,#0
MOV 33H,A
;
MOV R7,#100
MOV R0,#1
MOV 30H,#0
MOV 31H,#0
MOV A,#0
LOOP1:MOV A,30H
ADD A,R0
MOV 30H,A
MOV A,31H
ADDC A,#0
MOV 31H,A
INC R0
DJNZ R7,LOOP1
;
WAIT:SJMP WAIT
END
实验三第1题结果图:
实验三第2题结果图:
实验三第3题结果图:
软件实验四 定点数算术运算实验
一、实验内容:
1.编写2字节乘2字节子程序。乘数位于R2R3,被乘数位于R4R5。结果存放于R4R5R6R7内。
2.编写2字节除以2字节子程序。除数位于R2R3,被除数位于R4R5。结果存放于R4R5,余数存放于R6R7内。
二、实验目的与要求:
1.学习与掌握常用基本子程序的编写方法。
2.学习与掌握多字节算术运算程序的编写方法。
3.学习与掌握主程序调用子程序的方法。
三、实验说明:
将常用的基本子程序编写出来,以后直接调用,可以提高编程的效率。商业软件中都提供这些基本子程序库,自己编写可以进一步了解其功能与使用方法。
多字节的加减法程序比较容易编写,只是要注意进位问题。多字节乘法可以利用单字节乘法来实现,有关教材中已经有所介绍。多字节除法不能用单字节除法实现,只能用移位相减的方法实现。进行除法前必须进行除0检验。
编译通过后进入调试环境,单步执行程序并检查程序的正确性。最后连续执行程序并检查RAM中运算是否正确。应该多使用几组数据进行检验,以确保程序的正确性。
四、实验程序流程图:
(多字节除法)
Y
N
五、实验程序
1、
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN : MOV SP,#70H
MOV R2,#1
MOV R3,#1
MOV R4,#2
MOV R5,#2
MOV A,R2
MOV B,R4
MUL AB
MOV 30H,A
MOV 31H,B
MOV A,R3
MOV B,R4
MUL AB
ADD A,31H
MOV 31H,A
MOV A,B
ADDC A,#0
MOV 32H,A
MOV A,#0
ADDC A,#0
MOV 33H,A
MOV A,R2
MOV B,R5
MUL AB
MOV 40H,A
MOV 41H,B
MOV A,R3
MOV B,R5
MUL AB
ADD A,41H
MOV 41H,A
MOV A,B
ADDC A,#0
MOV 42H,A
MOV R4,30H
MOV A,31H
ADD A,40H
MOV R5,A
MOV A,32H
ADDC A,41H
MOV R6,A
MOV A,42H
ADDC A,33H
MOV R7,A
WAIT : SJMP WAIT
END
2、
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN : MOV SP,#70H
MOV R2,#12H
MOV R3,#34H
MOV R4,#56H
MOV R5,#78H
MOV A,#0
MOV R6,A
MOV R7,A
MOV 50H,#16
LOOP1:CLR C
MOV A,R5
RLC A
MOV R5,A
MOV A,R4
RLC A
MOV R4,A
MOV A,R7
RLC A
MOV R7,A
MOV A,R6
RLC A
MOV R6,A
MOV A,R7
SUBB A,R3
MOV R0,A
MOV A,R6
SUBB A,R2
MOV R1,A
JNB CY,L1
JB CY,L2
L1:INC R5
MOV A,R0
MOV R7,A
MOV A,R1
MOV R6,
L2:DJNZ 50H,LOOP1
WAIT: SJMP WAIT
END
实验四第1题结果图:
实验四第2题结果图:
软件实验五 数制转换实验
一、实验内容:
1.编写程序,将内部RAM中30H中的二进制数据转换为十进制数据并存放在31H、32H、33H中。
2.编写程序,将内部RAM中30H-3FH中的16进制数据(0-F)转换为ASCII码并存放在40H-4FH中。
3.编写程序,将内部RAM中30H31H中的双字节二进制数据转换为十进制数据的ASCII码并存放在40H开始的单元中。
二、实验目的与要求:
1.学习与掌握基本的数制转换程序的编写方法。
2.学习与掌握ASCII码数据的处理方法。
3.学习与掌握多字节二进制数据的转换方法。
三、实验说明:
数据在各种不同数制与编码之间的转换是经常要使用的处理过程。不同数制之间的转换有多种方法,也有一定的技巧,可以参考教材中的程序例子。应该使用不同的数据对程序进行检验。在第一个程序中,可以令所转换的数据为10,99,250。在第二个程序中,应该令数据为0-15。在第三个程序中,可以令所转换的数据为10,255,2000,65535等。
程序编译通过后进入调试环境,单步执行程序检查程序的正确性。最后连续执行程序并检查RAM中的转换结果是否正确。
四、实验程序流程图:
(二进制到十进制数据转换)
五、实验程序
1、
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN : MOV SP,#70H
MOV 30H,#71H
MOV A,30H
MOV B,#100
DIV AB
MOV 31H,A
MOV A,B
MOV B,#10
DIV AB
MOV 32H,A
MOV 33H,B
WAIT : SJMP WAIT
END
2、
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN : MOV SP,#70H
MOV R7,#16
MOV R0,#30H
CLR A
LOOP1:MOV @R0,A
INC A
INC R0
DJNZ R7,LOOP1
;
MOV R7,#16
MOV R0,#30H
MOV R1,#40H
MOV R2,#9
LOOP2:MOV A,@R0
SUBB A,R2
JB CY,L1
JNB CY,L2
L1:MOV A,#30H
ADD A,@R0
MOV @R1,A
SJMP L3
L2: MOV A,#37H
ADD A,@R0
MOV @R1,A
SJMP L3
L3: INC R0
INC R1
DJNZ R7,LOOP2
WAIT: SJMP WAIT
END
3、
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN : MOV SP,#70H
MOV 30H,#11H
MOV 31H,#22H
MOV 40H,#0
MOV 41H,#0
MOV 42H,#0
CLR C
MOV R7,#16
LOOP1:MOV A,31H
RLC A
MOV 31H,A
MOV A,30H
RLC A
MOV 30H,A
MOV A,42H
ADDC A,42H
DA A
MOV 42H,A
MOV A,41H
ADDC A,41H
DA A
MOV 41H,A
MOV A,40H
ADDC A,40H
DA A
MOV 40H,A
DJNZ R7,LOOP1
WAIT: SJMP WAIT
END
实验五第1题实验结果图:
实验五第2题结果图:
实验五第3题结果图:
硬件实验一 P1口输出控制实验
一、实验内容
1、在数码管上显示出自己的生日。
2、编写程序,使P1各个端口轮流输出低电平。从而驱动连接在该端口上的LED指示灯轮流点亮。
3、改变程序中的延时时间,使LED指示灯不均匀的点亮。
4、改变LED指示灯的点亮组合与次序,使其产生类似彩灯的艺术效果(例如,先由低到高循环点亮,再按照相反的循序点亮;同时由两侧向中间循环点亮,再按照相反的循序由中间向两边循环点亮;间隔循环点亮等)。
二、实验程序
1、
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN:MOV SP,#70H
MOV A,#88H
MOV DPTR,#8000H
MOVX @DPTR,A
MOV A,#86H
MOV DPTR,#8100H
MOVX @DPTR,A
MOV A,#0AFH
MOV DPTR,#8200H
MOVX @DPTR,A
MOV A,#8FH
MOV DPTR,#8300H
MOVX @DPTR,A
CLR P3.5
MOV R7,#1
MOV B,#0
LOOP:CPL P3.5
LCALL DELAY
INC B
SJMP LOOP
DELAY:MOV A,R7
ADD A,B
MOV R7,A
DLY0: MOV R6,#10
DLY1: MOV R5,#10
L1:NOP
DJNZ R5,L1
DJNZ R6,DLY1
DJNZ R7,DLY0
RET
END
2、 ORG 0000H
LJMP MAIN
ORG 0100H
MAIN:MOV SP,#70H
L1:CLR P1.0
LCALL DELAY
CPL P1.0
L2:CLR P1.1
LCALL DELAY
CPL P1.1
L3:CLR P1.2
LCALL DELAY
CPL P1.2
L4:CLR P1.3
LCALL DELAY
CPL P1.3
L5:CLR P1.4
LCALL DELAY
CPL P1.4
L6:CLR P1.5
LCALL DELAY
CPL P1.5
L7:CLR P1.6
LCALL DELAY
CPL P1.6
L8:CLR P1.7
LCALL DELAY
CPL P1.7
SJMP L1
DELAY:MOV R7,#200
DLY0:MOV R6,#200
DLY1:MOV R5,#10
DLY2:NOP
DJNZ R5,DLY2
DJNZ R6,DLY1
DJNZ R7,DLY0
RET
END
3、
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN:MOV SP,#70H
L1:CLR P1.0
LCALL DELAY
CPL P1.0
L2:CLR P1.1
LCALL DELAY
CPL P1.1
L3:CLR P1.2
LCALL DELAY
CPL P1.2
L4:CLR P1.3
LCALL DELAY
CPL P1.3
L5:CLR P1.4
LCALL DELAY
CPL P1.4
L6:CLR P1.5
LCALL DELAY
CPL P1.5
L7:CLR P1.6
LCALL DELAY
CPL P1.6
L8:CLR P1.7
LCALL DELAY
CPL P1.7
SJMP L1
DELAY:MOV R7,#200
DLY0:MOV R6,#200
DLY1:MOV R5,#10
DLY2:NOP
DJNZ R5,DLY2
DJNZ R6,DLY1
DJNZ R7,DLY0
RET
END
4、
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN:MOV SP,#70H
MOV R4,#8
MOV B,#0FFH
CLR CY
L1: MOV A,B
RLC A
MOV B,A
MOV 90H,A
LCALL DELAY
MOV A,#0FFH
MOV 90H,A
DJNZ R4,L1
MOV B,#0FFH
MOV R4,#8
CLR CY
L2:MOV A,B
RRC A
MOV B,A
MOV 90H,A
LCALL DELAY
MOV A,#0FFH
MOV 90H,A
DJNZ R4,L2
L3:CLR P1.0
CLR P1.7
LCALL DELAY
MOV 90H,#0FFH
CLR P1.1
CLR P1.6
LCALL DELAY
MOV 90H,#0FFH
CLR P1.2
CLR P1.5
LCALL DELAY
MOV 90H,#0FFH
CLR P1.3
CLR P1.4
LCALL DELAY
MOV 90H,#0FFH
L4:CLR P1.2
CL P1.5
LCALL DELAY
MOV 90H,#0FFH
CLR P1.1
CLR P1.6
LCALL DELAY
MOV 90H,#0FFH
CLR P1.0
CLR P1.7
LCALL DELAY
MOV 90H,#0FFH
MOV R4,#8
CLR CY
MOV A,0FFH
L5: RLC A
RLC A
MOV 90H,A
LCALL DELAY
MOV 90H,#0FFH
DJNZ R4,L5
MOV R4,#8
CLR CY
MOV A,0FFH
L6: RRC A
RRC A
MOV 90H,A
LCALL DELAY
LCALL DELAY
MOV 90H,#0FFH
DJNZ R4,L6
DELAY:MOV R7,#200
DLY0:MOV R6,#200
DLY1:MOV R5,#10
DLY2:NOP
DJNZ R5,DLY2
DJNZ R6,DLY1
DJNZ R7,DLY0
RET
END
硬件实验二 A/D应用实验
一、实验内容:
1.编写程序,通过实验板上的ADC0809检测一路电压信号并显示结果。
2.编写程序,轮流检测实验板上8个电位器信号并显示相应的结果。
3.编写检测实验板上8个电位器信号的程序,并根据按键显示定标后对应的测量结果(最低电压显示0℃,最高电压显示100℃)。
二、实验目的与要求:
1.学习与掌握对于ADC0809电路的使用与编程方法。
2.进一步掌握ADC应用程序的编写方法。
三、实验说明:
实验板上ADC0809的地址为0800H-0F00H,分别对应8路模拟输入端口。向该地址写入任意数据,就可以选通该路模拟信号并启动A/D转换。经过一定时间后(该时间可以根据时钟频率计算出来),可以从该地址读出转换结果。也可以通过查询接在INT1端口的EOC信号状态判断A/D转换是否结束。
A/D转换的结果不仅与输入电压有关,还与参考电压有关。实验板上的参考电压大约为4.5V,
编写程序并编译通过后进入调试环境,单步执行程序检查程序的正确性。最后连续执行程序并用电压表检查结果是否正确。
四、实验程序流程图:
(单路信号A/D采样)
1、
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN:MOV SP,#70H
MOV A,#1
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV DPTR,#8000H
MOVX @DPTR,A
L1:MOV DPTR,#0900H
MOVX @DPTR,A
JB P3.3,$
MOVX A,@DPTR
MOV B,#100
DIV AB
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV DPTR,#8100H
MOVX @DPTR,A
MOV A,B
MOV B,#10
DIV AB
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV DPTR,#8200H
MOVX @DPTR,A
MOV A,B
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV DPTR,#8300H
MOVX @DPTR,A
JB P3.3,$
SJMP L1
WAIT: SJMP WAIT
TABLE: DB 88H,0AFH,0C4H,86H,0A3H,92H,90H,8FH,80H,83H
END
2、
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN:MOV SP,#70H
LOOP:MOV R4,#8
MOV R3,#0
LOOP1:MOV A,R3
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV DPTR,#8000H
MOVX @DPTR,A
L1:MOV A,#08H
ADD A,R3
MOV DPH,A
MOV DPL,#0
MOVX @DPTR,A
JB P3.3,$
MOVX A,@DPTR
MOV B,#100
DIV AB
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV DPTR,#8100H
MOVX @DPTR,A
MOV A,B
MOV B,#10
DIV AB
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV DPTR,#8200H
MOVX @DPTR,A
MOV A,B
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV DPTR,#8300H
MOVX @DPTR,A
LCALL DELAY
INC R3
DJNZ R4,LOOP1
LJMP LOOP
DELAY:MOV R7,#200
DLY0:MOV R6,#200
DLY1:MOV R5,#10
DLY2:NOP
DJNZ R5,DLY2
DJNZ R6,DLY1
DJNZ R7,DLY0
RET
WAIT:SJMP WAIT
TABLE: DB 88H,0AFH,0C4H,86H,0A3H,92H,90H,8FH,80H,83H
END
3、
PNUM EQU 502
CHANEL EQU 30H
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN:MOV SP,#70H
MOV CHANEL,#0
LOOP:MOV A,CHANEL
ANL A,#07H
MOV CHANEL,A
ORL A,#08H
MOV DPH,A
MOV DPL,#0
MOVX @DPTR,A
JB P3.3,$
MOVX A,@DPTR
;
MOV R4,A
MOV R2,#HIGH(PNUM)
MOV R3,#LOW(PNUM)
LCALL MULPNUM
LCALL CHGBCD
LCALL DISPLAY
LCALL DELAY
INC CHANEL
LJMP LOOP
;
MULPNUM:MOV A,R4
MOV B,R3
MUL AB
MOV R6,A
MOV R5,B
MOV A,R4
MOV B,R2
MUL AB
ADD A,R5
MOV R5,A
MOV A,B
ADDC A,#0
MOV R4,A
RET
;
CHGBCD:MOV R6,#0
MOV R7,#0
MOV R2,#16
L1:MOV A,R5
RLC A
MOV R5,A
MOV A,R4
RLC A
MOV R4,A
MOV A,R7
ADDC A,R7
DA A
MOV R7,A
MOV A,R6
ADDC A,R6
DA A
MOV R6,A
DJNZ R2,L1
RET
;
DISPLAY:MOV A,CHANEL
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV DPTR,#8000H
MOVX @DPTR,A
MOV A,R6
MOV DPTR,#TABLE1
MOVC A,@A+DPTR
MOV DPTR,#8100H
MOVX @DPTR,A
MOV A,R7
ANL A,#0F0H
SWAP A
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV DPTR,#8200H
MOVX @DPTR,A
MOV A,R7
ANL A,#0FH
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV DPTR,#8300H
MOVX @DPTR,A
RET
DELAY:MOV R7,#200
DLY0:MOV R6,#200
DLY1:MOV R5,#10
DLY2:NOP
DJNZ R5,DLY2
DJNZ R6,DLY1
DJNZ R7,DLY0
RET
WAIT:SJMP WAIT
TABLE: DB 88H,0AFH,0C4H,86H,0A3H,92H,90H,8FH,80H,83H
TABLE1:DB 08H,2FH,44H,06H,23H,12H,10H,0FH,00H,13H
END
硬件实验三 综合应用实验(一)
一、实验内容
1.利用按键对检测程序进行控制,每按一次INT0键进行下一个检测项目。
二、实验目的与要求:
1.学习与掌握硬件检测程序的编写方法。
2.进一步掌握综合应用程序的编写方法。
三、试验程序
PNUM EQU 502
CHANEL EQU 30H
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN:MOV SP,#70H
MOV CHANEL,#0
LOOP:MOV A,CHANEL
ANL A,#07H
MOV CHANEL,A
ORL A,#08H
MOV DPH,A
MOV DPL,#0
MOVX @DPTR,A
JB P3.3,$
MOVX A,@DPTR
MOV 31H,A
SJMP L2
LOOP2:MOV DPTR,#8000H
MOVX A,@DPTR
CJNE A,#0FFH,L3
SJMP L2
L3: MOV R2,#8
CLR CY
LOOP1:RLC A
JNB CY,L1
DJNZ R2,LOOP1
SJMP L2
L1:MOV A,#8
SUBB A,R2
MOV CHANEL,A
ORL A,#08H
MOV DPH,A
MOV DPL,#0
MOVX @DPTR,A
JB P3.3,$
MOVX A,@DPTR
MOV 31H,A
;
L2: MOV A,31H
MOV R4,A
MOV R2,#HIGH(PNUM)
MOV R3,#LOW(PNUM)
LCALL MULPNUM
LCALL CHGBCD
LCALL DISPLAY
LJMP LOOP2
;
MULPNUM:MOV A,R4
MOV B,R3
MUL AB
MOV R6,A
MOV R5,B
MOV A,R4
MOV B,R2
MUL AB
ADD A,R5
MOV R5,A
MOV A,B
ADDC A,#0
MOV R4,A
RET
;
CHGBCD:MOV R6,#0
MOV R7,#0
MOV R2,#16
L4:MOV A,R5
RLC A
MOV R5,A
MOV A,R4
RLC A
MOV R4,A
MOV A,R7
ADDC A,R7
DA A
MOV R7,A
MOV A,R6
ADDC A,R6
DA A
MOV R6,A
DJNZ R2,L4
RET
;
DISPLAY: MOV A,CHANEL
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV DPTR,#8000H
MOVX @DPTR,A
MOV A,R6
MOV DPTR,#TABLE1
MOVC A,@A+DPTR
MOV DPTR,#8100H
MOVX @DPTR,A
MOV A,R7
ANL A,#0F0H
SWAP A
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV DPTR,#8200H
MOVX @DPTR,A
MOV A,R7
ANL A,#0FH
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV DPTR,#8300H
MOVX @DPTR,A
RET
DELAY:MOV R7,#200
DLY0:MOV R6,#200
DLY1:MOV R5,#10
DLY2:NOP
DJNZ R5,DLY2
JNZ R6,DLY1
R7,DLY0
RET
WAIT:SJMP WAIT
TABLE: DB 88H,0AFH,0C4H,86H,0A3H,92H,90H,8FH,80H,83H
TABLE1:DB 08H,2FH,44H,06H,23H,12H,10H,0FH,00H,13H
END
硬件实验四
一、实验内容
1.秒表实验
用To的方式2产生时基为250us的定时中断,用软件计数分别在数码管后2位显示0.01秒数,前2位显示秒数。
要求:按K1键开始计数,K2键停止计数,K3键清零计数,按键不分先后。
三、实验程序
SYST EQU 30H
CNT1 EQU 31H
CNT2 EQU 32H
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP INTT0
ORG 0100H
MAIN : MOV SP,#70H
INI_TF0 : MOV A,TMOD
ANL A,#0F0H
ADD A,#00000010B
MOV TMOD,A
MOV TH0,#26
MOV TL0,#26
MOV SYST,#0
MOV CNT1,#0
MOV CNT2,#0
MOV A,#10000010B
MOV IE,A
;
LOOP:LCALL DISPLAY
L0: MOV A,SYST
CJNE A,#40,READ
MOV SYST,#0
MOV A,CNT1
ADD A,#1
DA A
MOV CNT1,A
MOV A,CNT2
ADDC A,#0
DA A
MOV CNT2,A
READ:MOV DPTR,#8000H
MOVX A,@DPTR
CJNE A,#0FFH,LOOP1
SJMP LOOP
LOOP1:MOV R7,#8
L1:RLC A
JNB CY,L2
DJNZ R7,L1
L2:MOV A,#8
SUBB A,R7
CJNE A,#0,L3
SETB TR0
SJMP L5
L3:CJNE A,#1,L4
CLR TR0
SJMP L5
L4:CJNE A,#2,L5
MOV SYST,#0
MOV CNT1,#0
MOV CNT2,#0
L5:LJMP LOOP
INTT0:PUSH ACC
PUSH PSW
INC SYST
POP PSW
POP ACC
RETI
DISPLAY: MOV A,CNT1
ANL A,#0F0H
SWAP A
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV DPTR,#8200H
MOVX @DPTR,A
MOV A,CNT1
ANL A,#0FH
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV DPTR,#8300H
MOVX @DPTR,A
MOV A,CNT2
ANL A,#0F0H
SWAP A
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV DPTR,#8000H
MOVX @DPTR,A
MOV A,CNT2
ANL A,#0FH
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV DPTR,#8100H
MOVX @DPTR,A
RET
TABLE:DB 88H,0AFH,0C4H,86H,0A3H,92H,90H,8FH,80H,83H
END