单片机实验程序..

  • 格式:doc
  • 大小:47.00 KB
  • 文档页数:10

下载文档原格式

  / 10
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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