您的位置:首页 > 其它

短学期微机接口课程设计

2012-06-28 13:44 288 查看
要求

采样:系统实时采样温度和压力值,根据压力大小确定设定温度,对应 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: