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

📄 16f877与mcp2510程序.txt

📁 16f877与MCP2510程序
💻 TXT
📖 第 1 页 / 共 2 页
字号:
16f877使用SPI 读/写 MCP2510 数据程序  
 
  
; 使用SPI 读/写 MCP2510 数据
; 16Mhz  877 和MCP2510
; 125K Bps 8位
; >> The 877 receive data from MCP2510 & Send Byte2 to both PORTD & CCPR1L
; >>  Byte2 相当于 ADC 用于发送* 100的结果  
; >>  CCPR1L  PWM 

 list p=16f877
 #include <p16f877.inc>
 #include <REG2510.inc>

;歌林电子制作实验室www.nbglin.com 
;TEL:0574-88464538  email:nbpic@126.com

; Variables used in this program;
 UDATA
******************************************************
;**** REF2510.inc
;****   Definition file of MCP2510 registers & COMMANDs
;******************************************************

CMD_WRITE EQU b'00000010'
CMD_READ EQU b'00000011'
CMD_RESET EQU b'11000000'
CMD_STATUS EQU b'10100000'
CMD_MODIFY EQU b'00000101'
CMD_RTS0 EQU b'10000001'
CMD_RTS1 EQU b'10000010'
CMD_RTS2 EQU b'10000100'

;****************************************************
;**** FIRST PORTION : DEFINITION OF CONTROL REGS
;****************************************************
CANSTAT  EQU 0x0E
CANCTRL  EQU 0x0F
BFPCTRL  EQU 0X0C
TXRTSCTRL EQU 0X0D
CNF1  EQU 0x2A
CNF2  EQU 0x29
CNF3  EQU 0x28
CANINTE  EQU 0x2B
CANINTF  EQU 0x2C
EFLG  EQU 0x2D
TEC  EQU 0x1C
REC  EQU 0x1D
TXB0CTRL EQU 0x30
TXB1CTRL EQU 0x40
TXB2CTRL EQU 0X50
RXB0CTRL EQU 0X60
RXB1CTRL EQU 0X70

;****************************************************
;**** SECOND PORTION : MASK & FILTER REGS
;****************************************************
RXM0SIDH EQU 0X20
RXM0SIDL EQU 0X21
RXM0EID8 EQU 0X22
RXM0EID0 EQU 0X23
RXM1SIDH EQU 0X24
RXM1SIDL EQU 0X25
RXM1EID8 EQU 0X26
RXM1EID0 EQU 0X27
RXF0SIDH EQU 0X00
RXF0SIDL EQU 0X01
RXF0EID8 EQU 0X02
RXF0EID0 EQU 0X03
RXF1SIDH EQU 0X04
RXF1SIDL EQU 0X05
RXF1EID8 EQU 0X06
RXF1EID0 EQU 0X07
RXF2SIDH EQU 0X08
RXF2SIDL EQU 0X09
RXF2EID8 EQU 0X0A
RXF2EID0 EQU 0X0B
RXF3SIDH EQU 0X10
RXF3SIDL EQU 0X11
RXF3EID8 EQU 0X12
RXF3EID0 EQU 0X13
RXF4SIDH EQU 0X14
RXF4SIDL EQU 0X15
RXF4EID8 EQU 0X16
RXF4EID0 EQU 0X17
RXF5SIDH EQU 0X18
RXF5SIDL EQU 0X19
RXF5EID8 EQU 0X1A
RXF5EID0 EQU 0X1B

;****************************************************
;**** THIRD PORTION : TRANSMIT IDs & BUFFER
;****************************************************
TXB0SIDH EQU 0X31
TXB0SIDL EQU 0X32
TXB0EID8 EQU 0X33
TXB0EID0 EQU 0X34
TXB0DLC  EQU 0X35
TXB0D0  EQU 0X36
TXB0D1  EQU 0X37
TXB0D2  EQU 0X38
TXB0D3  EQU 0X39
TXB0D4  EQU 0X3A
TXB0D5  EQU 0X3B
TXB0D6  EQU 0X3C
TXB0D7  EQU 0X3D

;****  TRANSMIT BUFFER 1 ..

TXB1SIDH EQU 0X41
TXB1SIDL EQU 0X42
TXB1EID8 EQU 0X43
TXB1EID0 EQU 0X44
TXB1DLC  EQU 0X45
TXB1D0  EQU 0X46
TXB1D1  EQU 0X47
TXB1D2  EQU 0X48
TXB1D3  EQU 0X49
TXB1D4  EQU 0X4A
TXB1D5  EQU 0X4B
TXB1D6  EQU 0X4C
TXB1D7  EQU 0X4D

;****  TRANSMIT BUFFER 2 ..

TXB2SIDH EQU 0X51
TXB2SIDL EQU 0X52
TXB2EID8 EQU 0X53
TXB2EID0 EQU 0X54
TXB2DLC  EQU 0X55
TXB2D0  EQU 0X56
TXB2D1  EQU 0X57
TXB2D2  EQU 0X58
TXB2D3  EQU 0X59
TXB2D4  EQU 0X5A
TXB2D5  EQU 0X5B
TXB2D6  EQU 0X5C
TXB2D7  EQU 0X5D

;****************************************************
;**** FOURTH PORTION : RECEIVE IDs & BUFFER
;****************************************************
RXB0SIDH EQU 0X61
RXB0SIDL EQU 0X62
RXB0EID8 EQU 0X63
RXB0EID0 EQU 0X64
RXB0DLC  EQU 0X65
RXB0D0  EQU 0X66
RXB0D1  EQU 0X67
RXB0D2  EQU 0X68
RXB0D3  EQU 0X69
RXB0D4  EQU 0X6A
RXB0D5  EQU 0X6B
RXB0D6  EQU 0X6C
RXB0D7  EQU 0X6D

;****  RECEIVE BUFFER 1 ...

RXB1SIDH EQU 0X71
RXB1SIDL EQU 0X72
RXB1EID8 EQU 0X73
RXB1EID0 EQU 0X74
RXB1DLC  EQU 0X75
RXB1D0  EQU 0X76
RXB1D1  EQU 0X77
RXB1D2  EQU 0X78
RXB1D3  EQU 0X79
RXB1D4  EQU 0X7A
RXB1D5  EQU 0X7B
RXB1D6  EQU 0X7C
RXB1D7  EQU 0X7D

;******************************************************************
;**** RESET VALUE OF EACH CONTROL REGISTER !!
;******************************************************************
; BFPCTRL  --00 0000
; TXRTSCTRL --XX X000
; CANSTAT  100- 000-
; CANCTRL  1110 -111
; TEC  0000 0000
; REC  0000 0000
; CNF3  -0-- -000
; CNF2  0000 0000
; CNF1  0000 0000
; CANINTE  0000 0000
; CANINTF  0000 0000
; EFLG  0000 0000
; TXB0CTRL -000 0-00
; TXB1CTRL -000 0-00
; TXB2CTRL -000 0-00
; RXB0CTRL -00- 0000
; RXB1CTRL -00- 0000
;******************************************************************
 
 

 
TempH  RES 1  ; TempH & TempL are used for Bin2BCD subroutine
TempL  RES 1  ;

TempVar1 RES 1
TempVar2 RES 1

LoopCntr RES 1

SPI_Temp RES 1  ; Used for SPI Temp in order to keep the content of W reg
Dlen_2510 RES 1
Addr_2510 RES 1
Buf_2510 RES 8

STATUS_2510 RES 1

CAN_PORTD RES 1
CAN_PWM  RES 1

Temp_ADC RES 1

;******************************************************************
;**** The location of Flash Registers is BANK3 
;**** Because the EEDATA & EEADR are located @ Bnk 3 
;******************************************************************
 

w_temp  EQU 0x72
status_temp EQU 0x73
pclath_temp EQU 0x74 
    
PORT_CS2510 EQU PORTC

#define  CS2510 PORTC,0  ; RC2 is CS control signal of this 2510 EVM Board !!
#define  MESSAGE_NO1 .250 ; 
#define  PWM_DUTY .255

; Locates startup code @ the reset vector

;*******************************************************
;****  MACRO RESET_2510  
;****  RESET MCP2510
;*******************************************************
RESET_2510 MACRO
  BANKSEL PORT_CS2510
  bcf CS2510
  movlw CMD_RESET
  call Write_SPI_Byte
  BANKSEL PORT_CS2510
  bsf CS2510
  ENDM

;*******************************************************
;****  MACRO WRITE_2510 W_ADD,W_DATA
;****  Write W_DATA into W_ADD
;*******************************************************
WRITE_2510 MACRO W_ADD,W_DATA
  BANKSEL PORT_CS2510
  bcf CS2510
  movlw CMD_WRITE
  call Write_SPI_Byte
  movlw W_ADD
  call Write_SPI_Byte
  movlw W_DATA
  call Write_SPI_Byte
  BANKSEL PORT_CS2510
  bsf CS2510
  ENDM

;*******************************************************
;****  MACRO READ_2510 R_ADD
;****  Read data @ address R_ADD
;*******************************************************
READ_2510 MACRO R_ADD
  BANKSEL PORT_CS2510
  bcf CS2510
  movlw CMD_READ
  call Write_SPI_Byte
  movlw R_ADD
  call Write_SPI_Byte
  movlw 0xff
  call Write_SPI_Byte
  BANKSEL PORT_CS2510
  bsf CS2510
  ENDM

;*******************************************************
;****  MACRO MODIFY_2510 M_ADD,M_MASK,M_DATA
;****  Target address M_ADD
;****  Mask Pattern @ M_MASK
;****  Data Pattern @ M_DATA
;*******************************************************
MODIFY_2510 MACRO M_ADD,M_MASK,M_DATA
  BANKSEL PORT_CS2510
  bcf CS2510
  movlw CMD_MODIFY
  call Write_SPI_Byte
  movlw M_ADD
  call Write_SPI_Byte
  movlw M_MASK
  call Write_SPI_Byte
  movlw M_DATA
  call Write_SPI_Byte 
  BANKSEL PORT_CS2510
  bsf CS2510
  ENDM

;*******************************************************
;****  MACRO SEND_TXB0  
;****  SEND COMMAND TO START TXBO TRANSMISSION
;*******************************************************
SEND_TXB0 MACRO 
  BANKSEL PORT_CS2510
  bcf CS2510
  movlw CMD_RTS0  ; TRansmit Buffer 0
  call Write_SPI_Byte
  BANKSEL PORT_CS2510
  bsf CS2510
  ENDM

;*******************************************************
;**** END OF MACRO DECALRATION ^^^^^^^^^^^^^^^^^^^^^^^
;*******************************************************

START CODE H'000'
 nop
 goto Prog_Main

SEC_ISR CODE H'004'
 goto ISRs

⌨️ 快捷键说明

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