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

📄 new1595.asm

📁 LTC1595应用程序 输出精密模拟电阻数据 0--650欧,精度0.025%
💻 ASM
字号:
     ;输出电阻数据给LTC1595子程序; 最大输出65535(655.35)
     ;输入电阻值bcd码在15-17H  L在前
SC_R:	  MOV    R_DATA2,17H   ;h
          MOV    R_DATA1,16H   ;m
          MOV    R_DATA0,15H   ;l
	  PUSH	 01H
	  LCALL  PY_SUB      ;转换成HEX码并补偿误差 5e-5fh  ;变换成0-100MV输出
 	  MOV    A,OUTDATA1
          LCALL  ROUT        ;往TLC1595送数据子程序(写一个8BIT数据)h
          MOV    A,OUTDATA2
          LCALL  ROUT        ;往TLC1595送数据子程序(写一个8BIT数据)l
          CLR    ROUT_LD     ;D/A OUT
          LCALL  DELAY
          SETB   ROUT_LD
          LCALL  DELAY
	  POP	 01H
	  RET

PY_SUB:   MOV    R1,#PY_BCD1		;偏移量子程序的主程序
          MOV    @R1,R_DATA2    ;h      ;9c-9eh
          MOV    R1,#PY_BCD2
          MOV    @R1,R_DATA1     ;m
          MOV    R1,#PY_BCD3
          MOV    @R1,R_DATA0      ;l
	  LCALL  JSJCSJ		;计算原始电阻输出值 (bcd--hex)存9A-9BH
	  MOV    R1,#JSOUTDT1
          MOV    A,@R1
          MOV    R1,#5eh    ;转移到5e-5fh
          MOV    @R1,A
          MOV    R1,#JSOUTDT2
          MOV    A,@R1
          MOV    R1,#5fh
          MOV    @R1,A
         ; mov    4eh,5EH     ;备用
         ; mov    4fh,5FH
          ret
                               ;变换成0-100MV输出
          mov    r2,5eh
          mov    r3,5fh
          mov    r4,#00
          mov    r5,#00
          mov    r6,#27h    ;100mv   ;10000-2710h
          mov    r7,#10h    ;200mv=  4e20h         78.00mv= 1E78
          LCALL  DIVD       ;(r2r3r4r5/r6r7)=r4r5
          mov    5eh,r4     ;获得最终数据 ;5e-5fh
          mov    5fh,r5
          mov    4eh,5EH     ;备用
          mov    4fh,5FH

          RET

PY_ADD:   CLR    C                       ;最终结果放在OUTDATA2~OUTDATA1中。
          MOV    R0,#PY0
          MOV    R1,#JCDATA2
          MOV    A,@R1
          ADD    A,@R0
          MOV    OUTDATA2,A
          MOV    R1,#JCDATA1
          MOV    A,@R1
          ADDC   A,#00H
          MOV    OUTDATA1,A
          RET

JSJCSJ:   PUSH   00H                   ;计算基础数据子程序
          PUSH   01H                   ;入口为PY_BCD1(高)~PY_BCD3(低)
          PUSH   02H
          PUSH   03H
          PUSH   04H
          PUSH   05H
          PUSH   06H
          PUSH   07H
          LCALL  PY_CGE3   ;将3字节PY_BCD1~PY_BCD3分高低位放到94-9ah
          MOV    R1,#SC_N    ;bcd码起始地址   93h
          MOV    @R1,#05H    ;位数
          LCALL  PY_BCDCB    ;bcd--hex转换结果放9a-9bh
          POP    07H
          POP    06H
          POP    05H
          POP    04H
          POP    03H
          POP    02H
          POP    01H
          POP    00H
          RET

PY_CGE3:  MOV    R1,#PY_BCD1         ;将3字节PY_BCD1~PY_BCD3分高低位放到PYMD1~PYMD5中
          MOV    A,@R1               ;以备BCDCB使用
          ANL    A,#0F0H
          SWAP   A
          MOV    R1,#PYMD1
          MOV    @R1,A
          MOV    R1,#PY_BCD1
          MOV    A,@R1
          ANL    A,#0FH
          MOV    R1,#PYMD2
          MOV    @R1,A
          MOV    R1,#PY_BCD2
          MOV    A,@R1
          ANL    A,#0F0H
          SWAP   A
          MOV    R1,#PYMD3
          MOV    @R1,A
          MOV    R1,#PY_BCD2
          MOV    A,@R1
          ANL    A,#0FH
          MOV    R1,#PYMD4
          MOV    @R1,A
          MOV    R1,#PY_BCD3
          MOV    A,@R1
          ANL    A,#0F0H
          SWAP   A
          MOV    R1,#PYMD5
          MOV    @R1,A
          MOV    R1,#PY_BCD3
          MOV    A,@R1
          ANL    A,#0FH
          MOV    R1,#PYMD6
          MOV    @R1,A
          MOV    R0,#PYMD1
          RET

PY_BCDCB:                          ;3字节BCD数转化为16进制数(输入十进制数须小于65536,即输出16进制数小于等于0FFFFH)
                                   ;入口:(R0)=内部RAM中BCD码高字节地址指针
                                   ;(R7)=BCD码位数减1,即N=5
                                   ;出口:(R3R4)=转换结果

          MOV     R3,#0            ;hex_h   结果高字节清零
          MOV     A,@R0            ;取BCD码
          MOV     R4,A             ;hex_l   暂存
          MOV     R1,#SC_N
          MOV     A,@R1
          MOV     R7,A
PY_BCDCL: MOV     A,R4
          MOV     B,#10
          MUL     AB
          MOV     R4,A             ;暂存R4*10低8位
          MOV     A,B
          XCH     A,R3             ;暂存R4*10高8位
          MOV     B,#10
          MUL     AB               ;(R3)*10为一字节数
          ADD     A,R3             ;(R3)*10+(R4)*10高8位
          MOV     R3,A             ;暂存
          INC     R0
          MOV     A,R4
          ADD     A,@R0
          MOV     R4,A
          MOV     A,R3
          ADDC    A,#0             ;(R3R4)+((R0))+CY-->R3R4
          MOV     R3,A
          DJNZ    R7,PY_BCDCL      ;未完,继续
          MOV     R1,#JSOUTDT1
          MOV     A,R3
          MOV     @R1,A
          MOV     R1,#JSOUTDT2
          MOV     A,R4
          MOV     @R1,A
          RET

GET_PY:   MOV	  R1,#ZD1          ;取偏移量子程序
	  MOV	  A,@R1		   ;子段数高位不为0就为1
	  JNZ	  OVER256   	   ;判断子段数是否超过256
	  MOV	  DPTR,#PYTABLE1   ;不是用PYTABLE1来查表
	  LJMP	  CZPYL
OVER256:  MOV	  DPTR,#PYTABLE2   ;是用PYTABLE2来查表
CZPYL:    MOV	  R1,#ZD2          ;获取子段数低位
	  MOV	  A,@R1
	  MOVC	  A,@A+DPTR        ;查表获取偏移量存在PY0中
	  MOV	  R1,#PY0
	  MOV	  @R1,A
	  RET

ROUT:     LCALL  DELAY
          CLR    ROUT_CLK	   ;往TLC1595送数据子程序(写一个8BIT数据)
          LCALL  DELAY
          JB     ACC.7,R_NEXT1
          CLR    ROUT_DIN
          LCALL  R_CLK
          LJMP   R_NEXTA
R_NEXT1:  SETB   ROUT_DIN
          LCALL  R_CLK
R_NEXTA:  JB     ACC.6,R_NEXT2
          CLR    ROUT_DIN
          LCALL  R_CLK
          LJMP   R_NEXTB
R_NEXT2:  SETB   ROUT_DIN
          LCALL  R_CLK
R_NEXTB:  JB     ACC.5,R_NEXT3
          CLR    ROUT_DIN
          LCALL  R_CLK
          LJMP   R_NEXTC
R_NEXT3:  SETB   ROUT_DIN
          LCALL  R_CLK
R_NEXTC:  JB     ACC.4,R_NEXT4
          CLR    ROUT_DIN
          LCALL  R_CLK
          LJMP   R_NEXTD
R_NEXT4:  SETB   ROUT_DIN
          LCALL  R_CLK
R_NEXTD:  JB     ACC.3,R_NEXT5
          CLR    ROUT_DIN
          LCALL  R_CLK
          LJMP   R_NEXTE
R_NEXT5:  SETB   ROUT_DIN
          LCALL  R_CLK
R_NEXTE:  JB     ACC.2,R_NEXT6
          CLR    ROUT_DIN
          LCALL  R_CLK
          LJMP   R_NEXTF
R_NEXT6:  SETB   ROUT_DIN
          LCALL  R_CLK
R_NEXTF:  JB     ACC.1,R_NEXT7
          CLR    ROUT_DIN
          LCALL  R_CLK
          LJMP   R_NEXTG
R_NEXT7:  SETB   ROUT_DIN
          LCALL  R_CLK
R_NEXTG:  JB     ACC.0,R_NEXT8
          CLR    ROUT_DIN
          LCALL  DELAY
          SETB   ROUT_CLK
          LCALL  DELAY
          LJMP   R_NEXTH
R_NEXT8:  SETB   ROUT_DIN
          LCALL  DELAY
          SETB   ROUT_CLK
          LCALL  DELAY
R_NEXTH:  CLR    C
          RET


R_CLK:    NOP			    ;往TLC1595送数据的时钟子程序
          LCALL  DELAY
          SETB   ROUT_CLK
          LCALL  DELAY
          CLR    ROUT_CLK
          LCALL  DELAY
          RET



PYTABLE1:
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,03H, ;99

DB 03H,03H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H, ;199

DB 64H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,;255

PYTABLE2:
DB 00H,00H,00H,00H,
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,03H, ;299

DB 03H,03H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H, ;399

DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,50H,51H,52H,53H,54H,54H,55H,55H,55H, ;499

DB 66H,

DA_PYTAB1:
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H, ;99

DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H, ;199

DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,   ;255

DA_PYTAB2:
DB 00H,00H,00H,00H,
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H, ;299

DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H, ;399

DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H, ;499

DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,


⌨️ 快捷键说明

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