数控直流稳压电源(5)

时间:2017-12-15 我要投稿
K          ;RW=0,RS=0,第八位"0"

    CLR   SCLK

    DJNZ  R3,STWC2

    RET

 

STWD:

    SETB  CS

    SETB  SID

    MOV   R3,#5         ;连续送入5个"1",起始

STWD1:

    SETB  SCLK

    CLR   SCLK

    DJNZ  R3,STWD1

    CLR   SID           ;RW=0

    SETB  SCLK

    CLR   SCLK

    SETB  SID           ;RS=1

    SETB  SCLK

    CLR   SCLK

    CLR   SID           ;第八位"0"

    SETB  SCLK

    CLR   SCLK

    RET

 

W4_D:

    MOV   R3,#4

W4_D1:

    RLC   A

    MOV   SID,C

    SETB  SCLK

    CLR   SCLK

    DJNZ  R3,W4_D1

    RET

 

W4_0:

    MOV   R3,#4

W4_01:

    CLR   SID

    SETB  SCLK

    CLR   SCLK

    DJNZ  R3,W4_01

    RET

;********************

;2MS延时

;********************

DEL_2MS:

    MOV   R0,#2

D1:

    MOV   R1,#200

D2:

    NOP

    NOP

    NOP

    DJNZ  R1,D2

    DJNZ  R0,D1

    RET

;********************

;40MS延时

;******************** 

DEL_40MS:

    MOV    R5,#20

D3:

    LCALL  DEL_2MS

    DJNZ   R5,D3

    RET

 ;********************

;200MS延时

;********************

DEL_200MS:

    MOV    R5,#100

D4:

    LCALL  DEL_2MS

    DJNZ   R5,D4

    RET

;********************

;500MS延时

;******************** 

DEL_500MS:

    MOV    R5,#250

D5:

    LCALL  DEL_2MS

    DJNZ   R5,D5

    RET

;********************

;1500MS延时

;********************

DEL_1500MS:

    LCALL  DEL_500MS

    LCALL  DEL_500MS

    LCALL  DEL_500MS

    RET

 

;*************************************

;用adc0832读数并送数给显示的子程序,

;并将键盘的按键数送给dac0832让其输出。

;*************************************

;==== ADC0832读数据子程序====

LIGHT:SETB     ADDI       ;初始化通道选择

     NOP

     NOP

     CLR       ADCS        ;拉低/CS端

     NOP

     NOP

     SETB     ADCLK        ;拉高CLK端

     NOP

     NOP

     CLR       ADCLK       ;拉低CLK端,形成下降沿

     MOV       A,34H

     MOV      C,ACC.1      ;确定取值通道选择

     MOV       ADDI,C

     NOP

     NOP

     SETB     ADCLK        ;拉高CLK端

     NOP

     NOP

     CLR       ADCLK       ;拉低CLK端,形成下降沿2

     MOV       A,34H

     MOV      C,ACC.0      ;确定取值通道选择

     MOV       ADDI,C

     NOP

     NOP

     SETB     ADCLK        ;拉高CLK端

     NOP

     NOP

     CLR       ADCLK       ;拉低CLK端,形成下降沿3

     SETB     ADDI

     NOP

     NOP

     MOV      R7,#8        ;准备送下后8个时钟脉冲

AD_1:

     MOV      C,ADDO       ;接收数据

     MOV       ACC.0,C

     RL        A           ;左移一次

     SETB     ADCLK

     NOP

     NOP

     CLR       ADCLK       ;形成一次时钟脉冲

     NOP

     NOP

     DJNZ      R7,AD_1     ;循环8次

     MOV      C,ADDO       ;接收数据

     MOV       ACC.0,C

     MOV      B,A

     MOV      R7,#8

AD_13:

     MOV      C,ADDO       ;接收数据

     MOV       ACC.0,C

     RR        A           ;右移一次

     SETB     ADCLK

     NOP

     NOP

     CLR       ADCLK       ;形成一次时钟脉冲

     NOP

     NOP

     DJNZ      R7,AD_13    ;循环8次

     MOV      R7,#8 

     CJNE      A,B,LIGHT   ;数据校验

    MOV A,B                 

     MOV DPTR,#TAB5        ;

     MOVC A,@A+DPTR        ;

     MOV 72H,A             ;将高位送72H单元

     MOV A,B                  

     MOV DPTR,#TAB6        ;

     MOVC A,@A+DPTR        ;

     MOV 73H,A             ;降低为送73H单元

     SETB     ADCS         ;拉高/CS端

     CLR       ADCLK       ;拉低CLK端

     SETB     ADDO         ;拉高数据端,回到初始状态

;========送数给显示子程序段========

    MOV   70H,72H

    MOV   71H,73H

    MOV   ADDR,#95H

    MOV   DPTR,#WEL_3 

    LCALL W_LINE1

;=======送数给ADC0832的子程序========

 MOV A,33H            ;判断有没有中断,

    JZ  L7                ;没有中断就转。

    MOV 33H,#00H          ;清中断标志

L2:   MOV A,30H           ;

      CJNE A,#0AH,L3      ;判断是否为点号,不为点号就转。

      JMP L7              ;为点好就保持原来送数。

L3:CJNE A,#0BH,L4         ;判断是否为Enter键,不为就转。

   MOV 32H,24H

   MOV 31H,25H            ;

L9:MOV 24H,#00H           ;

   MOV 25H,#00H           ;

   MOV R2,#01H            ;置送数时送数空间不同的标志位。

L7:   MOV A,32H           ;将键盘的两数相与,查表,然后送数。

      SWAP A              ;

      ORL A, 31H              ;

      MOV DPTR,#TAB4      ;

      MOVC A,@A+DPTR      ;

     CLR P2.0

      MOV P0,A

      LJMP L6             ;

L4:CJNE R2,#01H,L5        ;将键盘的第一位数送给24H

    MOV A,30H             ;

    MOV 24H,A             ;

    DEC R2                ;清零送数时送数空间不同的标志位。

    JMP L7                ;

L5:MOV A,30H              ;将键盘的第二位数送给25H

   MOV 25H,A              ;

   MOV R2,#01H            ;置送数时送数空间不同的标志位。

   JMP L7                 ;                                                                                                                               

L6:RET

;十六进制数转换成为2进制BCD码的码表。

;       0   1   2   3   4   5   6   7   8  9

TAB5:DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H;0

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

     DB 01H,01H,01H,01H,01H,01H,01H,01H,01H,01H;1

     DB 01H,01H,01H,01H,01H,01H,01H,01H,01H,01H

     DB 02H,02H,02H,02H,02H,02H,02H,02H,02H,02H;2

     DB 02H,02H,02H,02H,02H,02H,02H,02H,02H,02H

     DB 03H,03H,03H,03H,03H,03H,03H,03H,03H,03H;3

     DB 03H,03H,03H,03H,03H,03H,03H,03H,03H,03H

     DB 04H,04H,04H,04H,04H,04H,04H,04H,04H,04H;

数控直流稳压电源(5)相关推荐
最新推荐
热门推荐