;系统主程序
;系统译码器地址分配
P8255 EQU 0F103H
R6116 EQU 0F102H
P74LS373 EQU 0F101H
P80C51 EQU 0F100H
;外部RAM地址分配
CDATA EQU 00H ;数据采集单元首地址
SETTEMP EQU 40H ;设定速度首地址
TEMPMAX EQU 80H ;报警给定值首地址
TAB EQU 0C0H ; 字型码表首地址
;内部RAM地址分配
ALARMAX EQU 00H ;限报警标志首地址
BUFF EQU 24H ; 数据缓冲区
DPLBUFF EQU 25H ;显示缓冲区
COUNT EQU -10 ;定时量0.1s
ORG 0000H
JMP MAIN
ORG 0003H
LJMP INTT0
ORG 000BH
LJMP INTT1
;主程序
ORG 0100H
MAIN: MOV SP, #60H
MOV A, #80H ;设置80C51工作方式
MOV DPTR, #P80C51
MOVX @DPTR, A
MOV 20H, #00H ;清报警标志单元
;清数据采集单元
MOV R0, #00H
MOV R1, #50H
MOV A, #00H
MOV P2, #0F0H
CLEAR1: MOVX @R0,A
INC R0
;清显示及缓冲区
MOV A, #00H ;清显示缓冲单元
MOV CHADDR, A
MOV COUNT, A
MOV BUFF, A
MOV TMOD, #15H ;设T0,T1工作方式
MOV TH1, #3CH ;装入T1时间常数
MOV TL1, #0BH
SETB TR1
MOV TH0, #00H ;装入T0时间常数
MOV TL0, #00H
SETB TR0
SETB ET0
SETB ET1
SETB EA ;调用数据采样子程序
LCALL DESPLAY ;调显示子程序
LCALL ALARM ;输出报警指示灯
HERE: AJMP HERE
;主要子程序清单
;调用键盘子程序
START: MOV R0, #0
MOV R1, #4
MOV R2, #FEH
SCAN: MOV A, R2
MOV P2, A
;ROW0
JNB P2.0, KEYIN
INC R0
;ROW1
JNB P2.1,KEYIN
INC R0
;ROW2
JNB P2.2,KEYIN
INC R0
;NEXT COLUMN
MOV A, R2
RL A
MOV R2, A
DJNZ R1, SCAN
JMP START
KEYIN: CALL DEBOUNCE
MOV A , R0
DA A
MOV P1, A
JMP STRAT
DEBOUNCE: MOV R7, #40
D1: MOV R6, #200
DJNZ R6, $
DJNZ R7, D1
RET
END
;显示子程序
ORG 0300H
DESPLAY: MOV SCON, #00H ;设定串行工作模式为0
MOV R1, #04H ;数码管显示的位数4
MOV R0, #00H ;字型码首地址偏移量
MOV DPTR, #TAB ;字型码表首地址
LOOP: MOV A, R0
MOVC A, @A+DPTR ;取出字型码
MOV SBUF, A ;发送
WAIT: JNB TI, WAIT ;等待一帧发送完毕
CLR TI
INC R0 ;指向下一字型码
ACALL DL10 ;延时
DJNZ R1, LOOP
ROUT2:
MOVX A, @DPTR ;读入高8位
MOV P2, #0F0H
MOVX @R0, A ;存放高8位
INC DPTR ;使A0=1
INC R0 ;求低4位存放地址
MOVX A, @DPTR ;读低4位
MOVX @R0, A ;存放低4位
MOV A, R0 ;求存放下一个通道数据地址
ADD A, #09H
MOV R0, A
MOV A, CHADDR
MOV TH0, #3CH ;重新装入定时器0时间常数
MOV TL0, #0B0H
SETB TR0
RET
DL10: MOV R7, #01H
BRANCH: MOV R0, BUFF ;计数下一次采样地址
INC R0
INC R0
AJMP ROUT0
ORG 0400H
;1.2.2 超速报警程序清单
;根据在图4-7中所示的报警电路部分所叙述的那样,可写出超速报警程序如下:
ALARM: LCALL TMAXCOMP ;超速报警检查
MOV A, 20H ;输出超速度报警信号模型
CPL A ;求正常信号模型
MOV DPTR, #P80C51
MOVX @DPTR, A
RET
;超速报警比较子程序
TMAXCOMP: MOV R0 , #TEMPMAX ;取超速报警首地址
MOV R1, #CDATA
MOV R3, #08H
MOV R2, #02H
COMP1: MOVX A, @R1
MOV BUFF, A
MOVX A, @R0
CJNE A, BUFF,COMP2 ;判断上限报警值与采样
;高8位是否相等
INC R0 ;求低8位数地址
INC R1
DJNZ R2, COMP1
SETB SETTEMP ;相等,置报警标志
COMP4: MOV A, 20H
RL A
MOV 20H, A ;存入报警标志单元
RET ;清报警标志位
COMP3: CLR TEMPMAX
AJMP COMP4
COMP2: JNC COMP3 ;置报警标志位
|