通過masm軟件運行該程序
單片機源程序如下:
- STACK SEGMENT STACK 'STACK'
- DW 128 DUP(?)
- STACK ENDS
- DATA SEGMENT;定義8255和8253各端口地址數據
- PA8255 EQU 3000H
- PB8255 EQU 3200H
- PC8255 EQU 3400H
- CON8255 EQU 3600H
- CLK08253 EQU 3800H
- CLK18253 EQU 3A00H
- CLK28253 EQU 3C00H
- CON8253 EQU 3E00H
- DATA ENDS
- CODE SEGMENT
- ASSUME CS:CODE,DS:DATA,SS:STACK
- START:
- PUSH DS
- SUB AX,AX
- PUSH AX
- MOV AX,DATA
- MOV DS,AX
- MOV DX,CON8253;初始化8253通道0
- MOV AL,36H;00110110
- OUT DX,AL
- MOV DX,CLK08253
- MOV AX,2710H
- OUT DX,AL
- MOV AL,AH
- OUT DX,AL;通道0初始化完成,工作方式3,初始計數值為10000,周期為0.01s
- MOV DX,CON8253;通道2初始化完成,工作方式3,計數初值為100,由clk0輸入以后周期為1s
- MOV AL,96H;10010110
- OUT DX,AL
- MOV DX,CLK28253
- MOV AL,64H
- OUT DX,AL
- MOV DX,CON8255
- MOV AL,80H
- OUT DX,AL;8255初始化完成,A,B,C均工作在方式0,即基本的輸入輸出
- MOV AL,10H;初始化各燈的狀態
- MOV DX,PA8255
- OUT DX,AL;紅燈全亮
- MOV DX,PB8255
- MOV AL,1FH
- OUT DX,AL;黃燈全滅
- MOV DX,PC8255
- MOV AL,1FH
- OUT DX,AL;綠燈全滅
- CALL DELAY
- BEGIN:
- MOV DX,CON8255
- MOV AL,80H
- OUT DX,AL
- MOV AL,10H
- MOV DX,PB8255
- OUT DX,AL
- MOV DX,PA8255
- MOV AL,15H
- OUT DX,AL;05H=00000101,2、4紅燈亮
- MOV DX,PB8255
- MOV AL,1FH
- OUT DX,AL;0FH=00001111,黃燈全滅
- MOV DX,PC8255
- MOV AL,1AH
- OUT DX,AL;OAH=00001010,1,3綠燈亮
- CALL DELAY
- MOV DX,CON8253
- MOV AL,70H
- OUT DX,AL;通道1初始化完成,工作方式0,01110000
- MOV DX,CLK18253
- MOV AX,0BB8H
- OUT DX,AL
- MOV AL,AH
- OUT DX,AL;0BB8H=3000,即通道1的計數值為3000,也就是30S
- LOP30_1:
- MOV AL,0;掃描PC4口是否有高電平輸入
- MOV DX,CON8255
- MOV AL,88H;88
- OUT DX,AL;改PC口為輸入方式,準備讀入PC4的值
- MOV DX,PC8255
- IN AL,DX
- AND AL,10H;取PC4的值
- CMP AL,10H
- JNZ LOP30_1;未檢測到高電平則繼續循環檢測
- MOV DX,CON8255
- MOV AL,80H
- OUT DX,AX
- MOV DX,PA8255
- MOV AL,15H;05H=00000101;2,4紅燈亮
- OUT DX,AL
- MOV DX,PC8255
- MOV AL,1FH;0FH=00001111
- OUT DX,AL;1、3綠燈滅
- MOV DX,PB8255
- MOV AL,1AH;0AH=00001010
- OUT DX,AL;1、3黃燈開始閃
- MOV CX,0
- LOP5_1:
- MOV DX,CON8255;檢測PC7高電平
- MOV AL,88H
- OUT DX,AL;改PC口為輸入方式,準備讀入PC7
- MOV DX,PC8255
- IN AL,DX
- AND AL,80H;取PC7
- CMP AL,80H
- JNZ LOP5_1;如果不是高電平則不需要進行延時
- CALL DELAY
- INC CX
- CMP CX,05H
- JNZ LOP5_1
- MOV DX,CON8255
- MOV AL,80H
- OUT DX,AL
- MOV AL,10H
- MOV DX,PB8255
- OUT DX,AL
- MOV DX,PA8255
- MOV AL,1AH
- OUT DX,AL;0AH=00001010,1、3紅燈亮
- MOV DX,PB8255
- MOV AL,1FH
- OUT DX,AL;0FH=00001111,黃燈全滅
- MOV DX,PC8255
- MOV AL,15H
- OUT DX,AL;05H=00000101,2、4綠燈亮
- CALL DELAY
- MOV DX,CON8253;重新寫入方式控制字,0方式
- MOV AL,70H
- OUT DX,AL
- MOV DX,CLK18253
- MOV AX,0BB8H
- OUT DX,AL
- MOV AL,AH
- OUT DX,AL;0BB8H=3000,即通道1的計數值為3000,也就是30S
- LOP30_2:
- MOV AL,0;掃描PC4口是否有高電平輸入
- MOV DX,CON8255
- MOV AL,88H
- OUT DX,AL;改PC口為輸入方式,準備讀入PC4的值
- MOV DX,PC8255
- IN AL,DX
- AND AL,10H;取PC4的值
- CMP AL,10H
- JNZ LOP30_2;未檢測到高電平則繼續循環檢測
- MOV DX,CON8255
- MOV AL,80H
- OUT DX,AX
- MOV DX,PA8255
- MOV AL,1AH;OAH=00001010,1,3路口紅燈亮
- OUT DX,AL
- MOV DX,PC8255
- MOV AL,1FH;0FH=00001111
- OUT DX,AL;2、4綠燈滅
- MOV DX,PB8255
- MOV AL,15H;05H=00000101
- OUT DX,AL;2、4黃燈開始閃爍
- MOV CX,0
- LOP5_2:
- MOV DX,CON8255;檢測PC7高電平
- MOV AL,88H
- OUT DX,AL;改PC口為輸入方式,準備讀入PC7
- MOV DX,PC8255
- IN AL,DX
- AND AL,80H;取PC7
- CMP AL,80H
- JNZ LOP5_2
- CALL DELAY
- INC CX
- CMP CX,05H
- JNZ LOP5_2
- JMP START;下一次循環
-
- DELAY PROC NEAR
- MOV DX,120;延時子程序
- DELAY1:
- MOV BX,1000
- DELAY2:
- DEC BX
- CMP BX,0
- JNZ DELAY2
- DEC DX
- CMP DX,0
- JNZ DELAY1
- RET
- DELAY ENDP
- CODE ENDS
- END START
復制代碼
所有資料51hei提供下載:
123456.rar
(1.15 KB, 下載次數: 7)
2018-11-18 16:23 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|