短学期微机接口课程设计
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
采样:系统实时采样温度和压力值,根据压力大小确定设定温度,对应 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
相关文章推荐
- 微机接口课程设计报告-模拟汽车控制系统
- 微机原理课程设计-接口芯片编程记录
- 微机原理课程设计32位汇编学习之四(显示字符串之特殊字体)
- 2015-2016-1学期 《信息安全系统设计基础》课程总结
- VC++课程设计:动漫新番信息管理系统(MFC+数据库ODBC接口)+外加两个副作品
- 课程设计:用wininet接口写的FTP Client
- 08年春季学期06计大班软件工程课程设计要求
- 大二第一学期期末课程设计 2015.12.28
- 微机原理课程设计——步进电机工作原理模拟程序设计
- 高煥堂的课程:软件接口设计的技术与艺术
- lab8000接口课程设计-步进电机控制
- 普通高校接口技术课程设计题目
- 微机接口课设——设计一个模拟汽车控制系统
- 这学期的课程设计,用java写的词法分析器
- 微机原理课程设计32位汇编学习之二(创建简单的窗口)
- 接口技术课程设计 Lab8000实现交通灯控制系统
- webUploader react 接口设计
- 课程设计---约瑟夫环【没看】
- 操作系统课程设计报告--虚拟文件系统的实现后附源代码
- JAVA设计模式之(一)接口模式