单片机实验程序..
- 格式:doc
- 大小:47.00 KB
- 文档页数:10
一
1.修改例程一的源程序
(1)将A寄存器的初值改为80H(正逻辑,数据位为1表示发光二极管点亮),再对源程序进行简单修改,使程序运行后发光二极管情况与修改前相同。
(2)将LED向左循环移位点亮改为向右循环移位点亮
(3)加快LED循环移位点亮的速度
$include (C8051F020.inc) ;C8051F02x系列单片机信息头文件包含伪指令
INIT: LCALL Init_Device 调用初始设置子程序
(1)MOV A,#080H ;赋初始值并在发光二极管上显示该数值
CPL A
MOV P3,A
LOOP: CALL DELAY
CALL DELAY
CALL DELAY
CALL DELAY
CALL DELAY
CALL DELAY
CALL DELAY
(2)RL A ;A寄存器内容右移1位并送1发光二极管显示MOV P3,A
AJMP LOOP ;无限循环
DELAY: MOV R5,#0H ;延时子程序
D1: MOV R6,#00H
DJNZ R6,$
DJNZ R5,D1
RET
$include (Init_Device.inc);初始设置子程序文件包含伪指令
END
(3)可删除几个CALL DELAY语句即可加快循环速度
2.将例程二0——F的循环显示改为0——9的循环显示
$include (C8051F020.inc) ;C8051F02x系列单片机信息头文件包含伪指令
ORG 0000H
LJMP INIT
TAB: DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H ;字符段码表0-7 DB 080H,090H ;字符段码表8-F
INIT: lcall Init_Device ;调用初始设置子程序
INIT1: MOV R1,#00H ;操作数据初始值
MOV A,R1
MAIN: MOV DPTR,#TAB ;读取与A中数值对应的显示段码
MOVC A,@A+DPTR
MOV P5,A ;段码送并行口1显示
CALL DELAY
CALL DELAY
CALL DELAY
CALL DELAY
CALL DELAY
CALL DELAY
CALL DELAY
CALL DELAY
CALL DELAY
CALL DELAY
CALL DELAY
CALL DELAY
CALL DELAY
CALL DELAY
INC R1 ;操作数据(R1)增1
MOV A,R1
CJNE A,#0AH,MAIN;检查操作数据是否大于显示范围(F)
SJMP INIT1 ;无限循环
DELAY: MOV R5,#0H ;延时子程序
D1: MOV R6,#0H
DJNZ R6,$
DJNZ R5,D1
RET
$include (Init_Device.inc) ;初始设置子程序文件包含伪指令
END
二
1.例程5程序修改
(1)将KEY2、KEY4的功能对调
(2)每次停下再启动以后,更改发光二极管点亮的循环方向
$include (C8051F020.inc) ;C8051F02x系列单片机信息头文件包含伪指令ORG 0000H
LJMP INITIAL ;主程序入口
ORG 0003H
LJMP STOP ;外中断0服务程序入口,开始键(STAR)
ORG 0013H
LJMP STAR ;外中断1服务程序入口停止键(STOP)
ORG 0100H
INITIAL: L CALL Init_Device ;调用初始设置子程序
MOV P3,#0FFH ;熄灭全部发光二极管
MOV A,#0FFH
MOV DPTR,#7F80H
MOVX @DPTR,A ;清除数码管2(NUM2)显示
MOV A,#0FEH ;点亮发光二极管的初始数据
MOV R1,#1H ;发光二极管点亮位置初值
MOV R4,#0FH
MOV IP,#04H ;设置INT0(开始键STAR)为高优先级
MOV TCON,#05H ;外中断采用边沿触发
SETB EX0 ;INT1(停止键STOP)开中断
SETB EA ;开放中断
LOOP: CLR EA ;关闭中断
CJNE R4, #0FH, LP
RL A
CJNE R4,#0FH,LP
MOV P3,A
CJNE R4,#0FH,LP
INC R1
CJNE R4,#0FH,LP
SETB EA
LCALL DELAY1
LCALL DELAY1
LCALL DELAY1
LCALL DELAY1
CJNE R1,#8H,LOOP
MOV R1,#0H
SJMP LOOP
LP: CLR EA
CJNE R4,#0F0H,LOOP
RR A
CJNE R4,#0F0H,LOOP
MOV P3,A
CJNE R4,#0F0H,LOOP
DEC R1
CJNE R4,#0F0H,LOOP
SETB EA
LCALL DELAY1
LCALL DELAY1
LCALL DELAY1
LCALL DELAY1
CJNE R1,#0H,LP
MOV R1,#8H
SJMP LP
;停止键的中断服务程序
STOP: PUSH ACC ;保护A寄存器内容
MOV A,R1 ;读取发光二极管点亮位置计数值
MOV DPTR,#TAB
MOVC A,@A+DPTR ;获取发光二极管点亮位置计数值的显示段码
MOV DPTR,#7F80H
MOVX @DPTR,A ;发光二极管点亮位置计数值的显示数据送显示
SETB EX1 ;INT0(启动键STAR)开中断
JNZ $ ;等待重新启动条件--A=0
MOV A,#0FFH
MOVX @DPTR,A ;清除数码管2(NUM2)显示
CLR EX1 ;禁止INT0中断(避免程序误动作)
POP ACC ;恢复A寄存器内容
CLR IE1;清除INT1(停止键STOP)中断标志(避免程序误动作)
RETI ;中断返回
;启动键的中断服务程序
STAR: MOV A,#00H ;设置启动条件--A=0