
实验一:定时器中断实验
实验内容:fosc=11.0592MHz,T0方式2产生定时中断实现秒表功能:数码管后两
位显示10ms;前两位显示秒数;K1/K2/K3键分别启动/停止/清零,按键操作不
分先后
实验程序流程图:
主程序流程图: 中断程序流程图:
实验程序:
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP INTT0
ORG 0100H
MAIN: MOV SP,#70H
CALL INI_ALL
LOOP: CALL DISPLAY
MOV DPTR,#8000H
MOVX A,@DPTR
JB ACC.7,NEXT
SETB TR0
NEXT: JB ACC.6,NEXT1
CLR TR0
NEXT1: JB ACC.5,LOOP
MOV R7,#0H
MOV R6,#0H
MOV R5,#0H
LJMP LOOP
/*INTT0*/
INTT0: PUSH PSW
PUSH ACC
INC R5
CJNE R5,#40,CMP1
CMP1: JC GOON
MOV R5,#0H
INC R6
CJNE R6,#100,CMP2
CMP2: JC GOON
MOV R6,#0H
INC R7
CJNE R7,#100,CMP3
CMP3: JC GOON
MOV R7,#0H
GOON: POP ACC
POP PSW
RETI
/*INIALL*/
INI_ALL:MOV R7,#0H
MOV R6,#0H
MOV R5,#0H
MOV IE,#82H
MOV TMOD,#02H
MOV TH0,#25
MOV TL0,#25
RET
/*DISPLAY*/
DISPLAY:MOV DPTR,#TABLE
MOV A,R7
MOV B,#10
DIV AB
MOVC A,@A+DPTR
MOV 33H,A
MOV A,B
MOVC A,@A+DPTR
MOV 32H,A
/**/
MOV A,R6
MOV B,#10
DIV AB
MOVC A,@A+DPTR
MOV 31H,A
MOV A,B
MOVC A,@A+DPTR
MOV 30H,A
/**/
MOV DPTR,#8000H
MOV A,33H
MOVX @DPTR,A
MOV DPTR,#8100H
MOV A,32H
MOVX @DPTR,A
MOV DPTR,#8200H
MOV A,31H
MOVX @DPTR,A
MOV DPTR,#8300H
MOV A,30H
MOVX @DPTR,A
RET
TABLE: DB 88H,0AFH,0C4H,86H,0A3H,92H,90H,8FH,80H,82H
END
实验结果:数码管后两位显示ms计数,前两位显示s计数,按K1键启动计数,K2键停止计数,K3键清零。可实现秒表功能。
实验二:驱动蜂鸣器实验
实验内容:使P3.5端口输出周期为1S的方波信号。并通过三极管驱动一个直流小喇叭,使其发出断续的鸣响。
实验程序:
ORG 0H
LJMP MAIN
ORG 0100H
MAIN: MOV SP,#70H
START: CPL P3.5
LCALL DELAY
LJMP START
DELAY: MOV R7,#200
Y: MOV R6,#100
X: NOP
DJNZ R6,X
DJNZ R7,Y
RET
END
实验结果:蜂鸣器发出声响。
实验三:显示管增一显示
实验内容:编写程序,使数码管从0000自增一加至9999,然后再自动清零循环。
实验程序:
ORG 0H
LJMP MAIN
ORG 0100H
MAIN: MOV 30H,#0H
MOV 31H,#0H
MOV 32H,#0H
MOV 33H,#0H
MOV R0,#1
START: LCALL DELAY
LCALL CONVERT
LCALL DISPLAY
INC R0
CJNE R0,#255,XX
LJMP START
XX: JC START
JNC MAIN
CONVERT:MOV A,R0
MOV B,#10
DIV AB
MOV 30H,B
MOV B,#10
DIV AB
MOV 31H,B
MOV 32H,A
RET
DISPLAY:MOV A,30H
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV DPTR,#8300H
MOVX @DPTR,A
MOV A,31H
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV DPTR,#8200H
MOVX @DPTR,A
MOV A,32H
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV DPTR,#8100H
MOVX @DPTR,A
MOV A,33H
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV DPTR,#8000H
MOVX @DPTR,A
RET
DELAY: MOV R7,#100
Y: MOV R6,#50
X: NOP
DJNZ R6,X
DJNZ R7,Y
RET
TABLE: DB 88H,0AFH,0C4H,86H,0A3H,92H,90H,8FH,80H,82H
END
实验结果:八段数码显示管如题目要求所示自增一显示。
●软件实验
实验一:数据传送实验
实验内容:编写程序,将内部RAM中的30H-5FH中的数据设置为55H;
(1)将其中内容传送到90H开始的内部RAM中去。
(2)将其中内容传送到200H开始的外部RAM中去。
实验程序流程图:
实验程序:ORG 0000H
LJMP MAIN
ORG 0100H
MAIN: MOV SP,#70H
MOV R0,#30H
MOV R7,#30H
MOV A,#55H
LOOP1: MOV @R0,A
INC R0
DJNZ R7,LOOP1
MOV R0,#30H
MOV R7,#30H
MOV R1,#90H
LOOP2: MOV A,@R0
MOV @R1,A
INC R0
INC R1
DJNZ R7,LOOP2
WAIT: SJMP WAIT /*SJMP $*/
END
实验结果:
内部RAM,30H-5FH单元内都为55H。
内部RAM,90H开始的单元内都为55H。
外部RAM,200H开始的单元内都为55H
实验二:数据分类与校验实验
实验内容:编写程序,将内部RAM中30H-5FH中的数据设置为1-48;并将其中奇数传送到90H开始的内部RAM中;将30H-5FH中的数据设置按照奇校验设置最高位。
实验程序流程图:
实验程序:
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN: MOV SP,#70H
MOV R0,#30H
MOV R7,#30H
MOV A,#1
LOOP1: MOV @R0,A
INC R0
INC A
DJNZ R7,LOOP1
MOV R0,#30H
MOV R7,#30H
MOV R1,#90H
LOOP2: MOV A,@R0
INC R0
JB 0E0H,TRANS
JMP NTRANS
TRANS: MOV @R1,A
INC R1
NTRANS:DJNZ R7,LOOP2
END
实验结果:
内部RAM中30H-5FH中的数据为1-48;其中奇数传送到90H单元。
30H-5FH中的数据设置按照奇校验设置最高位送到90H单元内。
程序段如下:
//奇校验设置最高位
MOV R0,#30H
MOV R7,#30H
MOV R1,#90H
LOOP3: MOV A,@R0
INC R0
JNB P,TRANS2
JMP NTRANS2
TRANS2:SETB 0E7H
MOV @R1,A
INC R1
NTRANS2:DJNZ R7,LOOP3
实验三:简单算术运算
实验内容:编写程序,计算1-100的累加和。结果存放于内部RAM的30H、31H中,低字节在前。
实验程序流程图:
实验程序:
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN: MOV SP,#70H
MOV R0,#30H
MOV R1,#31H
MOV @R0,#0
MOV @R1,#0
MOV B,#1
MOV R7,#100
L1: MOV A,@R1
ADD A,B
MOV @R1,A
MOV A,@R0
ADDC A,#0
MOV @R0,A
INC B
DJNZ R7,L1
END
实验结果:
(30H)=13H,(31H)=0BAH,即结果为13BAH=5050D。
实验四:定点数算术运算实验
实验内容:编写2字节乘2字节子程序。乘数位于R2R3,被乘数位于R4R5。结果存放于R4R5R6R7内。
实验说明:
实验程序:
ORG 0H
LJMP MAIN
ORG 0100H
MAIN: MOV R2,#04H
MOV R3,#03H
MOV R4,#02H
MOV R5,#01H
MOV R6,#0H
MOV R7,#0H
MOV R0,#16D/*JISHU*/
CLR C
LOOP: 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 26H,R6
MOV 27H,R7
MOV A,R2
CJNE A,26H,NEXT1
NEXT1: JNC NEXT2
MOV A,R3
CJNE A,27H,NEXT3
NEXT3: JNC NEXT2
CLR C
MOV A,R7
SUBB A,R3
MOV R7,A
MOV A,R6
SUBB A,R2
MOV R2,A
SETB C
NEXT2: DJNZ R0,LOOP
WAIT: SJMP WAIT
END
实验结果:当(R4R5)=21H,(R2R3)=43H时,运算结果为(R4R5R6R7)=08A3H。
实验五:数制转换实验一
实验内容:编写程序,将内部RAM中30H中的二进制数据转换为十进制数据并存放在31H、32H、33H中。
实验程序流程图:
实验程序:
ORG 0H
LJMP MAIN
ORG 0100H
MAIN: MOV 30H,#0ABH
MOV A,30H
MOV B,#100D
DIV AB
MOV 31H,A
MOV A,B
MOV B,#10D
DIV AB
MOV 32H,A
MOV 33H,B
WAIT: SJMP WAIT
END
实验结果:假设(30H)=0ABH,则(31H、32H、33H)=(01、07、01)。
实验六:数制转换实验二
实验内容:编写程序,将内部RAM中30H-3FH中的16进制数据(0-F)转换为ASCII码并存放在40H-4FH中。
实验程序:
ORG 0H
LJMP MAIN
ORG 0100H
MAIN: MOV R0,#30H
MOV A,#0H
MOV R2,#16D
LOOP1: MOV @R0,A
INC A
INC R0
DJNZ R2,LOOP1
MOV R0,#30H
MOV R1,#40H
MOV R2,#16D
LOOP: MOV A,@R0
INC R0
CLR C
SUBB A,#10D
JC SMALL
ADD A,#7
SMALL: ADD A,#3AH
MOV @R1,A
INC R1
DJNZ R2,LOOP
WAIT: SJMP WAIT
END
实验结果:
实验七:数据统计实验一
实验内容:编写程序,首先将内部RAM中30H-7FH中的数据设置为50H-9FH。然后编写程序统计该区域内大于80H的个数,结果存放在寄存器B内。
实验程序:
ORG 0H
LJMP MAIN
ORG 0100H
MAIN: MOV R0,#30H
MOV A,#50H
MOV R2,#80D
LOOP1: MOV @R0,A
INC A
INC R0
DJNZ R2,LOOP1
MOV R0,#30H
MOV R1,#0H
MOV R2,#80D
LOOP: CJNE @R0,#81H,NEXT
NEXT: JC NEXT1
INC R1
NEXT1: INC R0
DJNZ R2,LOOP
MOV B,R1
WAIT: SJMP WAIT
END
实验结果:首先将30H-7FH中的数据设置为50H-9FH
统计该区域内大于80H的个数,结果存放在寄存器B内,(B)=20H。
实验八:数据统计实验二
实验内容:编写程序,首先将内部RAM中30H-7FH中的数据设置为50H-9FH;然后统计该区域内的奇数个数,存放在R6中,正数个数放在R7。
实验程序:
ORG 0H
LJMP MAIN
ORG 0100H
MAIN: MOV R0,#30H
MOV A,#50H
MOV R2,#80D
LOOP1: MOV @R0,A
INC A
INC R0
DJNZ R2,LOOP1
MOV R0,#30H
MOV R6,#0H/*JI*/
MOV R7,#0H/*ZHENG*/
MOV R2,#80D
LOOP: MOV A,@R0
JNB ACC.0,NEXT1
INC R6
NEXT1: JB ACC.7,NEXT2
INC R7
NEXT2: INC R0
DJNZ R2,LOOP
WAIT: SJMP WAIT
END
实验结果:
首先将30H-7FH中的数据设置为50H-9FH
统计的奇数个数存放在R6中,(R6)=28H
