📄 zldjpgxiugai.asm
字号:
SPLK #0F420H, T1PR ;使定时器没50ms产生一次中断
SPLK #0H, T1CNT
SPLK #0164CH, T1CON
NOP ;清中断标志
RET
;*********************************************************
IOPF_INIT: LDP #MCRC>>7 ;允许输出
LACL MCRC
AND #0FCFFH
SACL MCRC ;IOPF0/IOPF1为IO输出口
LACL PFDATDIR
OR #0302H
AND #0FFFEH
SACL PFDATDIR
RET
;********************************************
IOPB_INIT: LDP #MCRA>>7 ;IOPB5,IOPB4为输出方式且都为低,不报警,电机驱动电压不被封锁
LACL MCRA
AND #0CFFFH
SACL MCRA
LACL PBDATDIR
OR #3000H
AND #0FFCFH ;????????
SACL PBDATDIR
RET
;*********************************************************
IOPE_INIT: LDP #MCRC>>7 ;IOPE7,IOPE3,IOPE2,IOPE1均为输出方式且IOPE7=0
LACL MCRC
AND #0FF71H
SACL MCRC
LACL PEDATDIR
OR #8E00H
AND #0FF7FH
SACL PEDATDIR
RET
;*********************************************************
GISR1: SETC INTM
LDP #200h>>7
MAR *,AR6
LAR AR6,#0211H
IN *,0100H ;GET KEY VALUE
LACC *
AND #00FH ;HIGH BYTE IS CLEARED
SACL *
CALL HEX_DISPLAY
OR #8800H ;DISPLAY POSITION CHOICE
SACL 212H
LAR AR1,#212H
;SACL 213H
;LAR AR1,#212H
CALL WRITE_7219
CALL DELAY
RPT #100 ;priority
NOP
RPT #100
NOP
;MAR *,AR0
LDP #XINT1CR>>7
SPLK #8001H,XINT1CR
CLRC INTM
RET
;****************LED*****************************************
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
;******************LED**********************************************
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
HEX_DISPLAY:
bcnd display_0,EQ
SUB #1
bcnd display_1,EQ
SUB #1
bcnd display_2,EQ
SUB #1
bcnd display_3,EQ
SUB #1
bcnd display_4,EQ
SUB #1
bcnd display_5,EQ
SUB #1
bcnd display_6,EQ
SUB #1
bcnd display_7,EQ
SUB #1
bcnd display_8,EQ
SUB #1
bcnd display_9,EQ
SUB #1
bcnd display_A,EQ
SUB #1
bcnd display_B,EQ
SUB #1
bcnd display_C,EQ
SUB #1
bcnd display_D,EQ
SUB #1
bcnd display_E,EQ
SUB #1
bcnd display_F,EQ
display_0: OR #7EH
B OUT
display_1: OR #30H
B OUT
display_2: OR #6DH
B OUT
display_3: OR #79H
B OUT
display_4: OR #33H
B OUT
display_5: OR #5BH
B OUT
display_6: OR #5FH
B OUT
display_7: OR #70H
B OUT
display_8: OR #7FH
B OUT
display_9: OR #7BH
B OUT
display_A: OR #77H
B OUT
display_B: OR #1FH
B OUT
display_C: OR #4EH
B OUT
display_D: OR #3DH
B OUT
display_E: OR #4FH
B OUT
display_F: OR #47H
OUT: RET
;*********************************************************************
IOPF_TODSP: LDP #MCRC>>7
LACL MCRC
AND #0FCFFH
SACL MCRC
LACL PFDATDIR
OR #0300H
AND #0FFFCH ;IOPF1,IOPF0 AS OUT; BOTH LOW LEVEL
SACL PFDATDIR
NOP
RET
;ENABLE LVC245 FROM DSP TO LED
IOPF_TOLED: LDP #MCRC>>7
LACL MCRC
AND #0FCFFH
SACL MCRC ;IOPF0/IOPF1 AS IO
LACL PFDATDIR
OR #0302H
AND #0FFFEH ;IOPF1,IOPF1 AS OUT IOPF1 AS HIGH LEVEL IOPF0 LOW LEVEL
SACL PFDATDIR
NOP
NOP
NOP
NOP
RET
DELAY RPT #200
NOP
RPT #200
NOP
RET
GISR2:
LDP #0000H ;保护现场
SACL 72H
SACH 73H
LDP #0E0H
LACC PIVR,1
ADD #PVECTORS
BACC
;***************INTERRUPT SERVER*********************
T1PINT_ISR:
;LDP #TEMP4>>7
;LACL TEMP4
;SUB #1
;BCND GISR2_RET,NEQ ;?????????????????要不要将注释去掉,实现不抖动?
LDP #SPDFB>>7 ;计算电机转速
LT SPDFB ;???????
SPLK #0,SPDFB
MPY #02H ;TREG*120->PREG
LACC #0
APAC ;PREG+ACC->ACC
SACH 71H ;SPEED->60H,61H
SACL 70H
SPLK #0 ,SPDFB ;CLEAR SPDFB
;把十六进制转换成十进制并在LED上显示
LAR AR0,#0
LAR AR3,#0
LAR AR2,#0
MAR *,AR0
LDP #0000H
LOOP_4: SACL 74H
MAR *+,AR0
SUB #3E8H;
BCND LOOP_4,C
MAR *-,AR0
SAR AR0,75H ;千位
;=============================
LACL 74H
MAR *,AR3
LOOP_3: SACL 74H
MAR *+,AR3
SUB #64H
BCND LOOP_3,C
MAR *-,AR3
SAR AR3,76H ;百位
;==================================
;LACL 74H
;MAR *,AR3
;LOOP_20: ; SACL 74H ;个位
;MAR *+,AR3
;SUB #64H
;BCND LOOP_20,C
LACL 74H
MAR *-,AR2
LOOP_2: SACL 74H ;个位
MAR *+,AR2
SUB #0AH
BCND LOOP_2,C
MAR *-,AR2
; LAR AR2,#5
SAR AR2,77H ;十位
;=================================
;LED显示
CALL IOPF_INIT
LDP #0
LACL 75H
OR #0100H
MAR *+,AR1
LDP #200>>7
SACL *
CALL WRITE_7219
; RPT #100
CALL DELAY
LDP #0
LACL 76H
OR #0200H
MAR *+,AR1
LDP #200>>7
SACL *
CALL WRITE_7219
;RPT #100
CALL DELAY
LDP #0
LACL 77H
OR #0300H
MAR *+,AR1
LDP #200>>7
SACL *
CALL WRITE_7219
;RPT #100
CALL DELAY
LDP #0
LACL 74H
OR #0400H
MAR *+,AR1
LDP #200>>7
SACL *
CALL WRITE_7219
CALL DELAY
LDP #TEMP4>>7 ;重置中断次数
SPLK #0AH,TEMP4
GISR2_RET:
LDP TEMP4>>7
SACL TEMP4
LDP #0
SPLK #02h,IMR ;开中断优先级2
SPLK #0FFFFh,IFR
NOP ;清中断标志
LDP #DP_EVA
SPLK #80H, EVAIMRA ;使能T1PINT中断
SPLK #0FFFFh, EVAIFRA ;复位定时器1周期中断标志位
SPLK #0, GPTCONA
SPLK #0F420H, T1PR ;使定时器每50ms产生一次中断
SPLK #0H, T1CNT
SPLK #0164CH, T1CON
LDP #0000H ;恢复现场
LACC 73H,16
ADD 72H
; LDP #DP_EVA
;LACC EVAIFRA
;SACL EVAIFRA
CLRC INTM ;开总中断
RET
PHANTOM
KICK_DOG ;复位看门狗
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -