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

📄 有效值采集.asm

📁 该程序是一个基本8051单片机和0809模数转换芯片的数据采集系统
💻 ASM
字号:
        ORG       0000H
        LJMP 	  START
        ORG  	  0003H	;中断INT0入口
        LJMP   	  INT0
        ORG	  0023H
        LJMP	  RECE
 START: MOV       SP,#70H
        SETB      P3.5    ;上电后指示灯亮
        MOV	  IE,#90H	 ;EA=1,ES=1,CPU开串行中断
	MOV       SCON,#50H
        MOV	  TMOD,#20H	;设置定时器T1为方式2

	MOV	  TH1,#0FDH	;设置波特率为9600b/s
	MOV	  TL1,#0FDH
        MOV       R6,#00H
	SETB	  TR1	        ;定时器T1启动
WAIT1:  NOP
        CJNE    R6,#01H,WAIT1
        LJMP    CAIJI

RECE:   CLR	EA
	PUSH	A
        MOV	A,SBUF ;接收到一个数据
        CLR	RI
        CJNE	A,#43H,OUT    ;是否收到传送信号"C"

        MOV     R6,#01H    ;收到"C"进入采集程序
  OUT:	POP	     A
        SETB	EA          ;开中断
	RETI
CAIJI:  MOV     TCON,#01H   ;IT0=1,边沿触发
	MOV	R2,#01H
        MOV     R7,#00H
        MOV     R0,#08H
        CLR	P2.0	;ST=0
	CLR	P3.4	;OE=0
        CLR     P2.2	;ALE=0
	CLR	P2.7	;片选
	CLR	P3.3	;选通4路,电流正半波
	CLR   	P3.5
        SETB    P2.1
CAIJI1: SETB	P2.2	;通路地址锁存
	CLR	P2.2    ;
	SETB	P2.0	;ADC0809输出端清零
	CLR  	P2.0	;启动A/D转换
	MOV	IE,#81H  ;
 WAIT:	NOP		;等待中断
        JNB     RI,WAIT2 ;
        CLR     RI ;
        MOV     A,SBUF ;
        CJNE    A,#54H,WAIT2 ;
        LJMP    START ;
WAIT2:  CJNE   R7,#00H,BJ00  ;
	LJMP	WAIT
INT0:   CLR     EA
        PUSH    A
        SETB  	P3.4	;输出使能有效
        MOV	P1,#0FFH
        NOP
        NOP
        LCALL   D5ms  ;0.5ms延时
      	MOV	A,P1
      	MOV    	@R0,A	;数据转存
	CLR  	P3.4	;关闭输出
        CJNE    R0,#3AH,C1
        MOV     R7,#01H
        LJMP    SHAN
C1:	INC     R0
INT1:   CJNE    R2,#01H,INT2
        CLR    P3.3	;选通4路,电流正半波
	CLR    P3.5
	SETB   P2.1
	SETB   P2.2	;通路地址锁存
	CLR    P2.2
        LJMP   C0
INT2:   CLR    P3.3	;选通0路,电压正半波
	CLR    P3.5
	CLR    P2.1
	SETB   P2.2	;通路地址锁存
	CLR    P2.2
  C0:   SETB   P2.0	;ADC0809再次采集
	CLR    P2.0
        SETB   EA
SHAN:   NOP
        POP    A
	RETI

BJ00:  NOP

       MOV      R0,#08H
       CJNE     R2,#01H,J1
B0:    CJNE     R0,#39H,B1    ;判断是否比较完
       LJMP     J1
B1:    CLR      C
       MOV      A,@R0
       INC      R0
       MOV      7AH,@R0
       CJNE     A,7AH,B2
       LJMP     B0
B2:    JNC      B0          ;C=0则A>R0,转B0
B3:    CJNE     R0,#39H,B4
       LJMP     J1
B4:    MOV      A,@R0      ;A<R0,把R0赋给A
       CLR      C
       INC      R0
       MOV      7AH,@R0
       CJNE     A,7AH,B5
       LJMP     B0
B5:    JNC       B6          ;C=0则A>R0,转B6
       LJMP     B3
B6:    DEC      R0
       MOV      @R0,#00H   ;把毛刺赋0
       INC      R0           ;指向下一单元
       LJMP     B0

J1:   MOV      R0,#0AH
      MOV      A,@R0
BJ:   CJNE     R0,#38H,BJ1
      LJMP     BJ2
BJ1:  INC      R0
      MOV      7AH,@R0
      CJNE     A,7AH,BJ3
      LJMP     BJ
BJ3:  JNC      BJ            ;A>R0,返回继续比较
      MOV      A,@R0       ;A<R0,将R0赋给A
      LJMP     BJ
BJ2:  NOP
      MOV      TMOD,#20H
      MOV      SCON,#50H
      MOV	  TH1,#0FDH	;设置波特率为9600b/s
      MOV	  TL1,#0FDH
      SETB     TR1
      MOV      SBUF,A
      JNB      TI,$
      CLR      TI             ;发送完毕
      LCALL    SH2
      CJNE     R2,#01H,ZH    ;R2=0,采集的是电压值,
      MOV      R2,#00H       ;采集电压
      MOV      R7,#00H
      MOV      R0,#08H
      CLR      P2.0	;ST=0
      CLR      P3.4	;OE=0
      CLR      P2.2	;ALE=0
      CLR      P2.7	;片选
      CLR      P3.3  	;选通0路,,输入电压
      CLR      P3.5
      CLR      P2.1
      LJMP     CAIJI1

ZH:     LCALL   D200ms
        LCALL   D200ms
        LCALL   D200ms
        LCALL   D200ms
        LCALL   D200ms
        LJMP    CAIJI

D200ms:	MOV	R3,#0C4H	      ;延时200ms
   DL2:	MOV	R4,#0FFH
   DL1:	NOP
	NOP
	NOP
	DJNZ	R4,DL1
	DJNZ	R3,DL2
	RET
 D5ms:   MOV     R5,#49H
  DL3:   NOP
         NOP
         DJNZ    R5,DL3
         RET

SH2:    CLR     P3.5
        LCALL	D200ms        ;闪2次
        LCALL	D200ms
        SETB	P3.5
        LCALL	D200ms
        LCALL	D200ms
        CLR     P3.5
        LCALL	D200ms
        LCALL	D200ms
        SETB	P3.5
        LCALL	D200ms
        LCALL	D200ms
        RET
        END

⌨️ 快捷键说明

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