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

📄 liuweiwei.asm

📁 用汇编语言编写测电压
💻 ASM
字号:
COM EQU 50H
DAT EQU 51H
E EQU P2.3
RW EQU P2.2
RS EQU P2.1

ORG 0000H
LJMP START
ORG 000BH
LJMP ADC  ;50M秒 做一次AD转化

START: MOV   TMOD, #01H  ;定时器T0设为方式1
       MOV   TH0 , #3CH
       MOV   TL0 , #80H
       MOV   TCON, #00H   ; 电平触发方式
       MOV SP,#60H
       LCALL SETLCD
       MOV IE,#82H     ;开中断 , 定时器T0允许中断
       SETB TR0        ;启动定时器
       LCALL N1
LOOP:  MOV A,46H ;46H=AD转换后的数字量
       CJNE A,47H,LOP1  ;不等于跳转
       LCALL XS
       LJMP LOOP
LOP1:  LCALL MUL_BCD
       LCALL XS
       LJMP LOOP
MUL_BCD:  MOV 47H,46H
      MOV A,47H
            ;乘法   加 BCD  转化
      MOV B,#196
      MUL AB
      MOV R7,A
      MOV R6,B
      NOP
;入口条件:待转换的双字节十六进制整数在 R6 、 R7 中。
;出口信息:转换后的三字节BCD码整数在 R3 、 R4 、 R5 中。
;影响资源: PSW 、 A 、 R2 ~ R7     堆栈需求:    2字节

HB2: CLR  A;BCD码初始化
     MOV  R3,A
     MOV  R4,A
     MOV  R5,A
     MOV  R2,#10H ;转换双字节十六进制整数
HB3: MOV  A,R7 ;从高端移出待转换数的一位到 CY 中
     RLC  A
     MOV  R7,A
     MOV  A,R6
     RLC  A
     MOV  R6,A
     MOV  A,R5 ;BCD码带进位自身相加,相当于乘2
     ADDC  A,R5
     DA  A  ;十进制调整
     MOV  R5,A
     MOV  A,R4
     ADDC  A,R4
     DA  A
     MOV  R4,A
     MOV  A,R3
     ADDC  A,R3
     MOV  R3,A  ;双字节十六进制数的万位数不超过6,不用调整
     DJNZ  R2,HB3 ;处理完16bit
     NOP    ;BCD转化完毕,以下是对显示数据的处理
     ;把压缩BCD码  变成BCD码,存入40——43   显示缓存
     MOV A,R3
     ADD A,#30H
     MOV 40H,A ;个位
     MOV 41H,#0A5H
     MOV A,R4
     SWAP A
     ANL A,#0FH
     ADD A,#30H
     MOV 42H,A  ;小数 0.
     MOV A,R4
     ANL A,#0FH  ;小数0.0
     ADD A,#30H
     MOV 43H,A
     MOV A,R5
     SWAP A
     ANL A,#0FH   ;小数0.00
     ADD A,#30H
     MOV 44H,A
     MOV A,R5
     ANL A,#0FH   ;小数0.00
     ADD A,#30H
     MOV 45H,A
     RET


ADC: PUSH A
     PUSH 00H
     CLR TR0
     MOV R0,#70
     CLR E
     MOV DPTR,#0EFH   ;0809地址
     MOV A,#0         ;选通道0
     MOVX @DPTR,A    ; 启动AD转换
     LCALL DEL        ;等待AD转换
     MOVX A,@DPTR    ;读取数据
     MOV 46H,A
     MOV   TH0 , #3CH
     MOV   TL0 , #80H
     SETB TR0
     POP A
     POP 00H
     RETI
DEL: DJNZ R0,DEL
     MOV R0,#70
     RET
DEL1:MOV R7,#250
DEL2:MOV R6,#200
     DJNZ R6,$
     DJNZ R7,DEL2
     RET
SETLCD: MOV	COM,#38H		;8位总线,双行显示,5×7点阵
        LCALL   PR1
	MOV	COM,#01H		;光标复位,清屏
        LCALL   PR1
        MOV	COM,#06H		;光标右移,字不动
        LCALL   PR1
        MOV	COM,#0FH;0CH		;开显示,开光标,光标闪
        LCALL   PR1
        RET

        	;从第一行第N个位置开始显示
N1:     MOV	COM,#80H	   	;从第一行第N个位置开始显示
        LCALL   PR1
        MOV	R0,#00H		;显示字符串
	MOV	R1,#16
N2:     MOV	DPTR,#CHAR
	MOV	A,R0
	MOVC	A,@A+DPTR
	MOV	DAT,A
        LCALL   PR2
	INC	R0
        LCALL DEL1
	DJNZ	R1,N2
       	;从第2行第N个位置开始显示
        MOV	COM,#0C0H
        LCALL   PR1
        MOV	R0,#00H		;显示字符串
	MOV	R1,#15
N3:     MOV	DPTR,#CHAR1
	MOV	A,R0
	MOVC	A,@A+DPTR
	MOV	DAT,A
        LCALL   PR2
	INC	R0
        LCALL DEL1
	DJNZ	R1,N3
        MOV	COM,#0CH		;开显示,开光标,光标闪
        LCALL   PR1
        RET

XS:     MOV  COM,#089H        	;从第一行第10个位置开始显示
        LCALL   PR1
        MOV R1,#40H
LOP5:   MOV DAT,@R1
        LCALL   PR2
        INC R1
        CJNE R1,#46H,LOP5
	RET

PR1:    SETB	E
	MOV	p0,#080h	;准备写指令
	CLR	RS
	SETB	RW
	MOV	A,P0
	CLR	E
	JB	ACC.7,PR1		;查询是否为忙 ,等于1跳转
	CLR	RW
	SETB	E
	MOV	P0,COM
	CLR	E
	RET

     ;写数据
PR2:    SETB	E
	MOV	p0,#080h	;查询是否为忙
	CLR	RS
	SETB	RW
	MOV	A,P0
	CLR	E
	JB	ACC.7,PR2
	SETB	RS
	CLR	RW
	SETB	E
	MOV	P0,DAT	;8位总线,双行显示,5×10点阵
	CLR	E
	RET

CHAR:	DB  "Voltage= ****** "		;定义字符串
CHAR1:  DB"DQ-10501-LiuWei"
        END


⌨️ 快捷键说明

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