📄 f350_ad_show.asm
字号:
movc A , @A+DPTR
;复位指令
mov Nonfeedbackcommmand , #CMD_RESET
lcall NonfeedbackCOMMAND_to_MCP2515
;==================================
mov DelaytimesetIN, #128
call delayshorterthan256osc
;==================================
;读寄存器CANSTAT值,检验是否复位成功
mov MCP2515readaddress,#MCP2515CANSTAT
lcall READDATA_from_MCP2515
mov A, SPI0DAT
cjne A,#80h, RESET
RET
;----------------------------------------------------------------------------
MCP2515_modeset:
SETMODE:;设置MCP2515工作模式
mov MCP2515writeaddress, #MCP2515CANCTRL
mov MCP2515writedata, #CMD_NORMALMODE
lcall WRITEDATA_to_MCP2515
;以下程序段读寄存器CANSTAT值,检验是否设置模式成功
mov MCP2515readaddress,#MCP2515CANSTAT
lcall READDATA_from_MCP2515
mov A, SPI0DAT
cjne A,#00h, SETMODE
RET
;----------------------------------------------------------------------------
MCP2515_intruptset: ;入口参数MCP2515CANINTEdata,
mov MCP2515writeaddress, #MCP2515CANINTE
mov DPTR , #MCP2515CANINTEdata
movx A , @DPTR
mov MCP2515writedata , A
lcall WRITEDATA_to_MCP2515
RET
;----------------------------------------------------------------------------
;----------------------------------------------------------------------------
MCP2515_REGpreconfig:
mov A , #0E3H
mov DPTR , #MCP2515CANINTEdata
movx @DPTR , A
;设置接收寄存器RXB0的控制寄存器数据,决定RXB0的工作方式
mov A , #20H
mov DPTR , #MCP2515RXB0CTRLdata
movx @DPTR , A
;设置接收寄存器RXB1的控制寄存器数据,决定RXB1的工作方式
mov A , #00H
mov DPTR , #MCP2515RXB1CTRLdata
movx @DPTR , A
;---------------------------------
;位定时参数设置
;---------------------------------
mov A , #09H
mov DPTR , #MCP2515CNF1data
movx @DPTR , A
mov A , #83H;#0C3H
mov DPTR , #MCP2515CNF2data
movx @DPTR , A
mov A , #83H
mov DPTR , #MCP2515CNF3data
movx @DPTR , A
;---------------------------
;接收屏蔽参数设置
;---------------------------
;接收屏蔽实际不太需要改变的
;-------------------------
;接收滤波参数设置
;--------------------------
mov MCP2515writeaddress, #MCP2515CNF3
mov DPTR , #MCP2515CNF3data
movx A , @DPTR
mov MCP2515writedata, A
lcall WRITEDATA_to_MCP2515
;---------------------------------------------------
;*************************************************
;接收控制寄存器参数写入
;*************************************************
;---------------------------------------------------
;中断是能寄存器设置
mov MCP2515writeaddress, #MCP2515CANINTE
mov DPTR , #MCP2515CANINTEdata
movx A , @DPTR
mov MCP2515writedata, A
lcall WRITEDATA_to_MCP2515
mov MCP2515writeaddress, #MCP2515RXB0CTRL
mov DPTR , #MCP2515RXB0CTRLdata
movx A , @DPTR
mov MCP2515writedata, A;
lcall WRITEDATA_to_MCP2515
mov MCP2515writeaddress, #MCP2515RXB1CTRL
mov DPTR , #MCP2515RXB1CTRLdata
movx A , @DPTR
mov MCP2515writedata , A
lcall WRITEDATA_to_MCP2515
;---------------------------------------------------
;*************************************************
;接收屏蔽寄存器参数写入
;*************************************************
;---------------------------------------------------
;设置RXM0SIDH寄存器中
mov MCP2515writeaddress, #MCP2515RXM0SIDH
mov MCP2515writedata, #0FFH
lcall WRITEDATA_to_MCP2515
;设置RXM0SIDL寄存器
mov MCP2515writeaddress, #MCP2515RXM0SIDL
mov MCP2515writedata, #0FFH
lcall WRITEDATA_to_MCP2515
;设置RXM0EID8寄存器
mov MCP2515writeaddress, #MCP2515RXM0EID8
mov MCP2515writedata, #0FFH
lcall WRITEDATA_to_MCP2515
;设置RXM0EID0寄存器
mov MCP2515writeaddress, #MCP2515RXM0EID0
mov MCP2515writedata, #0FFH
lcall WRITEDATA_to_MCP2515
;-----------------------------------------------------
;-----------------------------------------------------
;设置RXM1SIDH寄存器
mov MCP2515writeaddress, #MCP2515RXM1SIDH
mov MCP2515writedata, #0FFH
lcall WRITEDATA_to_MCP2515
;设置RXM1SIDL寄存器
mov MCP2515writeaddress, #MCP2515RXM1SIDL
mov MCP2515writedata, #0FFH
lcall WRITEDATA_to_MCP2515
;设置RXM1EID8寄存器
mov MCP2515writeaddress, #MCP2515RXM1EID8
mov MCP2515writedata, #0FFH
lcall WRITEDATA_to_MCP2515
;设置RXM1EID0寄存器
mov MCP2515writeaddress, #MCP2515RXM1EID0
mov MCP2515writedata, #0FFH
lcall WRITEDATA_to_MCP2515
;---------------------------------------------------
;*************************************************
;接收滤波寄存器参数写入
;*************************************************
;---------------------------------------------------
;设置RXF0SIDH寄存器中
FILTER0: mov MCP2515writeaddress, #MCP2515RXF0SIDH
mov DPTR , #MCP2515RXF0SIDHdata
movx A , @DPTR
mov MCP2515writedata, A
lcall WRITEDATA_to_MCP2515
;设置RXF0SIDL寄存器中
mov MCP2515writeaddress, #MCP2515RXF0SIDL
mov DPTR , #MCP2515RXF0SIDLdata
movx A , @DPTR
mov MCP2515writedata, A
lcall WRITEDATA_to_MCP2515
;设置RXF0EID8寄存器中
mov MCP2515writeaddress, #MCP2515RXF0EID8
mov DPTR , #MCP2515RXF0EID8data
movx A , @DPTR
mov MCP2515writedata, A
lcall WRITEDATA_to_MCP2515
;设置RXF0EID0寄存器中
mov MCP2515writeaddress, #MCP2515RXF0EID0
mov DPTR , #MCP2515RXF0EID0data
movx A , @DPTR
mov MCP2515writedata, A
lcall WRITEDATA_to_MCP2515
;-----------------------------------------------------
;设置RXF0SIDH寄存器中
FILTER2: mov MCP2515writeaddress, #MCP2515RXF2SIDH
mov DPTR , #MCP2515RXF0SIDHdata
movx A , @DPTR
mov MCP2515writedata, A
lcall WRITEDATA_to_MCP2515
;设置RXF0SIDL寄存器中
mov MCP2515writeaddress, #MCP2515RXF2SIDL
mov DPTR , #MCP2515RXF0SIDLdata
movx A , @DPTR
mov MCP2515writedata, A
lcall WRITEDATA_to_MCP2515
;设置RXF0EID8寄存器中
mov MCP2515writeaddress, #MCP2515RXF2EID8
mov DPTR , #MCP2515RXF0EID8data
movx A , @DPTR
mov MCP2515writedata, A
lcall WRITEDATA_to_MCP2515
;设置RXF0EID0寄存器中
mov MCP2515writeaddress, #MCP2515RXF2EID0
mov DPTR , #MCP2515RXF0EID0data
movx A , @DPTR
mov MCP2515writedata, A
lcall WRITEDATA_to_MCP2515
;-----------------------------------------------------
RET
;*******************************************************************************
;以下是LCD 操作函数
;*******************************************************************************
SHOW_ON_SCREEN:
PUSH ACC
mov A , LCDFORTHBUF
SWAP A
mov LCDFORTHBUF, A
mov LCDDATA, LCDFORTHBUF
mov LCDADDR, #FORTH
lcall LCDDATA_SEND
mov A , LCDTHIRDBUF
SWAP A
mov LCDTHIRDBUF, A
mov LCDDATA, LCDTHIRDBUF
mov LCDADDR,#THIRD
lcall LCDDATA_SEND
mov LCDDATA, LCDSECONDBUF
mov LCDADDR, #SECOND
lcall LCDDATA_SEND
mov LCDDATA, LCDFIRSTBUF
mov LCDADDR, #FIRST
lcall LCDDATA_SEND
POP ACC
RET
;-----------------------------------
;液晶初始化
;-----------------------------------
LCD_INT: MOV LCDCOMMAND,#0E3H ;NORMAL
LCALL LCDCOMMAND_SEND ;
MOV LCDCOMMAND,#05H ;关看门狗
LCALL LCDCOMMAND_SEND
MOV LCDCOMMAND,#29H ;4COM,1/3BIAS
LCALL LCDCOMMAND_SEND
MOV LCDCOMMAND,#01H ;SYSTEM ENABLE;
LCALL LCDCOMMAND_SEND
MOV LCDCOMMAND,#03H ;LCD ON
LCALL LCDCOMMAND_SEND
LCALL SHOW_LCD ;全显
mov DelaytimesetIN , #255
mov DelaytimesetOUT , #255
LCALL delayshorterthan255mul255osc
LCALL CLR_LCD ;清屏
RET
;-----------------------------------------------
;液晶全显函数(无参数)//可以考虑用连续模式!!!!
;----------------------------------------------
SHOW_LCD: MOV LCDADDR,#0
MOV R5,#15
SHOW_WR:MOV LCDDATA,#0FFH
LCALL LCDDATA_SEND
INC LCDADDR
DJNZ R5,SHOW_WR
RET
;------------------------------------------------
;液晶清屏函数(无参数)中间占用R5//可以考虑用连续模式!!!!
;------------------------------------------------
CLR_LCD: MOV LCDADDR,#0
MOV R5,#15
CLR_WR:MOV LCDDATA,#00H
LCALL LCDDATA_SEND
INC LCDADDR
DJNZ R5,CLR_WR
RET
;--------------------------------------------------
;液晶底层位通信函数(参数 输入位数R2,位数据存在ACC中)
;---------------------------------------------------
LCD_ADDRESSANDHEADBITcommunication:
PUSH ACC
PUSH PSW
ADDRESSANDHEADSENDB1: RLC A
MOV LCDda,C
SETB LCDwr
CLR LCDwr
DJNZ R2, ADDRESSANDHEADSENDB1
POP PSW
POP ACC ;保护ACC和PSW的原因,注意到PUSH和POP的经常应用,
;暂存寄存器和内存值,该寄存器供其它程序使用,使用用完后再恢复
RET
;---------------------------------------------------
;液晶底层位通信函数(参数 输入位数R2,位数据存在ACC中)
;---------------------------------------------------
LCD_DATABITcommunication:
PUSH ACC
PUSH PSW
DATASENDB2: RRC A
MOV LCDda,C
; LCALL delay5us//这个子程序定短时间不稳定
//LCALL delay5us
SETB LCDwr
//LCALL delay5us
CLR LCDwr
DJNZ R2,DATASENDB2
POP PSW
POP ACC ;保护ACC和PSW的原因,注意到PUSH和POP的经常应用,
;暂存寄存器和内存值,该寄存器供其它程序使用,使用用完后再恢复
;-------------------------------------------------------------------------------
;二-十进制转换函数(入口参数R2 R3;出口参数R4 R5 R6)
;-------------------------------------------------------------------------------
B_to_D_convertion:
clr A
mov R4, A
mov R5, A
mov R6, A
mov R7, #16
IBTL2: clr C
;--------------
mov A , R3
RLC A
mov R3, A
;---------------
;---------------
mov A , R2
RLC A
mov R2, A
;--------------- R3R2左移一位
;---------------
mov A , R4
ADDC A , R4;注意指令ADDC实现了 R4 + R4 + CY = 2R4 + CY的运算,要搞清楚
DA A
mov R4, A
;---------------
;---------------
mov A , R5
ADDC A , R5
DA A
mov R5, A
;---------------
;---------------
mov A , R6
ADDC A , R6
DA A
mov R6, A
;---------------
DJNZ R7, IBTL2
RET
;*******************************************************************************
;以上是LCD 操作函数
;*******************************************************************************
;--------------------------------------
;MCP2515通信状态液晶显示子程序,
;--------------------------------------
;--------------------------------------------------------------------------------
;LCD实现显示程序 入口参数(LCDFORTHBUF LCDTHIRDBUF LCDSECONDBUF LCDFIRSTBUF,保护寄存器ACC)
;--------------------------------------------------------------------------------
;------------------------------------------------
;延时子程序
;------------------------------------------------
;------------------------------------------------
;小于256个时钟周期的延时 入口参数 DelaytimesetIN
;------------------------------------------------
delayshorterthan256osc:
DELE1: DJNZ DelaytimesetIN, DELE1
RET
;-----------------------------------------------------------------
;小于256个时钟周期的延时 入口参数 DelaytimesetOUT DelaytimesetIN
;-----------------------------------------------------------------
delayshorterthan255mul255osc:
mov R2 ,DelaytimesetOUT
DELE2: mov R3 ,DelaytimesetIN
DELE3: DJNZ R3 ,DELE3
DJNZ R2 ,DELE2
;djnz r4,delay1ms
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -