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

📄 jp.asm

📁 本资源包含了单片机键盘、a/d、频率测试等源代码
💻 ASM
字号:
 FLAG1  EQU   20H
 WENDUH  DATA  35H
 WENDUL  DATA  36H
 TDH     DATA  37H
 TDL     DATA  38H
 TDOH    DATA  39H
 TDOL    DATA  3AH
 JISZ    DATA  3BH
        org 0000h
         ajmp start
         org 0100h
start:   mov scon,#00h
       
       MOV R7,#06H
       MOV R0,#00H
       MOV DPTR,#TAB
  DL0: MOV A,R0
       MOVC A,@A+DPTR
       ACALL AA
       INC R0
       DJNZ R7,DL0
       clr p3.3
        sjmp $
         MOV R3,#06H
         MOV R0,#50H
SJD:     MOV @R0,#00H
         INC R0
         DJNZ R3,SJD
MAIN:    acall key
         MOV 55H,54H
         MOV 54H,53H
         MOV 53H,52H
         MOV 52H,51H
         MOV 51H,50H

         mov dptr,#plo
         MOV A,58H
         MOV B,#03H
         MUL AB
         jmp @a+dptr
j11:     mov 50h,#01h
         ljmp dd1
j12:     mov 50h,#02h
         ljmp dd1
j13:     mov 50h,#03h
         ljmp dd1
j14:     mov 50h,#04h
         ljmp dd1
j15:     mov 50h,#05h
         ljmp dd1
j16:     mov 50h,#06h
         ljmp dd1
j17:     mov 50h,#07h
         ljmp dd1
j18:     mov 50h,#08h
         ljmp dd1
j21:     mov 50h,#09h
         ljmp dd1
j22:     mov 50h,#00h
         ljmp dd1
j23:     jmp dd1
j24:     mov 50h,#0bh
         ljmp dd1
j25:     mov 50h,#0ch
         ljmp dd1
j26:     mov 50h,#0dh
         ljmp dd1
j27:     mov 50h,#0eh
         ljmp dd1
j28:     mov 50h,#0fh
         ljmp dd1
dd:
        ACALL GET_T
        ACALL WENDUCL
        DJNZ JISZ,CZ
        AJMP DD
CZ:     INC JISZ
         INC JISZ
         MOV A,#100
         CJNE A,JISZ, CX
        MOV JISZ,#02H
 CX:   MOV   50H,TDL
        MOV   51H,TDH
        MOV   52H,#0fH
        MOV   53H,#0fH
        MOV   54H,#0fH
        MOV   55H,#0fH
        acall Disp
        ACALL DELAY2S
        ajmp DD

dd1:     acall Disp

         ajmp MAIN

key:     clr p3.3
         mov a,#00h
         mov sbuf,a
kl0:     jnb ti,kl0
         clr ti
kl1:     jnb p1.0,pk1
         jb p1.1,kl1
pk1:     acall d10ms
         jnb p1.0,pk2
         jb p1.1,kl1
pk2:     mov r7,#08h
         mov r6,#07fh
         mov r3,#00h
         mov a,r6
kl5:     mov sbuf,a
kl2:     jnb ti,kl2
         clr ti
         jnb p1.0,pk0
         jb p1.1,net
         mov r4,#08h
         ajmp pk3
pk0:     mov r4,#00h
pk3:     mov a,#00h
         mov sbuf,a
kl3:     jnb ti,kl3
         clr ti
kl4:     jnb p1.0,kl4
         jnb p1.1,kl4
         mov a,r4
         add a,r3
         mov 58h,a
         ret
net:     mov a,r6
         rr a
         mov r6,a
         inc r3
         djnz r7,kl5
         ret

disp:   SETB p3.3
step1:  mov scon,#00h
show:   mov r7,#06h
        mov r0,#50h
  loop1:mov a,@r0
  dir0: mov dptr,#desg
        movc a,@a+dptr
        mov 20h,a
  dir1: mov sbuf,a
  wait: jbc ti,loop2
        sjmp wait
  loop2:inc r0
        clr ti
        djnz r7,loop1
        CLR p3.3
        ret

;--------------ds1820  subgram------------------------------
init_1820:
       SETB P2.0
       NOP
       CLR P2.0
       ;主机发出延时537微秒的复位低脉冲
       MOV R1,#3
TSR1:  MOV R0,#107
       DJNZ R0,$
       DJNZ R1,TSR1
       SETB P2.0;然后拉高数据线
        NOP
        NOP
        NOP
        MOV R0,#25H
TSR2:
        JNB P2.0,TSR3;等待DS18B20回应
        DJNZ R0,TSR2
        AJMP TSR4 ; 延时
TSR3:
        SETB FLAG1 ; 置标志位,表示DS1820存在
        ;CLR P1.7;检查到DS18B20就点亮P1.7LED
        AJMP TSR5
TSR4:
        CLR FLAG1 ; 清标志位,表示DS1820不存在
        ;CLR P1.1
        AJMP TSR7

TSR5:
        MOV R0,#117
TSR6:
        DJNZ R0,TSR6 ; 时序要求延时一段时间
TSR7:
        SETB P2.0
         RET

;写DS18B20的子程序(有具体的时序要求)
WRITE_1820:
MOV R2,#8;一共8位数据
CLR C
WR1:
CLR P2.0
MOV R3,#6
DJNZ R3,$
RRC A
MOV P2.0,C
MOV R3,#23
DJNZ R3,$
SETB P2.0
NOP
DJNZ R2,WR1
SETB P2.0
RET

READ_1820:
MOV R4,#2 ; 将温度高位和低位从DS18B20中读出
MOV R1,#WENDUL ; 低位存入36H(TEMPER_L),高位存入35H(TEMPER_H)
RE00:
MOV R2,#8;数据一共有8位
RE01:
CLR C
SETB P2.0
NOP
NOP
CLR P2.0
NOP
NOP
NOP
SETB P2.0

MOV R3,#9
RE10:
DJNZ R3,RE10

MOV C,P2.0

MOV R3,#23
RE20:
DJNZ R3,RE20

RRC A
DJNZ R2,RE01
MOV @R1,A
DEC R1
DJNZ R4,RE00
RET

; 读出转换后的温度值
GET_T:
SETB P2.0
ACALL INIT_1820;先复位DS18B20
JB FLAG1,TSS2
NOP
;CLR P1.2
RET ; 判断DS1820是否存在?若DS18B20不存在则返回
TSS2:
;CLR P1.3;DS18B20已经被检测到!!!!!!!!!!!!!!!!!!
MOV A,#0CCH ; 跳过ROM匹配
ACALL WRITE_1820
MOV A,#44H ; 发出温度转换命令
ACALL WRITE_1820

;这里通过调用显示子程序实现延时一段时间,等待AD转换结束,12位的话750微秒
;LCALL DISPLAY
ACALL DELAY750
ACALL INIT_1820;准备读温度前先复位

MOV A,#0CCH ; 跳过ROM匹配
ACALL WRITE_1820

MOV A,#0BEH ; 发出读温度命令
ACALL WRITE_1820

ACALL READ_1820; 将读出的温度数据保存到35H/36H
;CLR P1.4
 NOP
RET

WENDUCL:MOV A,#07H
        ANL A,WENDUH
        MOV WENDUH,A
        MOV R1,#4
 L4:    CLR  C
        MOV A,WENDUH
        RRC A
        MOV WENDUH,A
        MOV A,WENDUL
        RRC A
        MOV WENDUL,A
        DJNZ R1,L4
        MOV A,WENDUL
        MOV B,#10
        DIV AB
        MOV TDH,A
        MOV TDL,B
        RET
;--------------------------------------------


DELAY750:   mov r7,#0FFh
d75:      mov r6,#0ffh
d751:     djnz r6,d751
         djnz r7,d75
         ret

AA75:  MOV SBUF,A
  AA751: JNB TI,AA751
      CLR TI
      RET

d15us:   mov r7,#07h
dl5:     djnz r7,dl5
         ret

DELAY2S:  MOV R3,#40
    D1S1: MOV R4,#90
    D1S2: MOV R5,#95
    D1S3: NOP
          DJNZ  R5,D1S3
          DJNZ  R4,D1S2
          DJNZ  R3,D1S1
          RET



d10ms:   mov r7,#0ah
dl:      mov r6,#0ffh
dl6:     djnz r6,dl6
         djnz r7,dl
         ret
 AA:  MOV SBUF,A
  AA1: JNB TI,AA1
      CLR TI
      RET

;desg: db 0fch,60h,0dah,0f2h,66h,0b6h,0beh,0e0h,0feh,0f6h,0eeh,0feh,9ch,0fch,9eh,8eh
desg: db 0fah,60h,0dch,0f4h,66h,0b6h,0beh,0e0h,0feh,0f6h,0eeh,0feh,9ah,0fah,9eh,00h
TAB: DB 0fah,0faH,1aH,1aH,9eH,6eH
;TAB: DB 0fcH,1cH,1cH,9eH,6eH


plo: ljmp j11
     ljmp j12
     ljmp j13
     ljmp j14
     ljmp j15
     ljmp j16
     LJMP J17
     LJMP J18
     ljmp j21
     ljmp j22
     ljmp j23
     ljmp j24
     ljmp j25
     ljmp j26
     LJMP J27
     LJMP J28

      end

⌨️ 快捷键说明

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