单片机实验报告
实验二 并行口输入输出实验——循环彩灯控制
任务一
1.实现的功能:
P1 口接 8 个开关,P0 口接 8 个灯,每个开关对应一个灯,实时读取开关状态,开关闭合时,灯亮。开关断开时,灯灭。
2.硬件原理图:
3.流程图:
4.程序:
ORG 0000H //程序入口
AJMP MAIN //跳转到主程序
ORG 0040H //主程序初始地址
MAIN: MOV P1,#0FFH //将P1口设置成输入状态
MOV P0,P1 //将P1口输入的状态传输给P0口输出
AJMP MAIN //返回主程序,循环执行主程序,保证实时
END //结束
任务二
1.实现的功能:
用 5 个开关 K0-K4,控制 P2 口所接 8 个灯的循环,各开关的功能要求如下:
(1)K1,K2 分别选择灯的四种闪动方式;
(2)K3 用于控制灯的循环方式(顺时针或逆时针);
(3)K4 用于选择灯的两种循环速度
(4)K0 用于引发外部中断,在外部中断子程序中,读取通过 K1-K4 所设定的循环彩灯的工作方式,并按所设定的工作方式控制彩灯运行。
2.硬件原理图:
3.流程图:
4.程序:
ORG 0000H
LJMP MAIN
ORG 0003H //外部中断0入口
LJMP PINT0
ORG 0100H
MAIN: MOV SP,#40H //设置栈底
SETB EA //打开中断允许位
SETB EX0 //打开外部中断0允许位
SETB IT0 //
MOV P1,#0FFH //将P1口设置成输入状态
JB P1.0,M //判断P1.0(K1)和P1.1(K2)状态选择闪动方式
JB P1.1,M2 //
M1: MOV P2,#01H //闪动方式1,1个灯循环移动
AJMP NEXT1 //
M2: MOV P2,#03H //闪动方式2,2个灯循环移动
AJMP NEXT1 //
M: JB P1.1,M4 //
M3: MOV P2,#07H //闪动方式3,3个灯循环移动
AJMP NEXT1 //
M4: MOV P2,#0FH //闪动方式4,4个灯循环移动
NEXT1: MOV C,P1.2 //
MOV PSW.2,C //将P1.2(K3)的状态送给PSW.2
MOV C,P1.3 //
MOV PSW.6,C //将P1.3(K4)的状态送给PSW.6
NEXT2: JB PSW.2,R //判断PSW.2(K3)状态选择循环方向
L: MOV A,P2 //
RL A //
MOV P2,A //
AJMP NEXT3 //
R: MOV A,P2 //
RR A //
MOV P2,A //
NEXT3: JB PSW.6,S2 //判断开关PSW.6(K4)状态选择闪动速度
LCALL DELAY //
S2: LCALL DELAY //
SJMP NEXT2 //循环执行闪动程序
ORG 0200H //中断程序
PINT0: JB P1.0,MO //判断P1.0(K1)和P1.1(K2)状态选择闪动方式
JB P1.1,MO2 //
MO1: MOV P2,#01H //闪动方式1,1个灯循环移动
AJMP NEXT4 //
MO2: MOV P2,#03H //闪动方式2,2个灯循环移动
AJMP NEXT4 //
MO: JB P1.1,MO4 //
MO3: MOV P2,#07H //闪动方式3,3个灯循环移动
AJMP NEXT4 //
MO4: MOV P2,#0FH //闪动方式4,4个灯循环移动
NEXT4: MOV C,P1.2 //
MOV PSW.2,C //将P1.2(K3)的状态送给PSW.2
MOV C,P1.3 //
MOV PSW.6,C //将P1.3(K4)的状态送给PSW.6
RETI //返回主程序
DELAY: MOV R5,#05H //延时程序,延时0.5s
LOOP1: MOV R6,#64H
LOOP2: MOV R7,#0FFH
LOOP3: NOP
NOP
DJNZ R7,LOOP3
DJNZ R6,LOOP2
DJNZ R5,LOOP1
RET //返回
END
实验三 七段LED数码管控制实验
1.实现的功能:
实验采用 4 位一体的数码管,用 P1 口通过驱动芯片控制段码输出信号线,P0 口通过驱动芯片控制位选线,自主选择驱动芯片,设计实现电路,并实现以下功能:
(1)当开关 K0 接低电平时,第一位依次显示 0~F,然后第二位、第三位、第四位,再循环回第一位。
(2)当开关 K0 接高电平时,四位动态显示“HELP”。
2.硬件原理图:
3.流程图:
4.程序:
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN: SETB P2.0
JNB P2.0,M2
M1: MOV P0,#10001000B
MOV P1,11111100B
NEXT1: MOV R0,#4
NEXT2: MOV A,P0
RL A
MOV P0,A
MOV DPTR,#NUM2
MOV A,#1
MOVC A,@A+DPTR
MOV P1,A
DJNZ R0,NEXT2
AJMP NEXT1
NUM1: DB 11111100B,01101110B,10011110B,0001110B,11001110B
M2:
MOV P1,#00000000B
NEXT3: MOV R0,#15
MOV R1,#0
MOV DPTR,#NUM2
CLR P2.1
NEXT4: MOV A,R1
MOVC A,@A+DPTR
MOV P1,A
INC R1
LCALL DELAY
DJNZ R0,NEXT4
SETB P2.1
MOV P1,#00000000B
MOV R0,#15
MOV R1,#0
CLR P2.2
NEXT5: MOV A,R1
MOVC A,@A+DPTR
MOV P1,A
INC R1
LCALL DELAY
DJNZ R0,NEXT5
SETB P2.2
MOV P1,#00000000B
MOV R0,#15
MOV R1,#0
CLR P2.3
NEXT6: MOV A,R1
MOVC A,@A+DPTR
MOV P1,A
INC R1
LCALL DELAY
DJNZ R0,NEXT6
SETB P2.3
MOV P1,#00000000B
MOV R0,#15
MOV R1,#0
CLR P2.4
NEXT7: MOV A,R1
MOVC A,@A+DPTR
MOV P1,A
INC R1
LCALL DELAY
DJNZ R0,NEXT7
SETB P2.4
AJMP M2
NUM2: DB 11111100B,01100000B,11011010B,01100110B,10110110B
DB 10111110B,11100000B,1111110B,11110110B,11101110B
DB 11111110B,10011100B,11111110B,10011110B,10001110B// 0-F
DELAY: MOV R5,#05
LOOP1: MOV R6,#100
LOOP2: MOV R7,#0FFH
LOOP3: NOP
NOP
DJNZ R7,LOOP3
DJNZ R6,LOOP2
DJNZ R5,LOOP1
RET
END
实验四 定时器中断实验
1.实现的功能:
实现一个 4 位秒表:
(1)用开关 K0 模拟秒表的启动、停止、清零功能,按一次启动计时,按一次停止,再按一次清零,在三个状态中循环。
(2)最低位按 1/10 秒计数,依次计数单位为 1/10 秒,1 秒,1 分。
(3) 要求 K0 使用外部中断,优先级高于 T0 的优先级。
2.硬件原理图:
3.流程图:
4.程序:
ORG 0000H
AJMP MAIN
ORG 0003H
AJMP X_0
ORG 000BH
AJMP T_0
ORG 0040H
MAIN: MOV TMOD,#01H
MOV TH0,#0B8H
MOV TL0,#00H
SETB ET0
SETB IT0
SETB PX0
SETB EX0
SETB EA
CLR A
MOV R1, A
MOV R2, A
MOV R3, A
MOV R4, A
MOV R5, A
MOV R6, A
MOV R0, #0
LOOP: CJNE R0,#1,LOOP
LOOP1: MOV DPTR,#NUM
MOV R1,#03H
MOV R7,#11110111B
LOOP2: MOV A,@R1
MOVC A,@A+DPTR
MOV P0,#0FFH
MOV P2,A
MOV P0,R7
ACALL LOOP3
MOV A,R7
RR A
MOV R7,A
INC R1
CJNE R1,#07H,LOOP2
AJMP LOOP1
NUM: DB 11111100B,01100000B,11011010B,11110010B,01100110B
DB 10110110B,10111110B,11100000B,11111110B,11110110B
LOOP3: DJNZ ACC,$
RET
ORG 0100H
X_0: INC R0
CJNE R0,#1,STOP
SETB TR0
RETI
STOP: CJNE R0,#2,CLRE
CLR TR0
RETI
CLRE: CLR A
MOV R0,A
MOV R1,A
MOV R2,A
MOV R3,A
MOV R4,A
MOV R5,A
MOV R6,A
RETI
ORG 0200H
T_0: MOV TL0,#00H
MOV TH0,#0B8H
INC R2
CJNE R2,#10,T0_R
MOV R2,#0
INC R3
CJNE R3,#10,T0_R
MOV R3,#0
INC R4
CJNE R4,#10,T0_R
MOV R4,#0
INC R5
CJNE R5,#6,T0_R
MOV R5,#0
INC R6
CJNE R6,#10,T0_R
MOV R6,#0
T0_R: RETI
END
实验五 脉冲宽度与周期测量实验
1.实现的功能:
P1.0接开关K0,K0断开测量脉冲宽度,K0导通测量脉冲周期,将测试结果显示在4位数码管上,单位为μs。
2.硬件原理图:
3.流程图:
4.程序::
ORG 0000H
AJMP MAIN
ORG 000BH
AJMP INT_T0
ORG 0040H
MAIN: MOV R7,#0
MOV TMOD,#02H
MOV TH0,#47H
MOV TL0,#47H
SETB ET0
SETB EA
LP1: JB P3.2,LP1
LP2: JNB P3.2,LP2
SETB TR0
LP3: JB P3.2,LP3
JNB P1.0,NEXT
LP4: JNB P3.2,LP4
NEXT: CLR TR0
MOV A,R7
MOV B,#10
DIV AB
MOV R0,A
MOV R1,B
MOV A,TL0
CLR C
SUBB A,#47H
MOV B,#2
DIV AB
MOV B,#10
DIV AB
MOV R2,A
MOV R3,B
LOOP1: MOV R4,#05
LOOP2: MOV R5,#100
LOOP3: MOV R6,#0FFH
lOOP4: SETB P0.0
SETB P0.1
SETB P0.2
SETB P0.3
MOV DPTR,#NUM
MOV A,R0
MOVC A,@A+DPTR
MOV P2,A
CLR P0.0
SETB P0.0
MOV A,R1
MOVC A,@A+DPTR
MOV P2,A
CLR P0.1
SETB P0.1
MOV A,R2
MOVC A,@A+DPTR
MOV P2,A
CLR P0.2
SETB P0.2
MOV A,R3
MOVC A,@A+DPTR
MOV P2,A
CLR P0.3
SETB P0.3
DJNZ R6,LOOP4
DJNZ R5,LOOP3
DJNZ R4,LOOP2
NUM: DB 00111111B,00000110B,01011011B,01001111B,01100110B
DB 01101101B,01111101B,00000111B,01111111B,01101111B
AJMP MAIN
ORG 0100H
INT_T0:INC R7
RETI
END
实验六 串行通信实验
1.实现的功能:
利用串行口方式 0 实现一个七段数码管的显示控制,轮流显示 0~9十个数码
2.硬件原理图:
3.流程图:
4.程序:
ORG 0000H
SJMP MAIN
ORG 0040H
MAIN: MOV SCON,#00H
CLR ES
LOOP1: MOV DPTR,#NUM
MOV R0,#10
LOOP2: MOV A,#0
MOVC A,@A+DPTR
INC DPTR
MOV SBUF,A
JNB TI,$
CLR TI
ACALL DELAY
DJNZ R0,LOOP2
AJMP LOOP1
NUM: DB 11111100B,01100000B,11011010B,11110010B,01100110B
DB 10110110B,10111110B,11100000B,11111110B,11110110B
DELAY: MOV R7,#10
LP1: MOV R6,#100
LP2: MOV R5,#0FFH
LP3: NOP
NOP
DJNZ R5,LP3
DJNZ R6,LP2
DJNZ R7,LP1
RET
END
实验七 RAM扩展与读写控制实验
1.实现的功能:
将一片 62256 前 10 个字节的内容加 1 后,存入另一片 62256 中,并读出用 8 个LED 显示。
2.硬件原理图:
3.流程图:
4.程序:
ORG 0000H
AJMP MAIN
ORG 0100H
MAIN: MOV DPTR,#NUM
MOV R0,#0
MOV R1,#70H
LO0P: MOV A,R0
MOVC A,@A+DPTR
MOV @R1,A
INC R0
INC R1
DJNZ R2,LO0P
MOV R2,#10
MOV DPTR,#0000H
MOV R1,#70H
LOOP1: MOV A,@R1
MOVX @DPTR,A
INC DPTR
INC R1
DJNZ R2,LOOP1
MOV R2,#10
MOV DPTR,#0000H
MOV R1,#60H
LOOP2: MOVX A,@DPTR
INC A
MOV @R1,A
INC R1
INC DPTR
DJNZ R2,LOOP2
MOV R2,#10
MOV DPTR,#8000H
MOV R1,#60H
LOOP3: MOV A,@R1
MOVX @DPTR,A
INC R1
INC DPTR
ACALL DELAY1
DJNZ R2,LOOP3
MOV R2,#10
MOV DPTR,#8000H
MOV P1,#00H
ACALL DELAY2
LOOP4: MOVX A,@DPTR
MOV P1,A
INC DPTR
ACALL DELAY2
DJNZ R2,LOOP4
SJMP $
DELAY1: MOV R5,#0FFH
LP: NOP
NOP
DJNZ R5,LP
RET
DELAY2: MOV R3,#10
LP1: MOV R4,#100
LP2: MOV R5,#0FFH
LP3: NOP
NOP
DJNZ R5,LP3
DJNZ R4,LP2
DJNZ R3,LP1
RET
NUM: DB 00000000B,00000001B,00000011B,00000111B,00001111B
DB 00011111B,00111111B,01111111B,01010100B,10101001B