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

📄 newcon3.asm

📁 单片机实验程序-13种-17.4M-pdf.zip
💻 ASM
字号:

OUTBIT   equ 0e101h     ; 位控制口
CLK164   equ 0e102h     ; 段控制口(接164时钟位)
DAT164   equ 0e102h     ; 段控制口(接164数据位)
IN       equ 0e103h     ; 键盘读入
Num      equ   70h      ; 显示的数据
DelayT   equ   75h      ;

LEDBuf equ   40h        ; 显示缓冲

PD1     EQU  32H	; 模块参数
COLUMN  EQU  30H
PAGE1   EQU  31H	; 页地址寄存器
CODE1   EQU  32H	; 字符代码寄存器
COUNT   EQU  33H	; 计数器
COM     EQU 20H		; 指令寄存器
DAT     EQU 21H		; 数据寄存器
CWADD1 EQU 0fa00H	; 写指令代码地址(E1)
CRADD1 EQU 0fa80H	; 读状态字地址(E1)
DWADD1 EQU 0fa40H	; 写显示数据地址(E1)
DRADD1 EQU 0fac0H	; 读显示数据地址(E1)
CWADD2 EQU 0f800H	; 写指令代码地址(E2)
CRADD2 EQU 0f880H	; 读状态字地址(E2)
DWADD2 EQU 0f840H	; 写显示数据地址(E2)
DRADD2 EQU 0f8c0H	; 读显示数据地址(E2)
Hour    equ  34h
Minute  equ  35h
Second  equ  36h
C100us  equ  37h
Tick    equ  10000
T100us  equ  256-50
Pulse    equ 0
PulseCNT equ 38h
ToneHigh equ 39h
ToneLow  equ 3ah

Speaker  equ P3.3

DAOT EQU 3bH           ; 中断次数计数单元
SCNT EQU 3cH           ; 为送到0832的值
CKCH EQU 3dH           ; 存放转速
CKCN EQU 3eH
SETP EQU 3fH
TEMP EQU 50h

; 脉冲宽度下限
ldhmin equ 0cbh
ldlmin equ 0cbh
p0hmin equ 0f3h
p0lmin equ 0f3h
p1hmin equ 0deh
; 脉冲宽度上限
ldhmax equ 0d0h
ldlmax equ 0d0h
p0hmax equ 0f9h
p0lmax equ 0f9h
p1hmax equ 0e3h
; 发送信号时载波信号宽度
send5  equ 192
send1  equ 38
send3  equ 115


status equ 48H
rcvdat equ 49h
snddat equ 4Ah
vldmin equ 4Bh
vldmax equ 4Ch
hasdat equ 4Dh


HasRcv equ   20h.1   ; 接收标志位
RCVBuf equ   52H     ; 接收缓冲

       ORG 0000H
       lJMP START1
       ORG 0003H       ;
       LJMP PINT0
       org     000bh
       LJMP  SMAT0
       ORG 0023H
       LJMP  SMAT1
SMAT0: push    PSW
       push    ACC
       mov a,51h
       cjne a,#00h,loop0
       ljmp  T0Int
loop0: cjne a,#01h, loop1
       ljmp  Timer0Int
loop1: cjne a,#02h,loop2
       ljmp ptf0
loop2: cjne a,#03h,loop3
       ljmp  jishu
loop3: ljmp start1
jishu:	CLR TR0			;定时器0中断处理子程序
	MOV TL0,#0d0H
	MOV TH0,#3CH
	INC 23H
	MOV A,23H
	CJNE A,#0AH,ZOO1
	MOV 23H,#00H
	MOV 53H,TH1
	MOV 54H,TL1
	MOV TL1,#00H

	MOV TH1,#00H
ZOO1:	SETB TR0
        POP ACC
        POP PSW

	RETI



T0Int:

       mov     a, C100us+1
       jnz     Goon
       dec     C100us
Goon:
       dec     C100us+1
       mov     a, C100us
       orl     a, C100us+1
       jnz     Exit
       mov     C100us, #high(Tick)
       mov     C100us+1, #low(Tick)
       inc     Second
       mov     a, Second
       cjne    a, #60, Exit
       mov     Second, #0
       inc     Minute
       mov     a, Minute
       cjne    a, #60, Exit
       mov     Minute, #0
       inc     Hour
       mov     a, Hour
       cjne    a, #24, Exit
       mov     Hour, #0
Exit:
       pop     ACC
       pop     PSW

       reti

Timer0Int:

       clr   TR0
       mov   TH0, ToneHigh
       mov   TL0, ToneLow
       setb  TR0
       mov   c, Pulse
       mov   Speaker, c
       cpl   Pulse
       dec   PulseCNT
       pop   acc
       pop   PSW
       reti
PTF0:  MOV TH0,#0D0H
       SETB PSW.3
       DJNZ SCNT,PTFJ
       MOV SCNT,#64H
       MOV A,CKCN
       MOV B,#0AH
       DIV AB
       MOV 45H,B
       MOV B,#0AH
       DIV AB
       MOV 44H,B
       MOV 43H,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,#0f200H
       MOV A,DAOT
       MOVX @DPTR,A
       MOVX @DPTR,A
PTFJ:  NOP
       POP ACC
       POP PSW

       RETI
PINT0: PUSH ACC
       INC CKCN
       MOV A,CKCN
       JNZ PIPI
       INC CKCN
PIPI:  POP ACC
       RETI




SMAT1:       ; 串行口中断程序

        JNB     TI,S0_R
        CLR     TI
        NOP
        SJMP    S0_RET
S0_R:                          ; 接收数据
        CLR     RI
        MOV     RCVBUF,SBUF    ; 保存数据
        SETB    HasRcv         ; 提示收到数据
        NOP
S0_RET:
        RETI


START1: MOV SP,#60H
        clr 21h
        mov dptr,#0f200h
        mov a,#00h
        movx @dptr,a
	MOV DPTR,#0E100H    ;8155初始化
	MOV A,#03H
	MOVX @DPTR,A
START0: JB 21H,ZICON
        SJMP START2
ZICON:  JMP ZICON1
START2: mov   40H, #10h    ; 显示缓冲区初始化,显示P.
        mov   41H, #11h
        mov   42H, #11h
        mov   43H, #11h
        mov   44H, #11h
        mov   45H, #11h
        setb 20H
MLoop0:mov   30H ,#LEDBuf
MLoop:
       call  DisplayLED       ; 显示
       call  TestKey          ; 有键入?
       jz    MLoop            ; 无键入, 继续显示
       call  GetKey           ; 读入键码
       jb  acc.4,MING         ; 功能键、数字键判
       mov   R0,30H
       mov @R0,a
       inc 30H
       mov r0,30h
       cjne r0,#46H,MLoop
       ljmp  MLoop0
MING:  LJMP MING1
CLEAR1: MOV R7,#06H	     ;清显示缓冲器子程序
        MOV R0,#40H
        MOV A,#00H
TUNER:  MOV @R0,A
        INC R0
        DJNZ R7,TUNER
        RET
LEDMAP:              ; 八段管显示码
       db    3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h
       db    7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71h
       db    0f3H,00h,0ffh,0b8h,40h,0f6h,38h,48H ,02h

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

Delay1:               ; 延时子程序1
       mov   r7, #10h
DelayLoop1:
       call  ir_receive
       djnz  r7, DelayLoop1
       djnz  r6, DelayLoop1
       ret

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

       mov   a, @r0
       anl   a, #1fh          ; 显示键码
       mov   dptr, #LEDMap
       movc  a, @a+dptr

       mov   B, #8           ; 送164
DLP:
       rlc   a
       mov   r3, a
       mov   acc.0, c

       mov   dptr, #DAT164
      anl a,#0fdh
       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           ; 显示下一位
       rr    a
       mov   r2, a
       inc   r0
       djnz  r1, Loop
       clr   0d3h
       ret
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,11H,12H,13H,14H,
       db    15H,16H,
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
       ajmp  Exit1
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    Exit1
       inc   r2              ; r2 = r2+ 行值
       djnz  r1, LoopC
Exit1:
       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
MING1:
      CLR C
      SUBB A,#10H	           ;命令键处理程序
      MOV DPTR,#JIAN
LMI0: ADD A,0E0H
      JMP @A+DPTR
JIAN: SJMP  PROG0;     EXEC
      SJMP  PROG1;     HERE
      SJMP  PR0G2;     STEP
      SJMP  PROG3;     TRACE
      SJMP  PROG4;     NEXT
      SJMP  PROG5;     LAST
      SJMP  PROG6;     MON
PROG0:
      SJMP JIAN3
PROG1:
      LJMP START2
PR0G2:
      LJMP START2
PROG3:
      LJMP START2
PROG4:
      SJMP JIAN1
PROG5:
      SJMP JIAN2
PROG6:setb 21h
      LJMP START0
JIAN1:
      ACALL MEM1
      jb 20h,guo
      inc dptr
guo:  ACALL MEM2
      clr 20h
      AJMP MLoop0
JIAN2:ACALL MEM1
      jb 20h,L00EFH
      MOV    A, DPL
      SUBB   A, #01H
      JC     L00DCH
L00D8H:
       MOV    DPL, A
       AJMP   L00EFH
L00DCH:
       DEC    DPH
       AJMP   L00D8H
L00EFH:ACALL MEM2
      CLR 20H
      AJMP MLoop0
JIAN3:ACALL MEM1
      MOV A,DPH
      ANL A,#7FH
      MOV DPH,A
      PUSH DPL
      PUSH DPH
      RET
 MEM1: MOV R0,#41H
      ACALL PINZI
      MOV 83H,A
      MOV R0,#43H
      ACALL PINZI
      MOV 82H,A
      MOV R0,#45H
      ACALL PINZI
      RET

PINZI:MOV A,@R0     ;拼字子程序
      ANL A,#0FH
      MOV R1,A
      DEC R0
      MOV A,@R0
      SWAP A
      ANL A,#0F0H
      ORL A,R1
      RET
MEM2:CLR A
      MOVC A,@A+DPTR
MEM12:MOV R0,#45H
      ACALL CAIZI
      MOV A,82H
      ACALL CAIZI
      MOV A,83H
CAIZI:MOV R1,A         ;拆字子程序
      ACALL CAI1
      MOV A,R1
      SWAP A
CAI1: ANL A,#0FH
      MOV @R0,A
      DEC R0
      RET

a090h:                  ;“验证式”实验九  P1口输入输出实验
 DD1:   JB P1.3,DD
         CLR P1.2       ;点亮
  DD2:   CALL DELAY
         SJMP DD1
  DD:    SETB P1.2      ;熄灭
         SJMP DD2


a100h:                    ;“验证式”	实验十  P3.3口输入 P1口输出

        MOV    A, #0FFH
        MOV    P1,A
L0812:  JB     P3.0, L0812   ;判断P3,3为高吗?
        MOV    R2, #10H
        LCALL  DELAY
        JB     P3.0, L0812   ;延时后再判断P3.3为高吗?
L081D:  JNB    P3.0, L081D   ;P3.3为低吗?
        MOV    R2, #10H
        LCALL  DELAY
        JNB    P3.0, L081D   ;延时后再判断P3.3为低吗?
        INC    A             ;累加器加1
        PUSH   ACC
  ;      CPL    A
        MOV    P1, A         ;A送P1口
        POP    ACC
        AJMP   L0812


A110H:
       mov   Num, #0   ;"验证式

⌨️ 快捷键说明

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