|
通過(guò)masm軟件運(yùn)行該程序
單片機(jī)源程序如下:
- STACK SEGMENT STACK 'STACK'
- DW 128 DUP(?)
- STACK ENDS
- DATA SEGMENT;定義8255和8253各端口地址數(shù)據(jù)
- 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,初始計(jì)數(shù)值為10000,周期為0.01s
- MOV DX,CON8253;通道2初始化完成,工作方式3,計(jì)數(shù)初值為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;初始化各燈的狀態(tài)
- 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的計(jì)數(shù)值為3000,也就是30S
- LOP30_1:
- MOV AL,0;掃描PC4口是否有高電平輸入
- MOV DX,CON8255
- MOV AL,88H;88
- OUT DX,AL;改PC口為輸入方式,準(zhǔn)備讀入PC4的值
- MOV DX,PC8255
- IN AL,DX
- AND AL,10H;取PC4的值
- CMP AL,10H
- JNZ LOP30_1;未檢測(cè)到高電平則繼續(xù)循環(huán)檢測(cè)
- 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黃燈開(kāi)始閃
- MOV CX,0
- LOP5_1:
- MOV DX,CON8255;檢測(cè)PC7高電平
- MOV AL,88H
- OUT DX,AL;改PC口為輸入方式,準(zhǔn)備讀入PC7
- MOV DX,PC8255
- IN AL,DX
- AND AL,80H;取PC7
- CMP AL,80H
- JNZ LOP5_1;如果不是高電平則不需要進(jìn)行延時(shí)
- 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;重新寫(xiě)入方式控制字,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的計(jì)數(shù)值為3000,也就是30S
- LOP30_2:
- MOV AL,0;掃描PC4口是否有高電平輸入
- MOV DX,CON8255
- MOV AL,88H
- OUT DX,AL;改PC口為輸入方式,準(zhǔn)備讀入PC4的值
- MOV DX,PC8255
- IN AL,DX
- AND AL,10H;取PC4的值
- CMP AL,10H
- JNZ LOP30_2;未檢測(cè)到高電平則繼續(xù)循環(huán)檢測(cè)
- 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黃燈開(kāi)始閃爍
- MOV CX,0
- LOP5_2:
- MOV DX,CON8255;檢測(cè)PC7高電平
- MOV AL,88H
- OUT DX,AL;改PC口為輸入方式,準(zhǔn)備讀入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;下一次循環(huán)
-
- DELAY PROC NEAR
- MOV DX,120;延時(shí)子程序
- 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
復(fù)制代碼
所有資料51hei提供下載:
123456.rar
(1.15 KB, 下載次數(shù): 7)
2018-11-18 16:23 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
|