短学期微机接口课程设计
要求
采樣:系統實時采樣溫度和壓力值,根據壓力大小確定設定溫度,對應?? 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
總結
以上是生活随笔為你收集整理的短学期微机接口课程设计的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++虚函数的实现
- 下一篇: 似乎在梦中见过的样子 (KMP)