📄 maxbcdasm.asm
字号:
sub #1
SACL 232H
SUB #3300H
BCND L6,EQ ;<=0
B L20
L6: SPLK #3309H,232H
LACL 231H
sub #1
SACL 231H
SUB #2280H
BCND L7,EQ ;<=0
B L20
L7: SPLK #2289H,231H
LACL 230H
sub #1
SACL 230H
SUB #1100H
BCND L8,EQ ;<=0
B L20
L8:
SPLK #1109H,230H
SPLK #2289H,231H
SPLK #3309H,232H
SPLK #4489H,233H
SPLK #5505H,234H
SPLK #6689H,235H
SPLK #7705H,236H
SPLK #8809H,237H
; CALL WRITE_7219
L20:
CALL QS
B WAIT
;-----------------------------------------
QS:
LDP #200H>>7
LACL 230H
SACL 210H
LACL 231H
SACL 211H
LACL 232H
SACL 212H
LACL 233H
SACL 213H
LACL 234H
SACL 214H
LACL 235H
SACL 215H
LACL 236H
SACL 216H
LACL 237H
SACL 217H
LAR AR1,#210H
CALL WRITE_7219
LAR AR1,#211H
CALL WRITE_7219
LAR AR1,#212H
CALL WRITE_7219
LAR AR1,#213H
CALL WRITE_7219
LAR AR1,#214H
CALL WRITE_7219
LAR AR1,#215H
CALL WRITE_7219
LAR AR1,#216H
CALL WRITE_7219
LAR AR1,#217H
CALL WRITE_7219
RET
;(3)系统初始化程序
;*********************************************************
SYSINIT:
SETC INTM
CLRC SXM
CLRC OVM
CLRC CNF ;B0区被配置为数据空间
LDP #0E0H ;指向7000h~7080h区
SPLK #86FEH,SCSR1 ;时钟2倍频,CLKIN=20M,CLKOUT=40M
SPLK #0E8H,WDCR ;不使能WDT
LDP #0
SPLK #0003H,IMR ;使能中断第2级INT2
SPLK #0FFFFH,IFR
LDP #XINT1CR>>7
SPLK #8001H,XINT1CR ;清全部中断标志
RET
;*********************************************************
IOPF_INIT: LDP #MCRC>>7 ;允许输出
LACL MCRC
AND #0FCFFH
SACL MCRC ;IOPF0/IOPF1为IO输出口
LACL PFDATDIR
OR #8302H
AND #0FF7EH
SACL PFDATDIR
RET
;********************************************
IOPB_INIT: LDP #MCRA>>7 ;允许输出
LACL MCRA
AND #00FFH
SACL MCRA ;IOPF0/IOPF1为IO输出口
LACL PBDATDIR
OR #0FF00H
AND #0FFFEH
SACL PFDATDIR
RET
;*********************************************************
IOPE_INIT: LDP #MCRC>>7 ;IOPE1/2/3 为输出
LACL MCRC
AND #0FFF1H
SACL MCRC
LACL PEDATDIR
OR #0E00H
SACL PEDATDIR
RET
;*********************************************************
WRITE_7219: LDP #PEDATDIR>>7 ;AR1存放显示数据,AR2计数
LAR AR2,#15
SBIT0 PEDATDIR,LOAD_7219
CALL DELAY
WRITE1 SBIT0 PEDATDIR,CLK_7219
CALL DELAY
MAR *,AR1
LACC *,16
SFL
SACH *
BCND WRITE2,C
SBIT0 PEDATDIR,DIN_7219
CALL DELAY
B WRITE3
WRITE2 SBIT1 PEDATDIR,DIN_7219
CALL DELAY
WRITE3 SBIT1 PEDATDIR,CLK_7219
CALL DELAY
MAR *,AR2
BANZ WRITE1
SBIT1 PEDATDIR,LOAD_7219
CALL DELAY
RET
;*********************************************************
;entrance temp1
BCDWRITE: LAR AR0,#temp1;temp1 存放实际要显示单元的数据
LAR AR1,#temp2 ;temp2存放显示的位和数据
MAR *,AR0
LACC *
AND #000FH
OR #8800H
MAR *,AR1
;SPLK #0077H,AR1
SACL *
CALL WRITE_7219
MAR *,AR0
LACC *
AND #00F0H
RPT #3
SFR
OR #7700H
MAR *,AR1
SACL *
CALL WRITE_7219
MAR *,AR0
LACC *
AND #0F00H
RPT #7
SFR
OR #6600H
MAR *,AR1
SACL *
CALL WRITE_7219
MAR *,AR0
LACC *
AND #0F000H
RPT #11
SFR
OR #5500H
MAR *,AR1
SACL *
CALL WRITE_7219
;********************************************************* RET
;entrance temp1
ADRESSWRITE: LAR AR0,#temp1;temp1 存放实际要显示单元的数据
LAR AR1,#temp2 ;temp2存放显示的位和数据
MAR *,AR0
LACC *
AND #000FH
OR #4400H
MAR *,AR1
SACL *
CALL WRITE_7219
MAR *,AR0
LACC *
AND #00F0H
RPT #3
SFR
OR #3300H
MAR *,AR1
SACL *
CALL WRITE_7219
MAR *,AR0
LACC *
AND #0F00H
RPT #7
SFR
OR #2200H
MAR *,AR1
SACL *
CALL WRITE_7219
MAR *,AR0
LACC *
AND #0F000H
RPT #11
SFR
OR #1100H
MAR *,AR1
SACL *
CALL WRITE_7219
RET
;*********************************************************
SHUTDOWN: ;LDP #8100H>>7
LAR AR1,#temp1
MAR *,AR1
SPLK #0FF00H,*+
SPLK #0CC00H,*+
LAR AR1,#temp1
CALL WRITE_7219
LAR AR1,#temp2
CALL WRITE_7219
RET
;/*************Init Max7219**********************************************************/
ALLON: ;LDP #8100H>>7
LAR AR1,#temp1
MAR *,AR1
SPLK #0FF0FH,*+
LAR AR1,#temp1
CALL WRITE_7219
RET
DELAY3:
;LDP #200H>>7
;LACC 241H
;SACL AR0
LAR AR0,#0FFH
MAR *,AR0
DELAY1: NOP
NOP
NOP
BANZ DELAY1
;清全部中断标志
RET
DELAY RPT #100
NOP
NOP
RET
;(5)中断程序
GISR1: SETC INTM
;MAR *,AR6
LDP #200H>>7
IN 240H,0100H
LACL 240H
AND #00FH ;
SACL 240H
RPT #100 ;priority
NOP
RPT #100
NOP
MAR *,AR0
LDP #0
SPLK #01H,IFR
LDP #XINT1CR>>7
SPLK #8001H,XINT1CR
CLRC INTM
RET
GISR5: ;优先级INT5中断人口
CLRC INTM ;开总中断,因为一进中断就自动关闭总中断
RET
;(6)假中断程序
PHANTOM:
KICK_DOG: ;复位看门狗
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -