📄 mcp250xx.inc
字号:
; Call this macro to set the latch values for the digital I/O's. Macro
; parameters are:
;
; B6 enter 0 or 1 for pin GP6
; B5 enter 0 or 1 for pin GP5
; B4 enter 0 or 1 for pin GP4
; B3 enter 0 or 1 for pin GP3
; B2 enter 0 or 1 for pin GP2
; B1 enter 0 or 1 for pin GP1
; B0 enter 0 or 1 for pin GP0
IO_LATCH MACRO B6, B5, B4, B3, B2, B1, B0
TEMP SET (((((B6 << 1) + B5) << 1) + B4) << 1) + B3
GPLAT SET (((((TEMP << 1) + B2) << 1) + B1) << 1) + B0
ENDM
;*******************************************************************************
; IO_FUNCTION
;
; Call this macro to set the pin function to analog or digital. Macro
; parameters are:
;
; B3 enter ANALOG or DIGITAL for pin AN3
; B2 enter ANALOG or DIGITAL for pin AN2
; B1 enter ANALOG or DIGITAL for pin AN1
; B0 enter ANALOG or DIGITAL for pin AN0
IO_FUNCTION MACRO B3, B2, B1, B0
IF DEVICE_NUM == MCP2502X
ADCON1 SET 0x0F
ELSE
ADCON1 SET (ADCON1 & 0xF0) | (((((B3 << 1) + B2) << 1) + B1) << 1) + B0
ENDIF
ENDM
;*******************************************************************************
; IO_XMIT_ON_CHANGE
;
; Call this macro to set the Transmit on Change for each pin. Macro parameters
; are:
;
; B7 enter DISABLE, IO_RISE, or IO_FALL for pin GP7
; B6 enter DISABLE, IO_RISE, or IO_FALL for pin GP6
; B5 enter DISABLE, IO_RISE, or IO_FALL for pin GP5
; B4 enter DISABLE, IO_RISE, or IO_FALL for pin GP4
; B3 enter DISABLE, IO_RISE, or IO_FALL for pin GP3
; B2 enter DISABLE, IO_RISE, or IO_FALL for pin GP2
; B1 enter DISABLE, IO_RISE, or IO_FALL for pin GP1
; B0 enter DISABLE, IO_RISE, or IO_FALL for pin GP0
IO_XMIT_ON_CHANGE MACRO B7, B6, B5, B4, B3, B2, B1, B0
TEMP SET ((((((B7&1) << 1) + (B6&1)) << 1) + (B5&1)) << 1) + (B4&1)
IOINTEN SET (((((((TEMP << 1) + (B3&1)) << 1) + (B2&1)) << 1) + (B1&1)) << 1) + (B0&1)
TEMP SET ((((((B7&2) <<1) + (B6&2)) << 1) + (B5&2)) << 1) + (B4&2)
IOINTPO SET (((((((TEMP << 1) + (B3&2)) << 1) + (B2&2)) << 1) + (B1&2)) << 1) + (B0&2)
ENDM
;*******************************************************************************
; IO_WEAK_PULLUPS
;
; Call this macro to configure weak pull-ups. Macro parameters are:
;
; MODE enter ENABLED or DISABLED
IO_WEAK_PULLUPS MACRO MODE
IF MODE == 0
OPTREG1 SET (OPTREG1 & 0x7F) | 0x80
ELSE
OPTREG1 SET (OPTREG1 & 0x7F)
ENDIF
ENDM
;*******************************************************************************
; PWM1
;
; Call this macro to configure PWM1. Macro parameters are:
;
; TMRON enter ENABLED or DISABLED
; PRESCALER Timer Prescaler; enter 1, 4, or 0x10
; PERIOD PWM Period; enter a value from 0 to 0xFF
; DUTY_CYCLE PWM Duty Cycle; enter a value from 0 to 0x3FF
PWM1 MACRO TMRON, PRESCALER, PERIOD, DUTY_CYCLE
IF PRESCALER == 0x10
TEMP SET 0x20
ELSE
IF PRESCALER == 4
TEMP SET 0x10
ELSE
TEMP SET 0x00
ENDIF
ENDIF
T1CON SET (TMRON << 7) | TEMP | (DUTY_CYCLE & 0x03)
PR1 SET PERIOD
PWM1DCH SET DUTY_CYCLE >> 2
ENDM
;*******************************************************************************
; PWM2
;
; Call this macro to configure PWM2. Macro parameters are:
;
; TMRON enter ENABLED or DISABLED
; PRESCALER Timer Prescaler; enter 1, 4, or 0x10
; PERIOD PWM Period; enter a value from 0 to 0xFF
; DUTY_CYCLE PWM Duty Cycle; enter a value from 0 to 0x3FF
PWM2 MACRO TMRON, PRESCALER, PERIOD, DUTY_CYCLE
IF PRESCALER == 0x10
TEMP SET 0x20
ELSE
IF PRESCALER == 4
TEMP SET 0x10
ELSE
TEMP SET 0x00
ENDIF
ENDIF
T2CON SET (TMRON << 7) | TEMP | (DUTY_CYCLE & 0x03)
PR2 SET PERIOD
PWM2DCH SET DUTY_CYCLE >> 2
ENDM
;*******************************************************************************
; ADC_SETUP
;
; Call this macro to set up the ADC. Macro parameters are:
;
; MODE enter ENABLED or DISABLED
; SEQ_DELAY Minimum Sequence Delay; enter TOSC32, TOSC64, TOSC128,
; TOSC256, TOSC512, TOSC1024, TOSC2048, or TOSC4096
; CLOCK_SOURCE Clock Source; enter ADC_FOSC_2, ADC_FOSC_8, ADC_FOSC_32,
; or ADC_FRC
; VREF_POS Vref+ Source; enter VDD or EXTERNAL
; VREF_NEG Vref- Source; enter VSS or EXTERNAL
; TIME Acquisition Time; enter X1_64TOSC, X2_64TOSC, X4_64TOSC,
; or X8_64TOSC
;
; Note: Be sure to call the macro IO_FUNCTION to configure the pins as
; analog or digital.
ADC_SETUP MACRO MODE, SEQ_DELAY, CLOCK_SOURCE, VREF_POS, VREF_NEG, TIME
IF DEVICE_NUM == MCP2502X
ADCON0 SET 0x00
ADCON1 SET 0x0F
OPTREG1 SET (OPTREG1 & 0xFC)
ELSE
ADCON0 SET (MODE << 7) + SEQ_DELAY
TEMP SET CLOCK_SOURCE + (VREF_NEG << 5) + (VREF_POS << 4)
ADCON1 SET (ADCON1 & 0x0F) | TEMP
OPTREG1 SET (OPTREG1 & 0xFC) | TIME
ENDIF
ENDM
;*******************************************************************************
; ADC_COMPARES
;
; Call this macro to set up the ADC compare values. Macro parameters are:
;
; CHANNEL0 enter a value from 0 to 0x3FF
; CHANNEL1 enter a value from 0 to 0x3FF
; CHANNEL2 enter a value from 0 to 0x3FF
; CHANNEL3 enter a value from 0 to 0x3FF
ADC_COMPARES MACRO CHANNEL0, CHANNEL1, CHANNEL2, CHANNEL3
IF DEVICE_NUM == MCP2502X
ADCMP0L SET 0x00
ADCMP0H SET 0x00
ADCMP1L SET 0x00
ADCMP1H SET 0x00
ADCMP2L SET 0x00
ADCMP2H SET 0x00
ADCMP3L SET 0x00
ADCMP3H SET 0x00
ELSE ;IF DEVICE_NUM == MCP2505X
ADCMP0L SET (CHANNEL0 & 0x003) << 6
ADCMP0H SET (CHANNEL0 & 0x3FC) >> 2
ADCMP1L SET (CHANNEL1 & 0x003) << 6
ADCMP1H SET (CHANNEL1 & 0x3FC) >> 2
ADCMP2L SET (CHANNEL2 & 0x003) << 6
ADCMP2H SET (CHANNEL2 & 0x3FC) >> 2
ADCMP3L SET (CHANNEL3 & 0x003) << 6
ADCMP3H SET (CHANNEL3 & 0x3FC) >> 2
ENDIF
ENDM
;*******************************************************************************
; SET_USER#
;
; Call these macros to set the user data values. Macro parameters are:
;
; VALUE enter a value from 0 to 0xFF
SET_USER0 MACRO VALUE
USER0 SET VALUE
ENDM
SET_USER1 MACRO VALUE
USER1 SET VALUE
ENDM
SET_USER2 MACRO VALUE
USER2 SET VALUE
ENDM
SET_USER3 MACRO VALUE
USER3 SET VALUE
ENDM
SET_USER4 MACRO VALUE
USER4 SET VALUE
ENDM
SET_USER5 MACRO VALUE
USER5 SET VALUE
ENDM
SET_USER6 MACRO VALUE
USER6 SET VALUE
ENDM
SET_USER7 MACRO VALUE
USER7 SET VALUE
ENDM
SET_USER8 MACRO VALUE
USER8 SET VALUE
ENDM
SET_USER9 MACRO VALUE
USER9 SET VALUE
ENDM
SET_USERA MACRO VALUE
USERA SET VALUE
ENDM
SET_USERB MACRO VALUE
USERB SET VALUE
ENDM
SET_USERC MACRO VALUE
USERC SET VALUE
ENDM
SET_USERD MACRO VALUE
USERD SET VALUE
ENDM
SET_USERE MACRO VALUE
USERE SET VALUE
ENDM
SET_USERF MACRO VALUE
USERF SET VALUE
ENDM
;*******************************************************************************
; GENERATE
;
; Call this macro after using all of the other macros to configure the device.
; This macro will actually generate the hex file output to configure the
; device using a Device Programmer. This macro has no parameters.
GENERATE MACRO
TEMP SET IOINTEN + IOINTPO + GPLAT + RES_03 + OPTREG1 + T1CON
TEMP SET TEMP + T2CON + PR1 + PR2 + PWM1DCH + PWM2DCH + CNF1
TEMP SET TEMP + CNF2 + CNF3 + ADCON0 + ADCON1 + STCON + OPTREG2
TEMP SET TEMP + RES_12 + RES_13 + RXMSIDH + RXMSIDL + RXMEID8
TEMP SET TEMP + RXMEID0 + RXF0SIDH + RXF0SIDL + RXF0EID8 + RXF0EID0
TEMP SET TEMP + RXF1SIDH + RXF1SIDL + RXF1EID8 + RXF1EID0 + TXID0SIDH
TEMP SET TEMP + TXID0SIDL + TXID0EID8 + TXID0EID0 + TXID1SIDH
TEMP SET TEMP + TXID1SIDL + TXID1EID8 + TXID1EID0 + TXID2SIDH
TEMP SET TEMP + TXID2SIDL + TXID2EID8 + TXID2EID0 + ADCMP3H + ADCMP3L
TEMP SET TEMP + ADCMP2H + ADCMP2L + ADCMP1H + ADCMP1L + ADCMP0H + ADCMP0L
TEMP SET TEMP + GPDDR + USER0 + USER1 + USER2 + USER3 + USER4 + USER5
TEMP SET TEMP + USER6 + USER7 + USER8 + USER9 + USERA + USERB + USERC
TEMP SET TEMP + USERD + USERE + USERF
CRCSUM SET (-TEMP) & 0xFF
; EXPAND
DATA 0x34 | ((IOINTEN & 0xFF) << 8)
DATA 0x34 | ((IOINTPO & 0xFF) << 8)
DATA 0x34 | ((GPLAT & 0xFF) << 8)
DATA 0x34 | ((RES_03 & 0xFF) << 8)
DATA 0x34 | ((OPTREG1 & 0xFF) << 8)
DATA 0x34 | ((T1CON & 0xFF) << 8)
DATA 0x34 | ((T2CON & 0xFF) << 8)
DATA 0x34 | ((PR1 & 0xFF) << 8)
DATA 0x34 | ((PR2 & 0xFF) << 8)
DATA 0x34 | ((PWM1DCH & 0xFF) << 8)
DATA 0x34 | ((PWM2DCH & 0xFF) << 8)
DATA 0x34 | ((CNF1 & 0xFF) << 8)
DATA 0x34 | ((CNF2 & 0xFF) << 8)
DATA 0x34 | ((CNF3 & 0xFF) << 8)
DATA 0x34 | ((ADCON0 & 0xFF) << 8)
DATA 0x34 | ((ADCON1 & 0xFF) << 8)
DATA 0x34 | ((STCON & 0xFF) << 8)
DATA 0x34 | ((OPTREG2 & 0xFF) << 8)
DATA 0x34 | ((RES_12 & 0xFF) << 8)
DATA 0x34 | ((RES_13 & 0xFF) << 8)
DATA 0x34 | ((RXMSIDH & 0xFF) << 8)
DATA 0x34 | ((RXMSIDL & 0xFF) << 8)
DATA 0x34 | ((RXMEID8 & 0xFF) << 8)
DATA 0x34 | ((RXMEID0 & 0xFF) << 8)
DATA 0x34 | ((RXF0SIDH & 0xFF) << 8)
DATA 0x34 | ((RXF0SIDL & 0xFF) << 8)
DATA 0x34 | ((RXF0EID8 & 0xFF) << 8)
DATA 0x34 | ((RXF0EID0 & 0xFF) << 8)
DATA 0x34 | ((RXF1SIDH & 0xFF) << 8)
DATA 0x34 | ((RXF1SIDL & 0xFF) << 8)
DATA 0x34 | ((RXF1EID8 & 0xFF) << 8)
DATA 0x34 | ((RXF1EID0 & 0xFF) << 8)
DATA 0x34 | ((TXID0SIDH & 0xFF) << 8)
DATA 0x34 | ((TXID0SIDL & 0xFF) << 8)
DATA 0x34 | ((TXID0EID8 & 0xFF) << 8)
DATA 0x34 | ((TXID0EID0 & 0xFF) << 8)
DATA 0x34 | ((TXID1SIDH & 0xFF) << 8)
DATA 0x34 | ((TXID1SIDL & 0xFF) << 8)
DATA 0x34 | ((TXID1EID8 & 0xFF) << 8)
DATA 0x34 | ((TXID1EID0 & 0xFF) << 8)
DATA 0x34 | ((TXID2SIDH & 0xFF) << 8)
DATA 0x34 | ((TXID2SIDL & 0xFF) << 8)
DATA 0x34 | ((TXID2EID8 & 0xFF) << 8)
DATA 0x34 | ((TXID2EID0 & 0xFF) << 8)
DATA 0x34 | ((ADCMP3H & 0xFF) << 8)
DATA 0x34 | ((ADCMP3L & 0xFF) << 8)
DATA 0x34 | ((ADCMP2H & 0xFF) << 8)
DATA 0x34 | ((ADCMP2L & 0xFF) << 8)
DATA 0x34 | ((ADCMP1H & 0xFF) << 8)
DATA 0x34 | ((ADCMP1L & 0xFF) << 8)
DATA 0x34 | ((ADCMP0H & 0xFF) << 8)
DATA 0x34 | ((ADCMP0L & 0xFF) << 8)
DATA 0x34 | ((GPDDR & 0xFF) << 8)
DATA 0x34 | ((USER0 & 0xFF) << 8)
DATA 0x34 | ((USER1 & 0xFF) << 8)
DATA 0x34 | ((USER2 & 0xFF) << 8)
DATA 0x34 | ((USER3 & 0xFF) << 8)
DATA 0x34 | ((USER4 & 0xFF) << 8)
DATA 0x34 | ((USER5 & 0xFF) << 8)
DATA 0x34 | ((USER6 & 0xFF) << 8)
DATA 0x34 | ((USER7 & 0xFF) << 8)
DATA 0x34 | ((USER8 & 0xFF) << 8)
DATA 0x34 | ((USER9 & 0xFF) << 8)
DATA 0x34 | ((USERA & 0xFF) << 8)
DATA 0x34 | ((USERB & 0xFF) << 8)
DATA 0x34 | ((USERC & 0xFF) << 8)
DATA 0x34 | ((USERD & 0xFF) << 8)
DATA 0x34 | ((USERE & 0xFF) << 8)
DATA 0x34 | ((USERF & 0xFF) << 8)
DATA 0x34 | ((CRCSUM & 0xFF) << 8)
ENDM
LIST
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -