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

📄 voltage-meter.asm

📁 基于841的电压表小程序
💻 ASM
字号:
$MOD841
        CHAN  EQU   0
        CSEG            ;?
        SP0   EQU   50H
        CLK81 EQU   P3.5
        DAT81 EQU   P3.3
        KEY   EQU   P3.2
        NUM0  EQU   30H         ;设置了一组存储单元
        NUM1  EQU   31H
        NUM2  EQU   32H
        NUM3  EQU   33H
;--------------------------------------
        ORG    0000H
        LJMP   MAIN
        ORG    0003H    ;t0中断程序入口
        LJMP   SERVE1
        ORG    0033H    ;adci转换结束中断
        LJMP   SERVE2
        ORG    0060H
MAIN:   MOV    R0,#0FFH
        CLR    A
QING:   MOV    @R0,A
        DJNZ   R0,QING
        MOV    SP,#SP0
        LCALL  YS       	;why调延时?
;---------------------------------------
        LCALL  INI8281
        LCALL  INI841
        LJMP   AGAIN
;---------------------------------------
INI841: MOV    ADCCON1,#0A8H    ;启动adc,内参,分频为8,信号选择位为2,
        MOV    ADCCON2,#CHAN    ;控制转换模式和通道选择,选通道0
        MOV    ADCCON3,#07H
        SETB   EA               ;中断设置
        SETB   EX0              ;开外部中断0
        SETB   PADC             ;adc中断优先
        CLR    PX0
        RET
;----------------------------------------
INI8281:SETB   CLK81
        SETB   DAT81
        MOV    A,#12H
        LCALL  WTO81
        MOV    A,#80H
        LCALL  WTO81
        RET
;----------------------------------------
AGAIN:  ;LCALL  DELAY1          ;
        SETB   ADCCON2.4        ;触发单步转换
        LJMP   AGAIN            ;等待中断,此时adc还未能中断了
SERVE1: SETB   EADC             ;开adc中断
        RETI                    ;返回等待adc中断
SERVE2: MOV    R0,ADCDATAL      ;将转换的结果放入寄存器中
        MOV    R1,ADCDATAH
        LCALL  CHULI
        LCALL  XIANSHI
        RETI
;--------------------------------------
       ;MOV  R0,ADCDATAL
       ;MOV  R1,ADCDATAH
CHULI:  MOV  R3,#00H            ;
        MOV  R2,#28H
        LCALL  CHENGJI
        MOV    NUM0,R6

        MOV  R1,41H
        MOV  R0,40H
        MOV  R3,#00H
        MOV  R2,#0AH
        LCALL  CHENGJI
        MOV    NUM1,R6

        MOV  R1,41H
        MOV  R0,40H
        MOV  R3,#00H
        MOV  R2,#0AH
        LCALL  CHENGJI
        MOV    NUM2,R6

        MOV  R1,41H
        MOV  R0,40H
        MOV  R3,#00H
        MOV  R2,#0AH
        LCALL  CHENGJI
        MOV    NUM3,R6
        RET
;-------------------------------------------------
CHENGJI:MOV  40H,#00H
        MOV  41H,#00H
        MOV  42H,#00H
        MOV  43H,#00H
;--------------
        MOV  A,R2
        MOV  B,R0
        MUL  AB         ;28*adcdatal?
        MOV  40H,A      ;其结果低8位放入40h
        MOV  41H,B      ;高8位放入41h
;----------------
        MOV  A,R3
        MOV  B,R0       ;00*adcdatal?
        MUL  AB
        MOV  42H,B      ;高8位放入42h
        CLR  C          ;清进位
        ADDC A,41H      ;
        MOV  41H,A
        JNC  NEXT1      ;c不为0,跳转
        INC  42H
;------------------
 NEXT1: MOV  A,R2       ;
        MOV  B,R1
        MUL  AB
        CLR  C
        ADDC A,41H
        MOV  41H,A

        MOV  A,B
        ADDC A,42H
        MOV  42H,A
        JNC  NEXT2
        INC  43H
;--------------------
NEXT2:  MOV  A,R3
        MOV  B,R1
        MUL  AB
        CLR  C
        ADDC A,42H
        MOV  42H,A

        MOV  A,B
        ADDC A,43H
        MOV  43H,A
;---------------------
        MOV  R7,43H
        MOV  R6,42H
        MOV  R5,41H
        MOV  R4,40H
        RET
;-------------------------------------------------
XIANSHI:MOV    A,#00H
        LCALL  WTO81
        MOV    A,#7FH   ;点亮第一位小数点
        LCALL  WTO81
;--------------------------------------------------
        MOV    R1,NUM0  ;在第一位显示num0
        MOV    R0,#00H
        LCALL  ZHU_XIANSHI
;-------------------------------------
        MOV    R1,NUM1
        MOV    R0,#10H
        LCALL  ZHU_XIANSHI
;-------------------------------------
        MOV    R1,NUM2
        MOV    R0,#20H
        LCALL  ZHU_XIANSHI
;---------------------------------------
        MOV    R1,NUM3
        MOV    R0,#30H
        LCALL  ZHU_XIANSHI
        RET
;------------------------------------------
ZHU_XIANSHI:  MOV    A,#15H     ;hex译码器
              LCALL  WTO81
              MOV    A,R1       ;r1可以代替很多numn
              ORL    A,R0       ;r0代表显示位数,显示num
              LCALL  WTO81
              RET
;基本都要的程序----------------------------------------
WTO81:	MOV	R6,#08H
WAT:	CLR	CLK81
	LCALL	DELAY
	SETB	CLK81
	JB	DAT81,WAT
	CLR	CLK81
	LCALL	DELAY
	SETB	CLK81
	JNB	DAT81,$
WTB81:	RLC	A
	MOV	DAT81,C
        CLR	CLK81
	LCALL	DELAY
	SETB	CLK81
	LCALL	DELAY
	LCALL	DELAY
	DJNZ	R6,WTB81
	SETB	DAT81
        RET
;----------------------------------------------
DELAY:  NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        RET
;-----------------------------------------------
DELAY1: MOV     R7,#200
DLY1:   MOV     R5,#55
DLY2:   MOV     R6,#50
        DJNZ    R6,$
        DJNZ    R5,DLY2
        DJNZ    R7,DLY1
        RET
;-------------------------------------------------
YS:     MOV     R5,#00H
        MOV     R4,#50H
YS1:    DJNZ    R5,$
        DJNZ    R4,YS1
        RET
        END

⌨️ 快捷键说明

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