⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 新建 文本文档 (3).txt

📁 全中文注释DSPIC CAN总线汇编程序,包括中断跳转(够酷吧)
💻 TXT
字号:
全中文注释DSPIC CAN总线汇编程序,包括中断跳转(够酷吧). 
.include "p30f4011.inc" 
.text 
.global __reset 
__reset: 
;; 在上电复位时获取控制权 
MOV #__SP_init,w15 ; 初始化堆栈指针 
MOV #__SPLIM_init,w0 ; 和堆栈界限寄存器 
MOV w0,SPLIM ;//设置堆栈指针和指针最大值 
;------------------------------------------------------ 
;------------------------------------------------------ 
;设置输出引脚 
mov #0x0000,w0 
mov w0,TRISE 
mov #0x0004,w0 
mov w0,LATE 
;------------------------------------------------------ 
;------------------------------------------------------ 
;设置定时器 
clr    TMR1 
mov    #0xEE00,W0        ;TMR1 interrupts every 0.5 Sec 
mov    W0,PR1 
bclr IFS0,#T1IF        ; clr interrupt flag 
mov    #0x8030,W0        ; Fosc/4, 1:8 prescale, start TMR1 
mov    W0,T1CON 
bset IEC0,#T1IE        ; enable interrupt 
;------------------------------------------------------ 
;------------------------------------------------------- 
;配置CAN1引脚 
BCLR TRISF,#TRISF0 ;设置C1TX/RF0为输出 
BSET TRISF,#TRISF1 ;设置C1RX/RF1为输入 
;------------------------------------------------------- 
MYCAN1:; CAN工作模式选择 
MOV #0B0000010010000000,W1 
MOV W1,C1CTRL; 设置为配置模式 
MOV #0B0000010010000000,W0 
;------------------------------------------------------- 
PDPZ1: 
AND C1CTRL, WREG 
CPSEQ W0,W1 
GOTO PDPZ1; 判断是否进入配置模式 
;-------------------------------------------------------- 
MOV #0B0001111111111100,W0; 接收过滤器0标准标识符 
MOV W0,C1RXF0SID 
MOV #0B0001111111111101,W0; 接收过滤器屏蔽器0,1标准标识符 
MOV W0,C1RXM0SID 
MOV W0,C1RXM1SID 
MOV #0B0000000000000100,W0; 接收缓冲器0状态和控制寄存器 
MOV W0,C1RX0CON 
MOV #0B0000000000000000,W0; 接收缓冲器1状态和控制寄存器 
MOV W0,C1RX1CON 
MOV #0B0000000000000001,W0; 波特率配置寄存器1 
MOV W0,C1CFG1 
MOV #0B0100001010010000,W0; 波特率配置寄存器2 
MOV W0,C1CFG2 
;----------------------------------------------------- 
;设置中断 
CLR C1INTF; 清除中断标志寄存器 
MOV #0B0000000000111111,W0; 中断使能寄存器 
MOV W0,C1INTE 
BCLR IFS1,#C1IF; 清除中断标记 
BSET IEC1,#C1IE; 使能CAN1中断 
;------------------------------------------------------ 
MOV #0B1111100011111110,W0; 发送缓冲器0标准标识符 
MOV W0,C1TX0SID 
MOV #0B0000001110000000,W0; 发送缓冲器0数据长度控制 
MOV W0,C1TX0DLC 
MOV #0B1000001001000000,W1; 设置为环回模式 
MOV W1,C1CTRL 
MOV #0B1000001001000000,W0 
;------------------------------------------------------ 
PDPZ2: 
AND C1CTRL, WREG 
CPSEQ W0,W1 
GOTO PDPZ2; 判断是否进入环回模式 
;------------------------------------------------------- 
MOV #0B0000000000001011,W0; 发送缓冲器0状态和控制寄存器 
MOV W0,C1TX0CON 
;------------------------------------------------------- 
;------------------------------------------------------- 
GOGO: 
NOP 
NOP 
NOP 
NOP 
GOTO GOGO 
;------------------------------------------------------- 
;------------------------------------------------------- 
.global __C1Interrupt 
__C1Interrupt: 
;判断中断类型 
MOV #0B0000000000001110,W0 
AND C1CTRL,WREG 
BRA W0 
GOTO CANInterruptReturn 
GOTO CANErrInterrupt 
GOTO CANTXB2Interrupt 
GOTO CANTXB1Interrupt 
GOTO CANTXB0Interrupt 
GOTO CANRXB1Interrupt 
GOTO CANRXB0Interrupt 
;------------------------------------------------------ 
;功能函数 
CANInterruptReturn:;处理完全后返回 
BCLR IFS1,#C1IF ; 清除中断标记 
RETFIE;由中断返回 
;------------------------------------------------------ 
CANErrInterrupt:;错误中断处理 
BCLR C1INTE,#ERRIF 
MOV #0B0000000000001110,W0 
AND C1CTRL,WREG 
BRA W0 
GOTO CANInterruptReturn 
GOTO CANErrInterrupt 
GOTO CANTXB2Interrupt 
GOTO CANTXB1Interrupt 
GOTO CANTXB0Interrupt 
GOTO CANRXB1Interrupt 
GOTO CANRXB0Interrupt 
;------------------------------------------------------ 
GOTO CANRXB0Interrupt 
CANTXB2Interrupt:;发送缓冲器2中断处理 
BCLR C1INTE,#TX2IF 
MOV #0B0000000000001110,W0 
AND C1CTRL,WREG 
BRA W0 
GOTO CANInterruptReturn 
GOTO CANErrInterrupt 
GOTO CANTXB2Interrupt 
GOTO CANTXB1Interrupt 
GOTO CANTXB0Interrupt 
GOTO CANRXB1Interrupt 
GOTO CANRXB0Interrupt 
;----------------------------------------------------- 
CANTXB1Interrupt:;发送缓冲器1中断处理 
BCLR C1INTE,#TX1IF 
MOV #0B0000000000001110,W0 
AND C1CTRL,WREG 
BRA W0 
GOTO CANInterruptReturn 
GOTO CANErrInterrupt 
GOTO CANTXB2Interrupt 
GOTO CANTXB1Interrupt 
GOTO CANTXB0Interrupt 
GOTO CANRXB1Interrupt 
GOTO CANRXB0Interrupt 
;---------------------------------------------------- 
CANTXB0Interrupt:;发送缓冲器0中断处理 
BTG LATE,#RE0 
BCLR C1INTE,#TX0IF 
MOV #0B0000000000001110,W0 
AND C1CTRL,WREG 
BRA W0 
GOTO CANInterruptReturn 
GOTO CANErrInterrupt 
GOTO CANTXB2Interrupt 
GOTO CANTXB1Interrupt 
GOTO CANTXB0Interrupt 
GOTO CANRXB1Interrupt 
GOTO CANRXB0Interrupt 
;--------------------------------------------------- 
CANRXB1Interrupt:;接收缓冲器1中断处理 
BCLR C1INTE,#RX1IF 
MOV #0B0000000000001110,W0 
AND C1CTRL,WREG 
BRA W0 
GOTO CANInterruptReturn 
GOTO CANErrInterrupt 
GOTO CANTXB2Interrupt 
GOTO CANTXB1Interrupt 
GOTO CANTXB0Interrupt 
GOTO CANRXB1Interrupt 
GOTO CANRXB0Interrupt 
;--------------------------------------------------- 
CANRXB0Interrupt:;接收缓冲器0中断处理 
BTG LATE,#RE1 
BCLR C1INTE,#RX0IF 
MOV #0B0000000000001110,W0 
AND C1CTRL,WREG 
BRA W0 
GOTO CANInterruptReturn 
GOTO CANErrInterrupt 
GOTO CANTXB2Interrupt 
GOTO CANTXB1Interrupt 
GOTO CANTXB0Interrupt 
GOTO CANRXB1Interrupt 
GOTO CANRXB0Interrupt 
;------------------------------------------------------- 
;------------------------------------------------------- 
.global __T1Interrupt 
__T1Interrupt: 
BTG LATE,#RE3 
MOV #0B0000000000000100,W0; 接收缓冲器0状态和控制寄存器 
MOV W0,C1RX0CON 
MOV #0B0000001110000000,W0; 发送缓冲器0数据长度控制 
MOV W0,C1TX0DLC 
MOV #0B0000000000001011,W0; 发送缓冲器0状态和控制寄存器 
MOV W0,C1TX0CON 
BCLR IFS0,#T1IF ; 清除中断标记 
RETFIE;由中断返回 
;------------------------------------------------------- 
;------------------------------------------------------- 
.global __DefaultInterrupt 
__DefaultInterrupt: 
;; 服务于所有其它的中断 & 陷阱 
reset ; 并且复位器件 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -