📄 max7219led.asm
字号:
LDP #DP_USER
SPLK #LED_0_NOCODE_DP,SPI_CON
CALL SEND_LED_CTRL
CALL DELAY_LONG
LDP #DP_USER
SPLK #LED_0_NOCODE_BLANK,SPI_CON
CALL SEND_LED_CTRL
LDP #DP_USER
SPLK #LED_1_NOCODE_DP,SPI_CON
CALL SEND_LED_CTRL
CALL DELAY_LONG
LDP #DP_USER
SPLK #LED_1_NOCODE_BLANK,SPI_CON
CALL SEND_LED_CTRL
LDP #DP_USER
SPLK #LED_2_NOCODE_DP,SPI_CON
CALL SEND_LED_CTRL
CALL DELAY_LONG
LDP #DP_USER
SPLK #LED_2_NOCODE_BLANK,SPI_CON
CALL SEND_LED_CTRL
LDP #DP_USER
SPLK #LED_3_NOCODE_DP,SPI_CON
CALL SEND_LED_CTRL
CALL DELAY_LONG
LDP #DP_USER
SPLK #LED_3_NOCODE_BLANK,SPI_CON
CALL SEND_LED_CTRL
CALL DELAY_LONG
LDP #DP_USER
SPLK #LED_0_NOCODE_DP,SPI_CON
CALL SEND_LED_CTRL
LDP #DP_USER
SPLK #LED_1_NOCODE_DP,SPI_CON
CALL SEND_LED_CTRL
LDP #DP_USER
SPLK #LED_2_NOCODE_DP,SPI_CON
CALL SEND_LED_CTRL
LDP #DP_USER
SPLK #LED_3_NOCODE_DP,SPI_CON
CALL SEND_LED_CTRL
CALL DELAY_LONG
LDP #DP_USER
SPLK #LED_0_NOCODE_BLANK,SPI_CON
CALL SEND_LED_CTRL
LDP #DP_USER
SPLK #LED_1_NOCODE_BLANK,SPI_CON
CALL SEND_LED_CTRL
LDP #DP_USER
SPLK #LED_2_NOCODE_BLANK,SPI_CON
CALL SEND_LED_CTRL
LDP #DP_USER
SPLK #LED_3_NOCODE_BLANK,SPI_CON
CALL SEND_LED_CTRL
CALL DELAY_LONG
B LOOP_AK
; MAR *,AR1
;SBRK #4H
; LAR AR7,*-
; LAR AR6,*-
; LAR AR0,*-
; PSHD *
; RET
LOOP:
NOP
B LOOP
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;开启蜂鸣器,
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BEEP_ON:
LDP #DP_PF2 ;set data page
LACC PADATDIR
AND #1111111111011111B
SACL PADATDIR ;store result to PCDATDIR
RET
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;关闭蜂鸣器,
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BEEP_OFF:
LDP #DP_PF2 ;set data page
LACC PADATDIR
OR #0000000000100000B
SACL PADATDIR ;store result to PCDATDIR
RET
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;开启LED
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
LED_ON:
LDP #DP_PF2 ;set data page
LACC PFDATDIR
AND #1111111110111111B
SACL PFDATDIR ;store result to PCDATDIR
RET
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; 关闭led
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
LED_OFF:
LDP #DP_PF2 ;set data page
LACC PFDATDIR
OR #0000000001000000B
SACL PFDATDIR ;store result to PCDATDIR
RET
DELAY:
LACC #450000
DELAY1: SUB #1
RPT #80
NOP
BCND DELAY1,NEQ
RET
DELAY_LONG: RPT #4
CALL DELAY
RET
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;Configure the System Control and Status Registers
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SYSTEM_INIT:
LDP #0
SETC INTM
CLRC SXM
CLRC OVM
CLRC CNF
LDP #SCSR1>>7 ;set data page
LACL #0000000000100001b
SACL SCSR1 ; ENABLE THE SPI AND CAN MODULES.
;5432109876543210 ; SET THE CPU WORKING CLOCK =4*fin
LDP #WDCR>>7
SPLK #0E8H,WDCR ;关看门狗
LDP #0
;SPLK #0001H,IMR ;使能spi所在中断1
;SPLK #0FFFFH,IFR ;清除中断标志
;CLRC INTM
RET
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;Disable the watchdog timer
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
KILL_DOG:
LDP #DP_PF1 ;set data page
SPLK #0000000011101000b, WDCR
RET
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;Setup shared I/O pins
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
IO_INIT:
LDP #DP_PF2 ;set data page
SPLK #0000000000000000b,MCRA ;group A pins
LACC PADATDIR ; IOPA5=OUT OUT=0
OR #0010000000000000B
SACL PADATDIR
;SPLK #1111111000011101b,MCRB ;group B pins W/R, IOPC1, SPISIMO,SPISOMI SPICLK,IOPC5.
;DISABLE CANTX,CANRX = IOPC6,7. DISABLE XINT2 =IOPD0.
;LACC PCDATDIR
;OR #0010000000000000B ;IOPC5=OUT OUT=0
SPLK #0000000000000001b,MCRC ;group C pins ENABLE I0PE6
LACC PFDATDIR ; IOPF6=OUT OUT=0
OR #0100000000000000B
SACL PFDATDIR
RET
;*****************************************************
; INITIALIZAION THE SPI REGISTERS
;*****************************************************
SPI_INIT:
LDP #SPICCR>>7
SPLK #0000111001001111B,SPICCR ;ENABLE SPI REGISTER BE INTIAL AND 16BIT OUT允许SPI初始化
;5432109876543210 ;16位数据发送
SPLK #0000000000000110B,SPICTL ;MASTER WORK CONDITION
;5432109876543210
SPLK #0027H,SPIBRR ;SPI BODE RATE =1MHz cpu=40Mhz spibrr=27h
SPLK #0000000011001111B,SPICCR ;DISABLE SPI INITAL
LDP #MCRB>>7
SPLK #0000000000111111B,MCRB
;5432109876543210
RET
;***********************************************
; ENABLE OR DISABLE THE CHIP: MAX7219
;***********************************************
ENABLE_MAX7219:
LDP #DP_PF2 ;set data page
LACC PCDATDIR
AND #1111111111011111B
SACL PCDATDIR ;store result to PCDATDIR
RET
DISABLE_MAX7219:
LDP #DP_PF2 ;set data page
LACC PCDATDIR
OR #0000000000100000B
SACL PCDATDIR ;store result to PCDATDIR
RET
;********************************************************
;test whether the spi works in a normal condiction.
;********************************************************
SPI_TEST:
LDP #DP_PF2
SPLK #1111111000000011B,MCRB
NOP
SPLK #1111111111000011B,PCDATDIR
NOP
SPLK #1111111111111111B,PCDATDIR
NOP
SPLK #1111111111000011B,PCDATDIR
RET
;********************************************************
;测试max7219芯片显示情况
;********************************************************
LED_DISPLAY:
CALL ENABLE_MAX7219
LDP #DP_PF1
SPLK #DISPLAY_TEST_ON,SPITXBUF
LOOP2: BIT SPISTS,BIT6
BCND LOOP2,NTC
NOP
NOP
NOP
CALL DISABLE_MAX7219
RET
;********************************************************
;送max7219控制字子程序
;********************************************************
SEND_LED_CTRL:
LACL SPI_CON
LDP #SPITXBUF>>7
SACL SPITXBUF
LOOP_TEST: BIT SPISTS,BIT6
BCND LOOP_TEST,NTC
LDP #SPIRXBUF>>7 ;CLEAR THE SPI INT FLAG
LACC SPIRXBUF
RET
.end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -