⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 b06.asm

📁 单片机实验程序-13种-17.4M-pdf.zip
💻 ASM
字号:
;	“验证式”	实验六 直流电机转速测量与控制实验
;       文件名:B06.ASM
;

;
DAOT EQU 40H;中断次数计数单元
SCNT EQU 41H;为送到0832的值
CKCH EQU 42H;存放转速
CKCN EQU 43H
SETP EQU 44H
TEMP EQU 45H
OUTBIT   equ 0e101h  ; 位控制口
CLK164   equ 0e102h  ; 段控制口(接164时钟位)
DAT164   equ 0e102h  ; 段控制口(接164数据位)
IN       equ 0e103h  ; 键盘读入口
LEDBuf   equ   39h   ; 显示缓冲

        ORG 0000H
                     STRT:  LJMP MAIN

        ORG 0003H       ;
       LJMP PINT0

        ORG 000BH       ;
       LJMP PTF0



        ORG 0030H       ;
PTF0:  MOV TH0,#0D0H
       PUSH ACC
       PUSH PSW
       SETB PSW.3
       DJNZ SCNT,PTFJ
       MOV SCNT,#64H
       MOV A,CKCN
       MOV B,#0AH
       DIV AB
       MOV 39H,B
       MOV B,#0AH
       DIV AB
       MOV 3AH,B
       MOV 3BH,A
       MOV A,CKCN
       CJNE A,SETP,PTFX
       SJMP PTFY
PTFX:  JC PTFZ
       DEC DAOT
       SJMP PTFY
PTFZ:  CJNE A,#3,$+3
       JC PTFR
       INC DAOT
       INC DAOT
PTFR:  INC DAOT
PTFY:  MOV CKCN,#0
       MOV DPTR,#0a000H
       MOV A,DAOT
       MOVX @DPTR,A
       MOVX @DPTR,A
PTFJ:  NOP
       POP PSW
       POP ACC
       RETI

MAIN:  mov sp,#60h
       mov dptr,#0e100h     ;8155初始化
       mov a,#03h
       movx @dptr,a
       MOV R0,#39H
       MOV R7,#06H
MLP0:  MOV @R0,#10H
       INC R0
       DJNZ R7,MLP0
       LCALL DIR
                            ;调显示
       MOV DAOT,#40H
       MOV SCNT,#01H
       MOV CKCH,#00H
       MOV CKCN,#00H
       SETB EA
       NOP
       SETB EX1
       NOP
       CLR IT1
       NOP
MLP1:  call  TestKey          ; 有键入?
       jz    MLp1            ; 无键入, 继续显示
       call  GetKey           ; 读入键码
       ANL A,#0FH
       CJNE A,#0AH,$+3
       JNC MLP1
       MOV 3EH,A
       LCALL DIR
  MLP2:call  TestKey          ; 有键入?
       jz    MLP2            ; 无键入, 继续显示
       call  GetKey           ; 读入键码
       ANL A,#0FH
       CJNE A,#0AH,$+3
       JNC MLP2
       MOV 3DH,A
       MOV A,3EH
       MOV B,#0AH
       MUL AB
       ADD A,3DH
       MOV SETP,A
       MOV DPTR,#0f200H
       MOV A,DAOT
       MOVX @DPTR,A
       MOV A,#1
       ORL A,TMOD
       MOV TMOD,A
       MOV TH0,#0D0H
       MOV TL0,#00H
       SETB TR0
       SETB EA
       SETB ET0
       SETB EX0
       SETB IT0
       SETB EX1
       CLR IT1
       NOP
       MOV IP,#04H
MLP4:  MOV DPTR,#0f200H
       MOV A,DAOT
       MOVX @DPTR,A
       LCALL DIR
       LJMP MLP4
PINT0: PUSH ACC
       INC CKCN
       MOV A,CKCN
       JNZ PIPI
       INC CKCN
PIPI:  POP ACC
       RETI

TestKey:
       mov   dptr, #OUTBIT
       mov   a, #0
       movx  @dptr, a        ; 输出线置为0
       mov   dptr, #IN
       movx  a, @dptr        ; 读入键状态
       cpl   a
       anl   a, #0fh         ; 高四位不用

       ret

KeyTable:                    ; 数字键码定义
       db    00h, 01h, 04h, 07h
       db    0fh, 02h, 05h, 08h
       db    0eh, 03h, 06h, 09h
       db    0dh, 0ch, 0bh, 0ah
       db    10H,10H,10H,10H,10H,
       db    10H,10H,10H,10H,10H

GetKey:
       mov   dptr, #OUTBIT
       mov   P2, dph
       mov   r0, #Low(IN)
       mov   r1, #00100000b
       mov   r2, #6
KLoop:
       mov   a, r1           ; 找出键所在列
       cpl   a
       movx  @dptr, a
       cpl   a
       rr    a
       mov   r1, a           ; 下一列

       movx  a, @r0
       cpl   a
       anl   a, #0fh
       jnz   Goon1           ; 该列有键入

       djnz  r2, KLoop

       mov   r2, #0ffh       ; 没有键按下, 返回 0ffh
       sjmp  Exit
Goon1:
       mov   r1, a           ; 键值 = 列 X 4 + 行

       mov   a, r2
       dec   a
       rl    a
       rl    a
       mov   r2, a           ; r2 = (r2-1)*4

       mov   a, r1           ; r1中为读入的行值
       mov   r1, #4
LoopC:
       rrc   a               ; 移位找出所在行
       jc    Exit
       inc   r2              ; r2 = r2+ 行值
       djnz  r1, LoopC
Exit:
       mov   a, r2           ; 取出键码

       mov   dptr, #KeyTable
       movc  a, @a+dptr
       mov   r2, a

WaitRelease:
       mov   dptr, #OUTBIT  ; 等键释放
       clr   a
       movx  @dptr, a

       mov   r6, #10
       call  Delay
       call  TestKey
       jnz   WaitRelease

       mov   a, r2
       ret

DIR:    setb 0d3h
        mov   r0, #LEDBuf
        mov   r1, #6          ; 共6个八段管
        mov   r2, #00000001b  ; 从左边开始显示
Loop:
        mov   dptr, #OUTBIT
        mov   a, #00h
        movx  @dptr, a        ; 关所有八段管

        mov   a, @r0
        mov dptr,#LEDmap
        movc a,@a+dptr
        mov   B, #8           ; 送164
DLP:
        rlc   a
        mov   r3, a
        mov   acc.0, c
        anl  a,#0fdh
        mov   dptr, #DAT164
        movx  @dptr, a
        mov   dptr, #CLK164
        orl a,#02h
        movx  @dptr, a
        anl a,#0fDh
        movx  @dptr, a
        mov   a, r3
        djnz  B, DLP
        mov   dptr, #OUTBIT
        mov   a, r2
        movx  @dptr, a        ; 显示一位八段管
        mov   r6, #1
        call  Delay
        mov   a, r2           ; 显示下一位
        rL    a
        mov   r2, a
        inc   r0
        djnz  r1, Loop
        mov   dptr, #OUTBIT
        mov   a, #0
        movx  @dptr, a
        clr 0d3h        ; 关所有八段管
        ret
LEDMAP:                       ; 八段管显示码
       db    3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h
       db    7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71h
       DB    00H

Delay:               ; 延时子程序
       mov   r7, #0
DelayLoop:
       djnz  r7, DelayLoop
       djnz  r6, DelayLoop
       ret


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -