短学期微机接口课程设计

要求
采样:系统实时采样温度和压力值,根据压力大小确定设定温度,对应   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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值