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

📄 noname1.asm

📁 交流调功器的程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
WP       EQU  P1.0
      SCL       EQU  P1.1
      SDA       EQU  P1.2
      DIR       EQU  P1.7
      SHORT     BIT  00H   ;短路标志位
      CUT       BIT  01H   ;断路标志位
      TIME      BIT  02H   ;过零标志位
      FLAG      BIT  03H   ;6.7MS时间到
      COUNTER   DATA 7FH   ;数据线上的位计数器
      COUNTER1  DATA 7EH   ;延时计数器
      RI2CDATA  DATA 7DH   ;从24c02读出的数据暂存器
      WI2CDATA  DATA 7CH   ;向24c02写入的数据暂存器
      QADDR     DATA 7BH   ;24c02的地址寄存器
      CADDR     DATA 7AH   ;24c02中的存储器地址
      MADDR     DATA 79H   ;单片机内存地址
      ADDR      DATA 77H   ;本机地址寄存器
      COUNT     DATA 78H   ;触发个数计数器
      MCOUNT    DATA 2CH   ;移位计数器
;=====================================================================================
       ORG 000H
       SJMP MAIN
       ORG 0003H
       LJMP INTSVE
       ORG  000BH
      ; LJMP T0SVE
       ORG  0023H
      ; LJMP RXSVE
 MAIN: MOV   SP,  #60H      ;设立栈底
       MOV   P1,  #0FFH     ;初始化P1
       CLR   P1.3           ;点亮CPU指示灯
       MOV   20H,#0FFH      ;初始化标志位区
     ; LCALL R4I2C          ;读出4个24C02的验证数据
     ; LCALL JUDGE          ;判断,不相同或为零则停机,否则减一
     ; LCALL W4I2C          ;向4个24C02写入验证数据
     ; LCALL READ24         ;读出加热数据
      LCALL INITIAL        ;根据拨码开关的状态确定本机地址和485通信的波特率
       SETB EX0
       setb time
 he:      JB   TIME, $            ;第一相过零
       ;SETB TR0                ;第一个6.7ms计时开始
        SETB TIME               ;置位
      MOV A,#00H
      MOV DPTR,#07FFFH         ;第一块板的地址送入DPTR中
      MOVX @DPTR,A            ;触发可控硅
     ; lcall D1MS      
      ;MOV A,#0ffh
      ;MOV DPTR,#07FFFH         ;第一块板的地址送入DPTR中
      ;MOVX @DPTR,A            ;触发可控硅
      JB   TIME, $            ;第一相过零
      ;SETB TR0                ;第一个6.7ms计时开始
        SETB TIME               ;置位
      MOV A,#0ffH
      MOV DPTR,#07FFFH         ;第一块板的地址送入DPTR中
      MOVX @DPTR,A            ;触发可控硅
      ;lcall D1MS      
      ;MOV A,#0ffh
     ;MOV DPTR,#0dFFFH         ;第一块板的地址送入DPTR中
     ; MOVX @DPTR,A            ;触发可控硅
      sjmp he

D1MS :MOV R4,#24
DL   :MOV R5,#0FAH
DL0  :DJNZ R5,DL0
      DJNZ R4,DL
      RET
      ;====================================================================================
INITIAL:MOV DPTR,#0FDFFH     ;取拨码开关的地址
        MOVX A,@DPTR        ;将拨码开关的状态送入A
        PUSH  ACC           ;将状态备份
        ANL  A,#3FH
        MOV  ADDR,A         ;将拨码开关的低六位作为本机地址存入地址寄存器
        POP ACC             ;取出备份
        ANL A,#0C0H
        SWAP  A
        RR A
        RR A                ;取出拨码开关的高两位用于波特率的的选择
        MOV TMOD,#21H       ;T0工作在方式1,T1工作在方式2
        MOV PCON,#00H       ;波特率不加倍
        CJNE A,#00H,IN1     ;拨码开关的低两位为00则波特率设为2400
        MOV TL1,#0F4H       ;
        MOV TH1,#0F4H
        SJMP IN4
IN1:    CJNE A,#01H,IN2     ;拨码开关的低两位为01则波特率设为4800
        MOV TL1,#0FAH       ;
        MOV TH1,#0FAH
        SJMP IN4
IN2:    CJNE A,#02H,IN3     ;拨码开关的低两位为10则波特率设为9600
        MOV TL1,#0FDH       ;
        MOV TH1,#0FDH
        SJMP IN4
IN3:    MOV PCON,#80H       ;拨码开关的低两位为11则波特率设为19200
        MOV TL1,#0FDH
        MOV TH1,#0FDH
IN4:    MOV  SCON,#0F0H     ;串口工作在方式3,允许串口接收
        MOV  TCON ,#01H     ;外部中断负边沿触发
        MOV  TH0  ,#0E5H
        MOV  TL0  ,#0F6H    ;T0 6.7秒的初始化
        MOV  IE,#00H        ;
        MOV  IP,#01H        ;串口中断高优先级
        SETB ES             ;开串口中断
        SETB ET0            ;开T0中断
       ; SETB EX0            ;开外部中断0
        SETB TR1            ;启动T1
        SETB EA             ;开中断

        RET
        ;==============================================================
        INTSVE:CLR TIME
       RETI
        end
      ;mov a,#50
     ; mov 08h,a
     ; mov 09h,a
     ; mov 0ah,a
     ; mov 0bh,a
     ; mov 0ch,a
     ; mov 0dh,a
     ; mov 0eh,a
      ;mov 0fh,#0
     ; mov 10h,a
     ; mov 11h,a
     ; mov 12h,a
     ; mov 13h,a
     ; mov 14h,a
     ; mov 15h,a
     ;mov 16h,a
     ; mov 17h,#0
      ;mov 18h,a
     ; mov 19h,a
     ; mov 1ah,a
     ; mov 1bh,a
     ; mov 1ch,a
     ; mov 1dh,a
      ;mov 1eh,a
      ;mov 1fh,#0
      SETB  TIME
      SETB  FLAG
REDO :MOV  COUNT,#00H
      MOV  MCOUNT,#00H
      ;LCALL GETAD
      ;LCALL GETVA
      ;LCALL OUTVA
      INC   MCOUNT
      MOV   6CH,#00H
      MOV   6DH,#00H
      MOV   6EH,#00H
      MOV   R0,#21H        ;将第一次状态数据区首地址送入R0
      SETB EX0            ;开外部中断0
      LCALL COLLECT        ;采集三块电路板的状态
      LCALL OUTVA
      INC   MCOUNT
GO2:  LCALL TRIGGER
      INC   COUNT
      MOV   A, MCOUNT
      CJNE  A,#08H,GO1
      MOV   MCOUNT,#00H
      LCALL GETVA
GO1:  LCALL OUTVA
      INC   MCOUNT
      MOV   A,COUNT
      CJNE  A,#63H,GO2
      MOV A,#0FFH
      MOV 6CH,A
      MOV 6DH,A
      MOV 6EH,A
      MOV   R0,#24H        ;将第二次状态数据区首地址送入R0
      LCALL COLLECT        ;采集三块电路板的状态
      LCALL DEAL           ;对电路状态进行判断处理
      LJMP  REDO
;====================================================================================
INITIAL:MOV DPTR,#0FDFFH     ;取拨码开关的地址
        MOVX A,@DPTR        ;将拨码开关的状态送入A
        PUSH  ACC           ;将状态备份
        ANL  A,#3FH
        MOV  ADDR,A         ;将拨码开关的低六位作为本机地址存入地址寄存器
        POP ACC             ;取出备份
        ANL A,#0C0H
        SWAP  A
        RR A
        RR A                ;取出拨码开关的高两位用于波特率的的选择
        MOV TMOD,#21H       ;T0工作在方式1,T1工作在方式2
        MOV PCON,#00H       ;波特率不加倍
        CJNE A,#00H,IN1     ;拨码开关的低两位为00则波特率设为2400
        MOV TL1,#0F4H       ;
        MOV TH1,#0F4H
        SJMP IN4
IN1:    CJNE A,#01H,IN2     ;拨码开关的低两位为01则波特率设为4800
        MOV TL1,#0FAH       ;
        MOV TH1,#0FAH
        SJMP IN4
IN2:    CJNE A,#02H,IN3     ;拨码开关的低两位为10则波特率设为9600
        MOV TL1,#0FDH       ;
        MOV TH1,#0FDH
        SJMP IN4
IN3:    MOV PCON,#80H       ;拨码开关的低两位为11则波特率设为19200
        MOV TL1,#0FDH
        MOV TH1,#0FDH
IN4:    MOV  SCON,#0F0H     ;串口工作在方式3,允许串口接收
        MOV  TCON ,#01H     ;外部中断负边沿触发
        MOV  TH0  ,#0E5H
        MOV  TL0  ,#0F6H    ;T0 6.7秒的初始化
        MOV  IE,#00H        ;
        MOV  IP,#01H        ;串口中断高优先级
        SETB ES             ;开串口中断
        SETB ET0            ;开T0中断
       ; SETB EX0            ;开外部中断0
        SETB TR1            ;启动T1
        SETB EA             ;开中断
        RET
;作用:根据拨码开关的状态确定本机地址和485通信的波特率,并完成串口和20MS定时器的初始化
;=====================================================================================
;         延时子程序
SOMENOP : MOV COUNTER1,#00H
SOMENOP1: DJNZ COUNTER1,SOMENOP1
          RET
;==================================================

START   : CLR   WP       ;取消写保护
          SETB  SDA      ;释放数据线
          SETB  SCL      ;将时钟线置高
          LCALL SOMENOP  ;调用延时子程序
          CLR  SDA       ;SDA产生一个由高到低的跳变
          LCALL SOMENOP  ;调用延时子程序
          CLR   SCL      ;将时钟线置低
          RET
;作用:用于产生总线上的数据传输起始信号
;入口:无
;出口:无
;子程序调用:SOMENOP
;寄存器占用:无
;===================================================

STOP    :SETB SCL      ;将时钟线置高
         CLR  SDA      ;将数据线线置低
         LCALL SOMENOP ;调用延时子程序
         SETB  SDA     ;SDA产生一个由低到高的跳变
         LCALL SOMENOP ;调用延时子程序
         SETB   WP            ;设置写保护
         RET
;作用:用于产生总线上的数据传输结束信号
;入口:无
;出口: 无
;子程序调用:SOMENOP
;寄存器占用:无
;===================================================

WACK    :CLR SCL       ;将时钟线置低
         SETB SDA      ;释放数据线
         LCALL SOMENOP ;延时等待ACK信号出现
         SETB SCL      ;将时钟线置高
         LCALL SOMENOP ;准备读取ACK信号
         MOV C,SDA     ;读取应答信号
         JC WACK       ;判断应答信号
         CLR SDA       ;将数据线线置低
         CLR SCL       ;将时钟线置低
         RET
;作用:等待接受器发来应答信号
;入口:无
;出口: 无
;子程序调用:SOMENOP
;寄存器占用:PSW
;=============================================

ACK     :CLR SDA        ;产生低电平的ACK信号
         LCALL SOMENOP  ;延时
         SETB  SCL      ;将时钟线置高
         LCALL SOMENOP  ;延时
         CLR  SCL       ;将时钟线置低

⌨️ 快捷键说明

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