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

📄 start.asm

📁 信号AD转换程序 信号AD转换程序 内容不多
💻 ASM
字号:
OUTBIT  EQU 0E101H
CLK164  EQU 0E102H
DAT164  EQU 0E102H
LINE    EQU 0E103H
COLUMN  EQU 0E101H
LEDBuf  EQU 60H
DAT_ADH EQU 80H
DAT_ADL EQU 00H
MAX     EQU 31H
MIN     EQU 32H
Delta   EQU 33H


KEYBOARD:
 DB 11H,21H,22H,24H,41H,42H,44H,81H,82H,84H,88H,48H,28H,18H,14H,12H

LEDMap:
  db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h
  db 7fh,6fh,77h,7ch,39h,5eh,79h,71h
LED_ADC:
  DB 77H,5EH,39H,00H,00H,00H
LED_DAC:
  DB 5EH,77H,39H,00H,00H,00H


  ORG 0000h
  AJMP START
  ORG 0003H
  AJMP ADC_
  ORG 0013h
  AJMP DAC_
  
START:
  SETB EA              ;设置初值
  SETB IT1
  SETB IT0
  MOV DPTR,#0E100H
  MOV A,#03H
  MOVX @DPTR,A
  MOV A,#0
  MOV R0,#LEDBuf        ; LED显示缓存空间
  MOV R1,#6             ; LED数量
LOOP1:
  MOV @R0,A             ;置LED缓存全为0
  INC R0
  DJNZ R1,LOOP1
CYCLE:
  ACALL DisplayLED       ;调用显示子程序
  ACALL KS1              ;调用键盘扫描程序
  JZ CYCLE               ;无键,转
  ACALL KEY
  ACALL KEYDL
  SJMP CYCLE
Delay:                    ; 延时子程序
  MOV R7,#0
DelayLoop:
  DJNZ R7,DelayLoop
  DJNZ R6,DelayLoop
  RET      

ADC_:          ;ADC中断服务程序
  CLR EX0
  MOV DPTR,#0A000H
  MOVX A,@DPTR
  MOV 30H,A
  MOV A,#00H
  MOX @DPTR,A
  MOV A,DAT_ADH
  MOV DPH,A
  MOV A,DAT_ADL
  MOV DPL,A
  MOV A,30H
  MOVX @DPTR,A
  INC DAT_ADL
  MOV A,DAT_ADL
  CJNE A,#0FFH,ADC_1
  MOV DAT_ADL,#00H
ADC_1:
  MOV DPTR,#0B000H    ;D/A转换
  MOV     A,30H
  MOVX    @DPTR,A
  ACALL   PROCESS  
  SETB EX0
  RETI



DAC_:
  CLR     EX1             ;INT1 输出中断服务程序
  MOV     DPTR,#0A000H
  MOV     A,#00H
  MOVX    @DPTR,A
  MOV     A,DAT_ADH
  MOV     DPH,A
  MOV     A,DAT_ADL
  MOV     DPL,A
  MOVX    A, @DPTR
  MOV     30H,A
  INC     DAT_ADL
  MOV     A,DAT_ADL
  CJNE    A,#0FFH,DAC_1
  MOV     DAT_ADL,#00H
DAC_1:
  MOV     DPTR,#0B000H
  MOV     A,30H
  MOVX    @DPTR,A
  ACALL   PROCESS
  SETB    EX1
  RETI



PROCESS:                        ;实时处理程序
        CLR     C
        MOV     A,30H
        SUBB    A,MAX
        JC      Mininum
        MOV     A,30H
        MOV     MAX,A
Mininum:MOV     A,30H
        SUBB    A,MIN
        JNC     EndPro
        MOV     A,30H
        MOV     MIN,A
Update: CLR     C
        MOV     A,MAX
        SUBB    A,MIN
        MOV     Delta,A
EndPro: RET

  
  
KS1:                      ;扫描键盘子程序
  MOV DPTR,#COLUMN
  MOV A,#00H
  MOVX @DPTR,A
  MOV DPTR,#LINE
  MOVX A,@DPTR
  CPL A
  ANL A,#0FH
  RET  
 
 
KEY:                      ;键盘输入子程序
  MOV R2,#0FEH
  MOV R4,#4               ;4列
SCAN:
  MOV DPTR,#COLUMN        ;逐列扫描
  MOV A,R2
  MOVX @DPTR,A
  MOV DPTR,#LINE          ;读入行信号
  MOVX A,@DPTR
  ANL A,#0FH              ;屏蔽高四位
  CJNE A,#0FH,NEXT        ;有键输入,转
  MOV A,R2                ;指向下一列
  RL A
  MOV R2,A
  DJNZ R4,SCAN
  AJMP FINISH
NEXT:
  SWAP A                  ;合并行列信号
  MOV R3,A
  MOV A,R2
  ANL A,#0FH
  ORL A,R3
  CPL A                   ;行列信号逐位取反
  MOV R3,A                ;暂存
  MOV R2,#0
  MOV DPTR,#KEYBOARD  
FINDKEY:                  ;查找键值
  MOV A,R2
  MOVC A,@A+DPTR
  CLR C
  SUBB A,R3
  JNZ NEXT1
  MOV R0,#LEDBuf+5
  MOV A,R2
  MOV @R0,A
  ACALL FINISH
NEXT1:
  INC R2
  SJMP FINDKEY
  ACALL FINISH
  RET

    
FINISH:
  ACALL DisplayLED
  ACALL KS1
  JNZ FINISH
  RET 
  
  
DisplayLED:       ;显示子程序
  MOV R0,#LEDBuf
  MOV R1,#6
  MOV R2,#00100000B
LOOP:
  MOV DPTR,#OUTBIT
  MOV A,#0
  MOVX @DPTR,A
  MOV DPTR,#LEDMap
  MOV A,@R0
  MOVC A,@A+DPTR
  MOV B,#8
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
  RR A
  MOV R2,A
  INC R0
  DJNZ R1,LOOP
  MOV DPTR,#OUTBIT
  MOV A,#0
  MOVX @DPTR,A
  RET

KEYDL:       ;键值处理子程序
   MOV 06H,R2
   CJNE R2,#0AH,PS1
   SETB EX0
START_0:      ;键为A,执行A/D转换
   MOV MAX,#00H
   MOV MIN,#0FFH
   MOV Delta,#00H
   MOV DAT_ADL,#00H
   MOV DPTR,#0A000H
   MOV A,#00H
   MOVX @DPTR,A
   RET
PS1:          ;键为D,执行D/A转换
   CJNE R2,#0DH,PS2
   SETB EX1
   SJMP START_0
PS2:          ;键为B,关中断,暂停
   CJNE R2,@0BH,PS3
   SJMP PAUSE_0
PS3:          ;键为无效值,跳回
   AJMP CYCLE
   RET
PAUSE_0:
   CLR EX0
   CLR EX1
   RET   
   

   

⌨️ 快捷键说明

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