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

📄 op_test.asm

📁 用C51单片机挂液晶显示器和键盘的一个自动测量功放参数的系统源代码。
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;******************************************************************************************
;******************************************************************************************
buff EQU 30H       ;乘法缓冲区4

FD1 EQU 31H         ;往后三字节,浮点运算缓冲区1
FD2 EQU 34H         ;往后三字节,浮点运算缓冲区2

VIO1 EQU 37H        ;AD采样值存储区

VS1 EQU 42H         ;输入失调电压显示缓冲区(存放为8位二进制=======》1位十进制BCD码)共四位
VS2 EQU 47H

SIGN BIT 48H
BIT_CNT DATA 49H                  ;------------------键盘缓冲区
DELAY1 DATA 50H
DELAY DATA 51H
REC_BUF DATA 52H
SEND_BUF DATA 53H

LCD_X	EQU	54H               ;------------------液晶缓冲区
LCD_Y	EQU	55H
COUNT	EQU	56H
COUNT1	EQU	57H
COUNT2	EQU	58H
COUNT3	EQU	59H
LCD_DATA	EQU	60H
LCD_DATA1	EQU	61H
LCD_DATA2	EQU	62H
;STORE		EQU	63H
DA_IN   EQU     64H             ;数据或指令
RS_STU  BIT     65H             ;数据指令选择
RW_STU  BIT     66H             ;读写指令选择
WR_COUNT1       EQU     67H     ;计数器1
WR_COUNT2       EQU     68H     ;计数器2



START BIT P2.0   ;接START(六脚)
CS  BIT P1.6                       ;I/O口设置
CLK BIT P1.5
DIO BIT P1.4
KEY BIT P1.3
SCLK	EQU	P1.2
STD     EQU     P1.1
CSY	EQU	P1.0

LEDA    EQU     P2.4
RST	EQU	P2.3


;******************************************************************************************
;******************************************************************************************
;ORG 0000H
;AJMP MAIN
MAIN:setb LEDA
     MOV SP,#70H
     SETB RST
     NOP
;********************液晶初始化****************************************************************
LGS0:		MOV	A,#34H			;34H--扩充指令操作 八比特控制接口,图形显示关闭
		LCALL	SEND_I
		MOV	A,#30H			;30H--基本指令操作 八比特控制接口,
		LCALL	SEND_I
		MOV	A,#01H			;清除显示
		LCALL	SEND_I
		MOV	A,#06H			;指定在资料写入或读取时,光标的移动方向
		LCALL	SEND_I
		MOV	A,#0CH			;开显示,关光标,不闪烁
		LCALL	SEND_I
RESET:SETB CS;
   SETB KEY
      SETB DIO
      MOV DELAY,#25            ;延时
;RST_DELAY1:
;      DJNZ DELAY1,RST_DELAY1
;      DJNZ DELAY,RST_DELAY1
;      MOV SEND_BUF,#10111111B   ;----------测试
;      LCALL SEND
;      SETB CS
 ;     MOV SEND_BUF,#10100100B   ;----------复位
 ;     LCALL SEND
 ;     SETB CS

      ;MOV TMOD,#02H      ;T0方式2,T1方式1计数
     ; MOV TL0,#06H
      ;MOV TH0,#06H      ;T0赋初值(0.4S)
      ;SETB TR0          ;键盘高优先级 ;开键盘、T0、T1中断
      ;SETB ET0
      ;SETB EX0
      ;SETB EA

;MOV DPTR,#TAB0                   ;显示初始信息
;LCALL LGS1
;LCALL	DELAY3
MOV DPTR,#TAB1
LCALL LGS1
LCALL	DELAY3
MOV DPTR,#TAB2
LCALL LGS1

LOOP: JB KEY,LOOP       ;是否有键入
      MOV SEND_BUF,#00010101B    ;-----------读键盘数据
      LCALL SEND
      LCALL RECEIVE
      SETB CS
      MOV SEND_BUF,#80H          ;-------------下载数据且按方式0译码,显示位1
      LCALL SEND
      SETB CS
      LCALL LONG_DELAY
      jnb key,$
KEYS:MOV A,REC_BUF
     CLR C
     SUBB A,#05H
     JC GO
     AJMP LOOP
GO:  MOV A,REC_BUF
     CLR C
     RLC A
     MOV DPTR,#TABGO
     JMP @A+DPTR

TABGO:AJMP T_VIO                      ;测量输入失调电压
      AJMP T_IIO                      ;测量输入失调电流
      AJMP T_AVD                      ;测量差模电压增益
      AJMP T_KCMR                     ;测量交流共模抑制比
      AJMP GOON                       ;自动测试

;******************************************************************************************
;******************************************************************************************
T_VIO:MOV	A,#01H			;清除显示
      LCALL	SEND_I
      MOV DPTR,#TAB3     ;显示======输入失调电压为:
      ACALL MV0             ;40mV

      MOV A,SIGN   ;T0计时是否到
      ANL A,#00000010B
      JZ  T_VIO1
      CLR ACC.1
      MOV SIGN,A   ;清标志位
      SETB  P3.0                       ;操作I/O口,控制继电器
      SETB  P3.1
      SETB  P3.2
      CLR   P3.3
      SETB  P3.4
      CLR   P3.5
      CLR   P3.6
      LCALL DELAY2
      LCALL ADC
      MOV R1,#VS1           ;送显示缓冲区首地址
      LCALL VIO_DEAR
DIR_VIO:MOV A,VIO1
        CLR C
        SUBB A,#14H  ;量程选择
        JC LM
SM:MOV DPTR,#TAB3    ;
   ACALL MV0         ;4mV
   MOV R1,#VS1
   DEC R1
   MOV	A,#88H
   LCALL SEND_I
   MOV A,@R1
   LCALL SEND_D
   DEC R1
   MOV A,#2EH
   LCALL SEND_D
   MOV A,@R1
   LCALL SEND_D
   DEC R1
   MOV A,@R1
   LCALL SEND_D
   DEC R1
   MOV A,@R1
   LCALL SEND_D
   DEC R1
   ACALL MV

LM:MOV	DPTR,#TAB3     ;显示======输入失调电压为:
   ACALL MV             ;40mV
   MOV R1,#VS1
   MOV	A,#88H
   LCALL SEND_I
   MOV A,@R1
   LCALL SEND_D
   DEC R1
   MOV A,@R1
   LCALL SEND_D
   DEC R1
   MOV A,#2EH
   LCALL SEND_D
   MOV A,@R1
   LCALL SEND_D
   DEC R1
   MOV A,@R1
   LCALL SEND_D
   DEC R1
   ACALL MV        ;mV
T_VIO1:LCALL WORK
      AJMP T_VIO
      RET
;**************************************************************************************
MVW:
;**************************************************************************************
MV:MOV	A,#8EH                          ;显示==============mV
   LCALL SEND_I
   MOV A,#4DH
   LCALL SEND_D
   MOV	A,#8FH
   LCALL SEND_I
   MOV A,#76H
   LCALL SEND_D
   RET


;******************************************************************************************
;******************************************************************************************
T_IIO:		MOV	A,#01H			;清除显示
		LCALL	SEND_I
MOV DPTR,#TAB4
      ACALL MV0
      ;MOV A,SIGN   ;T0计时是否到
      ;ANL A,#00000010B
      ;JZ TIO
      ;CLR ACC.1
      ;MOV SIGN,A   ;清标志位
      SETB  P3.0      ;操作I/O口,控制继电器
      SETB  P3.1
      SETB  P3.2
      CLR   P3.3
      SETB  P3.4
      CLR   P3.5
      CLR   P3.6
      LCALL DELAY2
      LCALL ADC
      MOV A,VIO1
      POP A
      CLR  P3.0      ;操作I/O口,控制继电器
      CLR  P3.1
      SETB  P3.2
      CLR   P3.3
      SETB  P3.4
      CLR   P3.5
      CLR   P3.6
      LCALL DELAY2
      LCALL ADC            ;控制可控硅,读取VL1
      MOV A,VIO1
      MOV R0,A
      MOV A,VIO1
      SUBB A,R0
      MOV VIO1,A
      MOV R1,#VS2          ;送显示缓冲区首地址
      LCALL VIO_DEAR
      ;AJMP DIR_IIO
;TIO:  AJMP T_IIO1
DIR_IIO:MOV A,VIO1
        CLR C
        SUBB A,#14H  ;量程选择
        JC LMI
SMI:MOV DPTR,#TAB4   ;
   ACALL MV0         ;0.4DB
   MOV R1,#VS2
   DEC R1
   MOV	A,#88H
   LCALL SEND_I
   MOV A,@R1
   LCALL SEND_D
   DEC R1
   MOV A,#2EH
   LCALL SEND_D
   MOV A,@R1
   LCALL SEND_D
   DEC R1
   MOV A,@R1
   LCALL SEND_D
   DEC R1
   MOV A,@R1
   LCALL SEND_D
   DEC R1
   ACALL MV1

LMI:MOV	DPTR,#TAB4
   ACALL MV1
   MOV R1,#VS2
   MOV	A,#88H
   LCALL SEND_I
   MOV A,@R1
   LCALL SEND_D
   DEC R1
   MOV A,@R1
   LCALL SEND_D
   DEC R1
   MOV A,#2EH
   LCALL SEND_D
   MOV A,@R1
   LCALL SEND_D
   DEC R1
   MOV A,@R1
   LCALL SEND_D
   DEC R1
   ACALL MV1        ;nA
T_IIO1:LCALL WORK
   AJMP T_IIO
   RET
;**************************************************************************************
MV1:MOV	A,#8EH                          ;显示==============nA
    LCALL SEND_I
    MOV A,'n'
    LCALL SEND_D
    MOV	A,#8FH
    LCALL SEND_I
    MOV A,'A'
    LCALL SEND_D
    RET
;******************************************************************************************
;******************************************************************************************
T_AVD:		MOV	A,#01H			;清除显示
		LCALL	SEND_I
      MOV DPTR,#TAB5
      ACALL MV0
      ;MOV A,SIGN   ;T0计时是否到
      ;ANL A,#00000010B
      ;JZ T_AVD1
      ;CLR ACC.1
      ;MOV SIGN,A   ;清标志位
      SETB  P3.0      ;操作I/O口,控制继电器
      SETB  P3.1
      SETB  P3.2
      CLR   P3.3
      CLR  P3.4
      SETB   P3.5
      SETB   P3.6
      LCALL DELAY2
      LCALL ADC
      MOV A,VIO1
      MOV R1,#VS1
      LCALL VIO_DEAR        ;处理输入失调电压AD采样值,存在[高]24H~[低]20H中(分离BCD码)
      MOV R0,#FD1            ;出口      分离BCD码转浮点BCD
      MOV R1,#VS1            ;入口
      LCALL TOBCD            ;
      MOV R0,#FD1
      LCALL LG               ;出口为@R0往后三字节
      NOP
      NOP
      ACALL BCDTO            ;@R1=FD2分离BCD码首地址(3位)
      MOV R1,#FD1
      MOV A,#88H             ;显示数据
      LCALL SEND_I
      MOV A,@R1
      LCALL SEND_D
      INC R1
      MOV A,@R1
      LCALL SEND_D
      INC R1
      MOV A,@R1
      LCALL SEND_D
      MOV A,#44H
      LCALL SEND_D
      MOV A,#42H
      MOV DPTR,#TAB5
      ACALL MV0
T_AVD1:LCALL WORK
      AJMP T_AVD
      RET
;**************************************************************************************
MV2:MOV	A,#8EH                          ;显示==============DB
    LCALL SEND_I
    MOV A,'n'
    LCALL SEND_D
    MOV	A,#8FH
    LCALL SEND_I

⌨️ 快捷键说明

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