短学期微机接口课程设计

要求
采样:系统实时采样温度和压力值,根据压力大小确定设定温度,对应   t= p/20 + 40  (t为设定温度,p为压力值).如 p=500克,则 t 为65度, 通过温度传感器采集实时温度。
控制:用加温和冷却使实时温度与设定温度拟合.
显示: 在装置的段码显示器动态显示设定及实时温度。

 

DATA  SEGMENT
     XH  DB        01H,01H,01H,10H         ; 显示缓存8个单元
      DB        10H,00H,00H,00H
    ;STATUS  DB        00H         ;00H:停机,0FFH:运行
   SSWD  DW        00H         ;实时温度
   SDWD  DW   00H   ;设定温度
     DM  DB        3FH,06H,5BH,4FH,66H,6DH ;段码表
      DB        7DH,07H,7FH,6FH,79H,72H,73H
      DB        37H,3FH,30H,40H
   PA55  EQU       218H ;8255(1)
   PB55  EQU       219H
      PC55  EQU       21AH
    P55CTL  EQU       21BH
     PA255  EQU       208H ;8255(2)
     PB255  EQU       209H
     PC255  EQU       20AH
   P255CTL  EQU       20BH
   YAAD  EQU       230H
   WDAD  EQU       231H
DATA  ENDS
;############# ################# 主程序 ######################
CODE  SEGMENT   'code'
     ASSUME    CS:CODE,DS:DATA,SS:DATA
 START:
        MOV       AX,DATA
        MOV       DS,AX
        ;初始化变量值
        MOV       DX,P55CTL   ;初始化8255(1)工作方式
        MOV       AL,90H      ;10010000(A口方式0输入,B口和C口方式0输出)
        OUT       DX,AL
        MOV       DX,P255CTL  ;初始化8255(2)工作方式
        MOV       AL,80H      ;10000000(A口和B口和C口方式0输出)
        OUT       DX,AL
        MOV       DX,PA255    ; 8255(2)A口清零
        IN        AL,DX
        MOV       AH,AL       ;将原AL的值保存在AH中
        AND       AL,00H     ;00H
        OUT       DX,AL
        MOV       DX,PB255    ;8255(2)B口清零
        IN        AL,DX
        MOV       AH,AL
        AND       AL,00H
        OUT       DX,AL
     MOV       DX,PC255    ;8255(2)C口清零
        IN        AL,DX
        MOV       AH,AL
        AND       AL,00H
        OUT       DX,AL
        ;初始化风扇和加热装置
        CALL      INIT                  
   MYRUN:
        NOP
        CALL      AD
  CALL      DIVSSWDTO3NUMBER
        CALL    YLAD
  CALL      DIVSDWDTO3NUMBER
 CALL   CHECKTEMPERATURE
  CALL DISPSTRING   
  JMP       MYRUN
    MYEXIT:
  MOV       AH,4CH
        INT       21H
;*************************** divide real time temperature ****************
DIVSSWDTO3NUMBER  PROC      NEAR
     PUSH      AX
     PUSH      BX
     PUSH      CX
     PUSH      DX
     MOV       SI,OFFSET XH
     MOV       AX,SSWD
     MOV       DX,00H
     MOV       BX,10H             
     DIV       BX
     MOV       BYTE PTR[SI+7],DL
     DIV       BX
     MOV       BYTE PTR[SI+6],DL
     DIV       BX
     MOV       BYTE PTR[SI+5],DL
     POP       DX
     POP       CX
     POP       BX
     POP       AX
     RET
DIVSSWDTO3NUMBER  ENDP

;*************************** divide preset temperature ****************
DIVSDWDTO3NUMBER  PROC      NEAR
     PUSH      AX
     PUSH      BX
     PUSH      CX
     PUSH      DX
     MOV       SI,OFFSET XH
     MOV       AX,SDWD
     MOV       DX,00H
     MOV       BX,10H             
     DIV       BX
     MOV       BYTE PTR[SI+2],DL
     DIV       BX
     MOV       BYTE PTR[SI+1],DL
     DIV       BX
     MOV       BYTE PTR[SI+0],DL
     POP       DX
     POP       CX
     POP       BX
     POP       AX
     RET
DIVSDWDTO3NUMBER  ENDP

;*********************** check temperature ****************************
CHECKTEMPERATURE  PROC      NEAR
        PUSH      AX
        PUSH      BX
        PUSH      CX
        PUSH      DX              
  MOV    AX,SDWD
  SUB           AX,20H
  CMP       AX,SSWD
  JNA    GO
  CALL        MYDELAY
  CALL        MYDELAY
  CALL      HEATING
        JMP       CTEXIT
 GO: 
  ADD           AX,40H
  CMP       AX,SSWD
  JNB         WD
  
        CALL      COOLING
        JMP       CTEXIT
      WD: 
  CALL      INIT
     CTEXIT:
        POP       DX
        POP       CX
        POP       BX
        POP       AX             
        RET
CHECKTEMPERATURE  ENDP

;***************************** AD *********************************
;温度采集
AD  PROC      NEAR
        MOV       BX,00H
        MOV       CX,08H      ;采样8次
    BB1:
        MOV       DX,WDAD     ;启动AD采样
        MOV       AX,00H
        OUT       DX,AL
        CALL      DISPSTRING  ;等待AD转换
        IN        AL,DX       ;读取AD值
        ADC       BX,AX       ;求平均值
        LOOP      BB1
        RCR       BX,1
        RCR       BX,1
        RCR       BX,1        ;除8
        MOV       AL,3
        MUL       BL          ;一位等于0.3度
        CALL      CHANGTOBCD  ;转换成BCD码
        MOV       SSWD,AX
        RET
AD  ENDP

;**************************************YLAD**************************************************
;压力检测并转换成设定温度
YLAD PROC NEAR
     PUSH      AX
     PUSH      BX
     PUSH      CX
     PUSH      DX
  MOV  BX,0
  MOV  CX,04H   ;采样4次
 BB: MOV  DX,YAAD   ;启动A/D采样
        MOV  AX,0
        OUT  DX,AL
        CALL DISPSTRING   ;等待A/D转换
        IN  AL,DX      ;读A/D值
        ADC  BX,AX   ;求平均值
        LOOP BB
        MOV  AX,BX
        RCR  AX,1
  MOV   BL,20
  DIV   BL
  AND     AH,00H
  ADD     AX,40
  CALL CHANGTOBCD  ;转换成BCD码
  MOV     BL,10H
  MUL     BL
  MOV     SDWD,AX
  POP       DX
  POP       CX
  POP       BX
  POP       AX
  RET
YLAD  ENDP

;***************************** Chang To BCD ************************
CHANGTOBCD  PROC      NEAR
        PUSH      DX
        MOV       BX,AX
        MOV       AX,00H
        MOV       CL,10H
    BB2:
        CLC
        RCL       BX,1
        ADC       AL,AL
        DAA
        MOV       CH,AL
        MOV       AL,AH
        ADC       AL,AL
        DAA
        MOV       AH,AL
        MOV       AL,CH
        DEC       CL
        JNZ       BB2
        POP       DX
        RET
CHANGTOBCD  ENDP
;*************************** cooling *****************************
COOLING  PROC      NEAR
 MOV   DX,P255CTL
       MOV    AL,00001110B
 OUT       DX,AL
  MOV    AL,00001101B
 OUT       DX,AL
    RET
COOLING  ENDP

;***************************** heating ***************************
HEATING  PROC      NEAR
     MOV   DX,P255CTL
    MOV    AL,00001100B
 OUT       DX,AL
       MOV    AL,00001111B
 OUT       DX,AL
    RET
HEATING  ENDP
;***************************** init ********************
;初始化:关闭风扇和加热装置
INIT  PROC      NEAR
    MOV       DX,P255CTL
 MOV    AL,00001111B
 OUT       DX,AL
 MOV    AL,00001101B
 OUT       DX,AL       
    RET
INIT  ENDP

;********** **********8段显示**********************************
DISPSTRING  PROC      NEAR
              PUSH      AX
              PUSH      BX
              PUSH      CX
              PUSH      DX
              MOV       AL,07H      ;选七段显示器,把扫描灯位的控制信号送IO端口
              MOV       DX,PB55
              OUT       DX,AL
              MOV       SI,OFFSET XH
              MOV       AL,[SI]     ;把相应的八段码送给AL指向的XH单元
              MOV       BX,OFFSET DM
              XLAT
              MOV       DX,PC55     ;把相应的显示值输出,即段码送IO端口
              OUT       DX,AL
              CALL      MYDELAY
              MOV       AL,06H
              MOV       DX,PB55
              OUT       DX,AL
              INC       SI
              MOV       AL,[SI]
              MOV       BX,OFFSET DM
              XLAT
              MOV       DX,PC55
     OR     AL,80H  ;加小数点
              OUT       DX,AL
              CALL      MYDELAY
              MOV       AL,05H
              MOV       DX,PB55
              OUT       DX,AL
              INC       SI
              MOV       AL,[SI]
              MOV       BX,OFFSET DM
              XLAT
              MOV       DX,PC55
              OUT       DX,AL
              CALL      MYDELAY
              MOV       AL,04H
              MOV       DX,PB55
              OUT       DX,AL
              INC       SI
              MOV       AL,[SI]
              MOV       BX,OFFSET DM
              XLAT
              MOV       DX,PC55
              OUT       DX,AL
              CALL      MYDELAY
              MOV       AL,03H
              MOV       DX,PB55
              OUT       DX,AL
              INC       SI
              MOV       AL,[SI]
              MOV       BX,OFFSET DM
              XLAT
              MOV       DX,PC55
              OUT       DX,AL
              CALL      MYDELAY
              MOV       AL,02H
              MOV       DX,PB55
              OUT       DX,AL
              INC       SI
              MOV       AL,[SI]
              MOV       BX,OFFSET DM
              XLAT
              MOV       DX,PC55
              OUT       DX,AL
              CALL      MYDELAY
              MOV       AL,01H
              MOV       DX,PB55
              OUT       DX,AL
              INC       SI
              MOV       AL,[SI]
              MOV       BX,OFFSET DM
              XLAT
     OR     AL,80H   ;加小数点
              MOV       DX,PC55
              OUT       DX,AL
              CALL      MYDELAY
              MOV       AL,00H
              MOV       DX,PB55
              OUT       DX,AL
              INC       SI
              MOV       AL,[SI]
              MOV       BX,OFFSET DM
              XLAT
              MOV       DX,PC55
              OUT       DX,AL
              CALL      MYDELAY
              POP       DX
              POP       CX
              POP       BX
              POP       AX           
              RET
DISPSTRING  ENDP

 ;************************* my delay程序 ********************************
MYDELAY  PROC      NEAR              
  PUSH      BX
  PUSH      CX
  MOV       BX,0008H    ;延时 0008H
  MEE:  MOV       CX,07DFFH   ;07DFFH
  MCC:  NOP
        LOOP      MCC
        DEC       BX
        JNZ       MEE
        POP       CX
        POP       BX                       
        RET
MYDELAY  ENDP

CODE  ENDS
END       START

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值