View previous topic :: View next topic |
Author |
Message |
Ken Macfarlane
Joined: 04 Oct 2004 Posts: 12 Location: Glasgow, Scotland
|
Why are some registers not defined in the devices.h? |
Posted: Mon Oct 11, 2004 9:49 am |
|
|
e.g. OPTION_REG isn't in 16f877.h
Is there some reason why I shouldn't set bits in this register directly i.e. does the generated code keep a private copy of the #undefined registers that I would have to keep updated? I need to know this because I'm converting some Microchip-supplied code from Hitech C, and it obviously does allow direct manipulation of the bits in the regs. |
|
|
Ttelmah Guest
|
Re: Why are some registers not defined in the devices.h? |
Posted: Mon Oct 11, 2004 10:30 am |
|
|
Ken Macfarlane wrote: | e.g. OPTION_REG isn't in 16f877.h
Is there some reason why I shouldn't set bits in this register directly i.e. does the generated code keep a private copy of the #undefined registers that I would have to keep updated? I need to know this because I'm converting some Microchip-supplied code from Hitech C, and it obviously does allow direct manipulation of the bits in the regs. |
You can directly manipulate any register if you want to. The #byte directive, allows you to declare a variable, that sits at any register address required. However the CCS compiler, is really organised on the assumption that you will let _it_ handle such things for you . The features available in the option_reg for instance, are controlled by the EXT_INT_EDGE function, the PORT_B_PULLUPS function, the SET_TIMER0 function, with the RTCC_DIV, and WDT_XX prescaler controls.
The CCS approach, makes it easier to port to another chip latter (in many cases, you can for instance shift 16F87x code, that makes no direct access to the registers, straight in to a 18F45x chip, with little more than a header change. As such it has more in common with 'PC' compilers, than with many of the embedded offerings. The 'downside', is that this conversely, leads to people forgetting the limitations of the hardware that they are working on.
Best Wishes |
|
|
Haplo
Joined: 06 Sep 2003 Posts: 659 Location: Sydney, Australia
|
|
Posted: Mon Oct 11, 2004 5:17 pm |
|
|
This is the header file I sometimes use with PIC16F877, it has almost all the bit/byte definitions (I think I created it from the Microchip file a long time ago). But be careful when using it, as Ttelmah said this will make porting your code to PIC18 family a bit more involved.
Code: |
//Bits.h
#nolist
//----- Register Files------------------------------------------------------
#byte INDF =0x00
#byte TMR0 =0x01
#byte PCL =0x02
#byte STATUS =0x03
#byte FSR =0x04
#byte PORTA =0x05
#byte PORTB =0x06
#byte PORTC =0x07
#byte PORTD =0x08
#byte PORTE =0x09
#byte PCLATH =0x0A
#byte INTCON =0x0B
#byte PIR1 =0x0C
#byte PIR2 =0x0D
#byte TMR1L =0x0E
#byte TMR1H =0x0F
#byte T1CON =0x10
#byte TMR2 =0x11
#byte T2CON =0x12
#byte SSPBUF =0x13
#byte SSPCON =0x14
#byte CCPR1L =0x15
#byte CCPR1H =0x16
#byte CCP1CON =0x17
#byte RCSTA =0x18
#byte TXREG =0x19
#byte RCREG =0x1A
#byte CCPR2L =0x1B
#byte CCPR2H =0x1C
#byte CCP2CON =0x1D
#byte ADRESH =0x1E
#byte ADCON0 =0x1F
#byte OPTION_REG =0x81
#byte TRISA =0x85
#byte TRISB =0x86
#byte TRISC =0x87
#byte PIE1 =0x8C
#byte PIE2 =0x8D
#byte PCON =0x8E
#byte SSPCON2 =0x91
#byte PR2 =0x92
#byte SSPADD =0x93
#byte SSPSTAT =0x94
#byte TXSTA =0x98
#byte SPBRG =0x99
#byte ADRESL =0x9E
#byte ADCON1 =0x9F
#byte EEDATA =0x10C
#byte EEADR =0x10D
#byte EEDATH =0x10E
#byte EEADRH =0x10F
#byte EECON1 =0x18C
#byte EECON2 =0x18D
//----- STATUS Bits --------------------------------------------------------
#bit IRP = 3.7
#bit RP1 = 3.6
#bit RP0 = 3.5
#bit NOT_TO = 3.4
#bit NOT_PD = 3.3
#bit Z = 3.2
#bit DC = 3.1
#bit C = 3.0
//----- INTCON Bits --------------------------------------------------------
#bit GIE = 0xB.7
#bit PEIE = 0xB.6
#bit T0IE = 0xB.5
#bit INTE = 0xB.4
#bit RBIE = 0xB.3
#bit T0IF = 0xB.2
#bit INTF = 0xB.1
#bit RBIF = 0xB.0
//----- PIR1 Bits ----------------------------------------------------------
#bit ADIF = 0xC.6
#bit RCIF = 0xC.5
#bit TXIF = 0xC.4
#bit SSPIF = 0xC.3
#bit CCP1IF = 0xC.2
#bit TMR2IF = 0xC.1
#bit TMR1IF = 0xC.0
//----- PIR2 Bits ----------------------------------------------------------
#bit EEIF = 0xD.4
#bit BCLIF = 0xD.3
#bit CCP2IF = 0xD.0
//----- T1CON Bits ---------------------------------------------------------
#bit T1CKPS1 = 0x10.5
#bit T1CKPS0 = 0x10.4
#bit T1OSCEN = 0x10.3
#bit NOT_T1SYNC = 0x10.2
#bit T1INSYNC = 0x10.2 // Backward compatibility only
#bit T1SYNC = 0x10.2
#bit TMR1CS = 0x10.1
#bit TMR1ON = 0x10.0
//----- T2CON Bits ---------------------------------------------------------
#bit TOUTPS3 = 0x12.6
#bit TOUTPS2 = 0x12.5
#bit TOUTPS1 = 0x12.4
#bit TOUTPS0 = 0x12.3
#bit TMR2ON = 0x12.2
#bit T2CKPS1 = 0x12.1
#bit T2CKPS0 = 0x12.0
//----- SSPCON Bits --------------------------------------------------------
#bit WCOL = 0x14.7
#bit SSPOV = 0x14.6
#bit SSPEN = 0x14.5
#bit CKP = 0x14.4
#bit SSPM3 = 0x14.3
#bit SSPM2 = 0x14.2
#bit SSPM1 = 0x14.1
#bit SSPM0 = 0x14.0
//----- CCP1CON Bits -------------------------------------------------------
#bit CCP1X = 0x17.5
#bit CCP1Y = 0x17.4
#bit CCP1M3 = 0x17.3
#bit CCP1M2 = 0x17.2
#bit CCP1M1 = 0x17.1
#bit CCP1M0 = 0x17.0
//----- RCSTA Bits ---------------------------------------------------------
#bit SPEN = 0x18.7
#bit RX9 = 0x18.6
#bit RC9 = 0x18.6 // Backward compatibility only
#bit NOT_RC8 = 0x18.6 // Backward compatibility only
#bit RC8_9 = 0x18.6 // Backward compatibility only
#bit SREN = 0x18.5
#bit CREN = 0x18.4
#bit ADDEN = 0x18.3
#bit FERR = 0x18.2
#bit OERR = 0x18.1
#bit RX9D = 0x18.0
#bit RCD8 = 0x18.0 // Backward compatibility only
//----- CCP2CON Bits -------------------------------------------------------
#bit CCP2X = 0x1D.5
#bit CCP2Y = 0x1D.4
#bit CCP2M3 = 0x1D.3
#bit CCP2M2 = 0x1D.2
#bit CCP2M1 = 0x1D.1
#bit CCP2M0 = 0x1D.0
//----- ADCON0 Bits --------------------------------------------------------
#bit ADCS1 = 0x1F.7
#bit ADCS0 = 0x1F.6
#bit CHS2 = 0x1F.5
#bit CHS1 = 0x1F.4
#bit CHS0 = 0x1F.3
#bit GO = 0x1F.2
#bit NOT_DONE = 0x1F.2
#bit GO_DONE = 0x1F.2
#bit ADON = 0x1F.0
//----- OPTION_REG Bits ----------------------------------------------------
#bit NOT_RBPU = 0x81.7
#bit INTEDG = 0x81.6
#bit T0CS = 0x81.5
#bit T0SE = 0x81.4
#bit PSA = 0x81.3
#bit PS2 = 0x81.2
#bit PS1 = 0x81.1
#bit PS0 = 0x81.0
//----- PIE1 Bits ----------------------------------------------------------
#bit ADIE = 0x8C.6
#bit RCIE = 0x8C.5
#bit TXIE = 0x8C.4
#bit SSPIE = 0x8C.3
#bit CCP1IE = 0x8C.2
#bit TMR2IE = 0x8C.1
#bit TMR1IE = 0x8C.0
//----- PIE2 Bits ----------------------------------------------------------
#bit EEIE = 0x8D.4
#bit BCLIE = 0x8D.3
#bit CCP2IE = 0x8D.0
//----- PCON Bits ----------------------------------------------------------
#bit NOT_POR = 0x8E.1
#bit NOT_BO = 0x8E.0
#bit NOT_BOR = 0x8E.0
//----- SSPCON2 Bits --------------------------------------------------------
#bit GCEN = 0x91.7
#bit ACKSTAT = 0x91.6
#bit ACKDT = 0x91.5
#bit ACKEN = 0x91.4
#bit RCEN = 0x91.3
#bit PEN = 0x91.2
#bit RSEN = 0x91.1
#bit SEN = 0x91.0
//----- SSPSTAT Bits -------------------------------------------------------
#bit SMP = 0x94.7
#bit CKE = 0x94.6
#bit D = 0x94.5
#bit I2C_DATA = 0x94.5
#bit NOT_A = 0x94.5
#bit NOT_ADDRESS = 0x94.5
#bit D_A = 0x94.5
#bit DATA_ADDRESS = 0x94.5
#bit P = 0x94.4
#bit I2C_STOP = 0x94.4
#bit S = 0x94.3
#bit I2C_START= 0x94.3
#bit R = 0x94.2
#bit I2C_READ = 0x94.2
#bit NOT_W = 0x94.2
#bit NOT_WRITE= 0x94.2
#bit R_W = 0x94.2
#bit READ_WRITE = 0x94.2
#bit UA = 0x94.1
#bit BF = 0x94.0
//----- TXSTA Bits ---------------------------------------------------------
#bit CSRC = 0x98.7
#bit TX9 = 0x98.6
#bit NOT_TX8 = 0x98.6 // Backward compatibility only
#bit TX8_9 = 0x98.6 // Backward compatibility only
#bit TXEN = 0x98.5
#bit SYNC = 0x98.4
#bit BRGH = 0x98.2
#bit TRMT = 0x98.1
#bit TX9D = 0x98.0
#bit TXD8 = 0x98.0 // Backward compatibility only
//----- ADCON1 Bits --------------------------------------------------------
#bit ADFM = 0x9F.7
#bit PCFG3 = 0x9F.3
#bit PCFG2 = 0x9F.2
#bit PCFG1 = 0x9F.1
#bit PCFG0 = 0x9F.0
//----- EECON1 Bits --------------------------------------------------------
#bit EEPGD = 0x18C.7
#bit WRERR = 0x18C.3
#bit WREN = 0x18C.2
#bit WR = 0x18C.1
#bit RD = 0x18C.0
#list
|
|
|
|
alexz
Joined: 17 Sep 2004 Posts: 133 Location: UK
|
|
Posted: Wed Oct 13, 2004 8:22 am |
|
|
What is #nolist and #list for? _________________ Alex |
|
|
SherpaDoug
Joined: 07 Sep 2003 Posts: 1640 Location: Cape Cod Mass USA
|
|
Posted: Wed Oct 13, 2004 9:11 am |
|
|
alexz wrote: | What is #nolist and #list for? |
It controls what gets printed to the listing file. Usually you don't want the header files printed. It saves trees. _________________ The search for better is endless. Instead simply find very good and get the job done. |
|
|
alexz
Joined: 17 Sep 2004 Posts: 133 Location: UK
|
|
Posted: Wed Oct 13, 2004 9:13 am |
|
|
SherpaDoug wrote: | alexz wrote: | What is #nolist and #list for? |
It controls what gets printed to the listing file. Usually you don't want the header files printed. It saves trees. |
thank you _________________ Alex |
|
|
|