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

📄 data1.asm

📁 51采集压力并显示
💻 ASM
字号:
;-------------------------------------------------------
Z8279   EQU   0FF82H       ;8279 状态/命令口地址
D8279   EQU   0FF80H       ;8279 数据口地址
LEDMOD  EQU   00H          ;左边输入 八位字符显示
                           ;外部译码键扫描方式,双键互锁
LEDFEQ  EQU   2FH          ;扫描速率
LEDCLS  EQU   0C1H         ;清除显示 RAM
LEDWR0  EQU   80H          ;设定的将要写入的显示RAM地址
A_DPORT EQU   8100H        ;0809 口地址
;-------------------------------------------------------
        ORG   0000H
        LJMP  START
        ORG   0003H
        LJMP  INT_0
        ORG   0040H
START:
        MOV   SP,#60H
        LCALL INIT8279     ;初始化8279
        SETB  IT0
        SETB  EA
        SETB  EX0          ;INT0 允许
MAIN: 
        LCALL INPUT        ;采样程序
        LCALL AVERAGE      ;求取平均值
        LCALL DISPLAY      ;显示程序
        MOV   DPTR,#8300H  ;在八位LED灯上显示对照数据
        MOV   A,R3
        MOVX  @DPTR,A      ;数据输出
        SJMP  MAIN

INPUT:
    MOV   R0,#00H   ;通道数
    MOV   A,R0
    MOV   DPTR,#A_DPORT
    ORL   DPL,A
    MOVX  @DPTR,A   ;启动 A_D
WAIT:   SJMP  WAIT

    MOV   R3,B
    RET

INT_0:
    MOVX  A,@DPTR   ;读 A_D 数据
    MOV   B,A
    MOV   R7,#00H   ;置读数标志
    RETI

         
AVERAGE:
        PUSH  0            ;保存现场
        PUSH  1
        PUSH  2            ;保存现场
        PUSH  3
        PUSH  4
        PUSH  5
        PUSH  6
        PUSH  7
        PUSH DPH
        PUSH DPL
        PUSH ACC
         
        CLR  A
        MOV  R0,#12H      ;采样个数
        MOV  R1,#4100H
        MOV  R2,A         ;0→最大值寄存器R2
        MOV  R3,#0FFH     ;FFH →最小值寄存器R3
        MOV  R4,A         ;存放数据和      
        MOV  R5,A         ;存放数据和
        MOV  R6,#00H      ;存放平均值
         
DAV1:    
        MOVX A,@R1        ;读A/D→B和A(调采样子程序)
        MOV  R7,A         ;采样值暂存R7
        ADD  A,R5         ;求和
        MOV  R5,A         ;存入R5
        MOV  A,R4         ;读取高位数据
        ADDC A,0          ;加上进位位
        MOV  R4,A         ;存入R4
        CLR  C            ;求取最大值
        MOV  A,R2
        SUBB A,R7
        JNC  DAV2        ;输入值<R2跳转
        MOV  A,R7
        MOV  R2,A
DAV2: 
        CLR  C           ;求取最小值
        MOV  A,R7
        SUBB A,R3
        JNC  DAV3        ;输入值>R3则跳转
        MOV  A,R7      
        MOV  R3,A        ;输入值→R3
DAV3:   
        INC  R1
        DJNZ R0,DAV1     ;N-1=0?
        CLR  C
        MOV  A,R5        ;N个采样值的累加和减去最大值和最小值,N=18
        SUBB A,R2
        MOV  R5,A
        MOV  A,R4
        SUBB A,0
        MOV  R4,A
        MOV  A,R5
        SUBB A,R3
        MOV  R5,A
        MOV  A,R4
        SUBB A,0
        MOV  R4,A
        
        MOV  A,R5
        SWAP A
        ANL  A,#0FH
        ADD  A,R4
        MOV  DPTR,#4120H  ;将最终的平均值放入#4120单元
        MOVX @DPTR,A
         
        POP ACC
        POP DPL
        POP DPH
        POP 7
        POP 6
        POP 5
        POP 4
        POP 3
        POP 2
        POP 1
        POP 0
        RET
        
INIT8279:                  ;8279初始化子程序
        PUSH  DPH          ;保存现场
        PUSH  DPL
        PUSH  ACC
        LCALL DELAY        ;延时
        MOV   DPTR ,#Z8279
        MOV   A,#LEDMOD    ;置8279工作方式
        MOVX  @DPTR,A
        MOV   A,#LEDFEQ    ;置键盘扫描速率
        MOVX  @DPTR,A
        MOV   A,#LEDCLS    ;清除 LED 显示
        MOVX  @DPTR,A
        LCALL DELAY        ;延时
        POP   ACC          ;恢复现场
        POP   DPL
        POP   DPH
        RET
                           ;显示字符子程序
                           ;输入: R4,位置 R5,值
DISLED:
        PUSH  DPH          ;保存现场
        PUSH  DPL
        PUSH  ACC
        MOV   A,#LEDWR0    ;置显示起始地址
        ADD   A,R4         ;加位置偏移量
        MOV   DPTR,#Z8279
        MOVX  @DPTR,A      ;设定显示位置
        MOV   DPTR,#LEDSEG ;置显示常数表起始位置
        MOV   A,R5
        MOVC  A,@A+DPTR    ;查表
        MOV   DPTR,#D8279
        MOVX  @DPTR,A      ;显示数据
        POP   ACC          ;恢复现场
        POP   DPL
        POP   DPH
        RET
DELAY:                    ;延时子程序
        PUSH  0            ;保存现场
        PUSH  1
        MOV   0,#0H
DELAY1:
        MOV   1,#0H
        DJNZ  1,$
        DJNZ  0,DELAY1
        POP   1            ;恢复现场
        POP   0
        RET

DISPLAY:
        LCALL DELAY
        MOV   R5,#0
      ;  MOV   DPTR,#4103H
       ; MOVX  A,@DPTR
        MOV   A,R3
        MOV   B,#32H
        DIV   AB
        ANL   A,#0FH
        MOV   R5,A
        MOV   R4,#7		
        LCALL DISLED       ;显示百位
        MOV   A,B
        MOV   B,#5H
        DIV   AB
        ANL   A,#0FH
        MOV   R5,A
        MOV   R4,#6
        LCALL DISLED       ;显示十位
        MOV   A,B
        MOV   B,#2H
        MUL   AB
        ANL   A,#0FH
        MOV   R5,A
        MOV   R4,#5
        LCALL DISLED       ;显示个位
        RET

LEDSEG: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H ;'0,1,2,3,4,5,6,7'
        DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H ;'8,9,A,B,C,D,E,F'
        DB 6DH,02H,08H,00H,59H,0FH,76H ;'U,-,_, ,I,O,P, '
END

⌨️ 快捷键说明

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