山东大学单片机实验:3.1 基本并行I/O口实验

实验题目】  

当按键SW1被按下后,D1~D8轮流点亮,点亮时间为100ms;当按键停下后,停止轮换;再次按下后继续轮换

实验要求】 

  • 编写源程序并进行注释。
  • 记录实验过程。
  • 记录程序运行结果。

实验过程及结果记录(截图)

按钮未按下:

按钮按下后:

【实验源程序】

以下程序有错误

ORG 0000H
AJMP MAIN
ORG 0030H
MAIN:
MOV SP,#60H;设置指针
CLR A;清空A中变量
CPL A;反转A中变量(置A中变量全为1)
MOV P2,A;设置初值
MOV A,#00FEH;设置偏移量
MOV 20H,A
LOOP:
JNB P1.0,LOOP;等待P1.0按下
MOV R2,8
L1:
MOV A,20H
MOV P2,A
LCALL DELAY10ms
MOV A,20H
RL A
MOV 20H,A
DJNZ R2,L1
JNB P1.0,LOOP;利用偏移控制亮灭
DELAY10ms:;延时程序
MOV R0,#100
LOOP1:MOV R1,#200
LOOP2:DJNZ R1,LOOP2
DJNZ R0,LOOP1
RET
END

下面的为正确程序:

ORG 0000H
AJMP MAIN
ORG 0030H
MAIN:
   MOV SP,#60H  ;设置堆栈长度为60BYTE
   MOV P2,#0FFH   ;将P2口所有位设置为1
   MOV B,#0FEH
   MOV 20H,B; 缓冲单元初始化         
LOOP1:
   MOV C,P1.0
   JC LOOP1	;若P1.0=1,循环不断检测
LOOP2:   MOV A,20H
   MOV P2,A
   ACALL DL100ms  ;调用100ms延时子程序
   MOV A,20H
   RL A     ;将显示缓冲单元的值循环左移1位
   MOV 20H,A
   JB P1.0,LOOP1 ;JB判断P1.0是否为1,如果P1.0=1,跳转loop1
   LJMP LOOP2 ;否则继续循环
DL100ms:MOV R7,#100
   DL1:MOV R6,#0FFH
   DL2:DJNZ R6,DL2
       DJNZ R7,DL1
    RET
END
© 版权声明
THE END
喜欢就支持以下吧
点赞3赞赏 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容