📄 main.asm
字号:
INCLUDE "SUBDEF.ASM"
ORG 0000H
AJMP MAIN
ORG 0003H
AJMP NULINIT
;
ORG 000BH ; 定时 器T0 中断
AJMP TIMINIT
;
ORG 0013H
AJMP NULINIT
ORG 001BH ; 定时器T1 中断
AJMP NULINIT
ORG 0023H ; 串行口 中断
AJMP COMINIT
ORG 0100H
MAIN: MOV SP,#068H
MOV P0,#00H
MOV P1,#0FFH
MOV P2,#00H
SETB P3.5
SETB P3.2
SETB P3.3
;
MOV SCON,#0D8H ; 串行口 工作方式3
MOV PCON,#080H ; SMOD=1
MOV TMOD,#21H ; 定时器T0 工作方式1 定时器T1工作方式2
;
MOV TL0,#018H ; 定时器1ms 中断
MOV TH0,#0FCH
;
MOV TH1,#0FEH ;
MOV TL1,#0FEH
;
MOV IE,#012H ; 定时器T0 串行口 开中断
;
MOV PSW,#00H ; 使用0组寄存器
;
SETB P3.0
MOV A,SBUF
;
SETB EA
SETB TR0 ; 启动定时器T0
SETB TR1 ; 启动定时器T1
CLR TXDCTR ; 485接收允许
;
;
LCALL INIT_PRO
;
LCALL CLR_VIS ; 清显示
CLR biFRMFS ; 清闪烁
MOV yMSECH,#00H
MOV yMSECL,#00H
;
MOV 50H,#05H
MOV 51H,#00H
MOV 52H,#000H
MOV 53H,#24H
MOV 54H,#080H
MOV 55H,#081H
CLR C
MOV A,yCOMADR
RRC A
INC A
MOV B,#10
DIV AB
MOV 56H,A
MOV 57H,B
LCALL VIS_BUF ; 显示50H~5AH字符
CLR LEDCLK
LCALL VIS_PLAY
;
;
PROSTR: CLR C
;
LCALL VIS_PLAY
;
JNB biCOMPRO,PROSTR1
LCALL COM_PRO
;
PROSTR1:
LJMP PROSTR
;
;
;
;
;
;*************************************************
; 冗余中断
;*************************************************
NULINIT: RETI
;
;
;
;*************************************************
; TIMINIT 定时器T0 1ms中断
; 使用3组寄存器
;*************************************************
TIMINIT: PUSH ACC
PUSH PSW
PUSH DPL
PUSH DPH
;
MOV TL0,#018H ; 定时器1ms 中断
MOV TH0,#0FCH
CLR C
;
; 1MS计时器+1
INC yMSECL
MOV A,yMSECL
JNZ TIMEND
INC yMSECH
TIMINIT0:
;
TIMINIT1: JNB biFRMFS,TIMEND
MOV A,yMSECH
JNB ACC.1,TIMINIT2
JB biFRMBK,TIMEND
SETB biFRMBK
SJMP TIMEND
TIMINIT2: JNB biFRMBK,TIMEND
CLR biFRMBK
;
CLR C
MOV A,yFLSHDEL
JZ TIMINIT3
DEC A
MOV yFLSHDEL,A
SJMP TIMEND
;
TIMINIT3: CLR biFRMFS
;
;
;
;
TIMEND: POP DPH
POP DPL
POP PSW
POP ACC
RETI
;
;
;
;
;
;
;****************************************************************
; INIT_PRO 初始化
;****************************************************************
INIT_PRO: CLR C
;
CLR biFRMFS ; 闪烁标志
CLR biFRMBK ; 亮灭标志
;
CLR biEPROM ; 读写E2PROM的A8地址位
CLR biRXDFLG ; 485接收状态 =1 接收到帧头状态 =0 空
CLR biCOMPRO ; 485接收等待处理状态 =1 接收等待处理停止接收 =0 可以接收
CLR biTXDFLG ; 485数据帧发送状态 =1 数据帧发送状态 =0 空
CLR biINFFLG ; 485发送状态 =1 有信息需发送 =0 无
CLR biWR2864 ; 写2864状态 =1 写2864等待状态 =0 空
CLR biF8FLG ; 下传帧标志
CLR biVISFLG ; 显示状态改变
CLR biSTOP
CLR biRXDDA ; 接收数据标志
CLR biDYNA
MOV yDYNA,#00H
;
;
MOV yCOMADR,#01 ; 485通讯 本机地址
;
MOV yWR2864,#00H ; 写2864的延时计数器
;
MOV yMSECH,#00H
MOV yMSECL,#00H
;
;
MOV yVALH,#00H ; 显示分值高2位(BCD码)
MOV yVALL,#00H ; 显示分值高2位(BCD码)
;
MOV yVISFLG,#00H ; 显示状态
;
MOV yWRTBGH,#02H ; 写2864起始高字
MOV yWRTBGL,#00H ; 写2864起始低字
;
CLR C
MOV DPTR,#D_KEYRD
MOVX A,@DPTR
ANL A,#0FH
JNZ INIT_ADR1
MOV A,#49
INIT_ADR1:DEC A
RL A
INC A
MOV yCOMADR,A
;
RET
;
;
;
;
;
;****************************************************************
; INTDELAY ; 上电延时
;****************************************************************
INTDELAY:MOV R7,#00H
INTDELA0:MOV R6,#00H
INTDELA1:NOP
DJNZ R6,INTDELA1
DJNZ R7,INTDELA0
RET
;
;****************************************************************
; WRROM_DLY ; 写2864延时
;****************************************************************
WRROM_DLY: MOV R7,#010H
WRROM_DLY0:MOV R6,#00H
WRROM_DLY1:NOP
DJNZ R6,WRROM_DLY1
DJNZ R7,WRROM_DLY0
RET
;
INCLUDE "COMOK.ASM"
INCLUDE "TAB.ASM"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -