#ifndef __ADUC812__H
#define __ADUC812__H

/*  BYTE Register  */
__sfr __at ( 0x80 )  P0       ;
__sfr __at ( 0x81 )  SP       ;
__sfr __at ( 0x82 )  DPL      ;
__sfr __at ( 0x83 )  DPH      ;
__sfr __at ( 0x84 )  DPP      ;
__sfr __at ( 0x87 )  PCON     ;
__sfr __at ( 0x88 )  TCON     ;
__sfr __at ( 0x89 )  TMOD     ;
__sfr __at ( 0x8A )  TL0      ;
__sfr __at ( 0x8B )  TL1      ;
__sfr __at ( 0x8C )  TH0      ;
__sfr __at ( 0x8D )  TH1      ;
__sfr __at ( 0x90 )  P1       ;
__sfr __at ( 0x98 )  SCON     ;
__sfr __at ( 0x99 )  SBUF     ;
__sfr __at ( 0x9A )  I2CDAT   ;
__sfr __at ( 0x9B )  I2CADD   ;
__sfr __at ( 0xA0 )  P2       ;
__sfr __at ( 0xA8 )  IE       ;
__sfr __at ( 0xA9 )  IE2      ;
__sfr __at ( 0xB0 )  P3       ;
__sfr __at ( 0xB8 )  IP       ;
__sfr __at ( 0xB9 )  ECON     ;
__sfr __at ( 0xBA )  ETIM1    ;
__sfr __at ( 0xBB )  ETIM2    ;
__sfr __at ( 0xC4 )  ETIM3    ;
__sfr __at ( 0xBC )  EDATA1   ;
__sfr __at ( 0xBD )  EDATA2   ;
__sfr __at ( 0xBE )  EDATA3   ;
__sfr __at ( 0xBF )  EDATA4   ;
__sfr __at ( 0xC0 )  WDCON    ;
__sfr __at ( 0xC6 )  EADRL    ;
__sfr __at ( 0xC8 )  T2CON    ;
__sfr __at ( 0xCA )  RCAP2L   ;
__sfr __at ( 0xCB )  RCAP2H   ;
__sfr __at ( 0xCC )  TL2      ;
__sfr __at ( 0xCD )  TH2      ;
__sfr __at ( 0xD0 )  PSW      ;
__sfr __at ( 0xD2 )  DMAL     ;
__sfr __at ( 0xD3 )  DMAH     ;
__sfr __at ( 0xD4 )  DMAP     ;
__sfr __at ( 0xD8 )  ADCCON2  ;
__sfr __at ( 0xD9 )  ADCDATAL ;
__sfr __at ( 0xDA )  ADCDATAH ;
__sfr __at ( 0xDF )  PSMCON   ;
__sfr __at ( 0xE0 )  ACC      ;
__sfr __at ( 0xE8 )  I2CCON   ;
__sfr __at ( 0xEF )  ADCCON1  ;
__sfr __at ( 0xF0 )  B        ;
__sfr __at ( 0xF1 )  ADCOFSL  ;
__sfr __at ( 0xF2 )  ADCOFSH  ;
__sfr __at ( 0xF3 )  ADCGAINL ;
__sfr __at ( 0xF4 )  ADCGAINH ;
__sfr __at ( 0xF5 )  ADCCON3  ;
__sfr __at ( 0xF7 )  SPIDAT   ;
__sfr __at ( 0xF8 )  SPICON   ;
__sfr __at ( 0xF9 )  DAC0L    ;
__sfr __at ( 0xFA )  DAC0H    ;
__sfr __at ( 0xFB )  DAC1L    ;
__sfr __at ( 0xFC )  DAC1H    ;
__sfr __at ( 0xFD )  DACCON   ;

/* BIT Register..... */
/* TCON */
__sbit __at ( 0x8F ) TF1      ;
__sbit __at ( 0x8E ) TR1      ;
__sbit __at ( 0x8D ) TF0      ;
__sbit __at ( 0x8C ) TR0      ;
__sbit __at ( 0x8B ) IE1      ;
__sbit __at ( 0x8A ) IT1      ;
__sbit __at ( 0x89 ) IE0      ;
__sbit __at ( 0x88 ) IT0      ;
/* P1 */                  
__sbit __at ( 0x91 ) T2EX     ;
__sbit __at ( 0x90 ) T2       ;
/* SCON */                
__sbit __at ( 0x9F ) SM0      ;
__sbit __at ( 0x9E ) SM1      ;
__sbit __at ( 0x9D ) SM2      ;
__sbit __at ( 0x9C ) REN      ;
__sbit __at ( 0x9B ) TB8      ;
__sbit __at ( 0x9A ) RB8      ;
__sbit __at ( 0x99 ) TI       ;
__sbit __at ( 0x98 ) RI       ;
/* IE */                  
__sbit __at ( 0xAF ) EA       ;
__sbit __at ( 0xAE ) EADC     ;
__sbit __at ( 0xAD ) ET2      ;
__sbit __at ( 0xAC ) ES       ;
__sbit __at ( 0xAB ) ET1      ;
__sbit __at ( 0xAA ) EX1      ;
__sbit __at ( 0xA9 ) ET0      ;
__sbit __at ( 0xA8 ) EX0      ;
/* P3 */                  
__sbit __at ( 0xB7 ) RD       ;
__sbit __at ( 0xB6 ) WR       ;
__sbit __at ( 0xB5 ) T1       ;
__sbit __at ( 0xB4 ) T0       ;
__sbit __at ( 0xB3 ) INT1     ;
__sbit __at ( 0xB2 ) INT0     ;
__sbit __at ( 0xB1 ) TXD      ;
__sbit __at ( 0xB0 ) RXD      ;
/* IP */                  
__sbit __at ( 0xBF ) PSI      ;
__sbit __at ( 0xBE ) PADC     ;
__sbit __at ( 0xBD ) PT2      ;
__sbit __at ( 0xBC ) PS       ;
__sbit __at ( 0xBB ) PT1      ;
__sbit __at ( 0xBA ) PX1      ;
__sbit __at ( 0xB9 ) PT0      ;
__sbit __at ( 0xB8 ) PX0      ;
/* WDCON */               
__sbit __at ( 0xC7 ) PRE2     ;
__sbit __at ( 0xC6 ) PRE1     ;
__sbit __at ( 0xC5 ) PRE0     ;
__sbit __at ( 0xC3 ) WDR1     ;
__sbit __at ( 0xC2 ) WDR2     ;
__sbit __at ( 0xC1 ) WDS      ;
__sbit __at ( 0xC0 ) WDE      ;
/* T2CON */               
__sbit __at ( 0xCF ) TF2      ;
__sbit __at ( 0xCE ) EXF2     ;
__sbit __at ( 0xCD ) RCLK     ;
__sbit __at ( 0xCC ) TCLK     ;
__sbit __at ( 0xCB ) XEN      ;
__sbit __at ( 0xCA ) TR2      ;
__sbit __at ( 0xC9 ) CNT2     ;
__sbit __at ( 0xC8 ) CAP2     ;
/* PSW */                 
__sbit __at ( 0xD7 ) CY       ;
__sbit __at ( 0xD6 ) AC       ;
__sbit __at ( 0xD5 ) F0       ;
__sbit __at ( 0xD4 ) RS1      ;
__sbit __at ( 0xD3 ) RS0      ;
__sbit __at ( 0xD2 ) OV       ;
__sbit __at ( 0xD1 ) F1       ;
__sbit __at ( 0xD0 ) P        ;
/* ADCCON2 */             
__sbit __at ( 0xDF ) ADCI     ;
__sbit __at ( 0xDE ) DMA      ;
__sbit __at ( 0xDD ) CCONV    ;
__sbit __at ( 0xDC ) SCONV    ;
__sbit __at ( 0xDB ) CS3      ;
__sbit __at ( 0xDA ) CS2      ;
__sbit __at ( 0xD9 ) CS1      ;
__sbit __at ( 0xD8 ) CS0      ;
/* I2CCON */              
__sbit __at ( 0xEF ) MDO      ;
__sbit __at ( 0xEE ) MDE      ;
__sbit __at ( 0xED ) MCO      ;
__sbit __at ( 0xEC ) MDI      ;
__sbit __at ( 0xEB ) I2CM     ;
__sbit __at ( 0xEA ) I2CRS    ;
__sbit __at ( 0xE9 ) I2CTX    ;
__sbit __at ( 0xE8 ) I2CI     ;
/* SPICON */              
__sbit __at ( 0xFF ) ISPI     ;
__sbit __at ( 0xFE ) WCOL     ;
__sbit __at ( 0xFD ) SPE      ;
__sbit __at ( 0xFC ) SPIM     ;
__sbit __at ( 0xFB ) CPOL     ;
__sbit __at ( 0xFA ) CPHA     ;
__sbit __at ( 0xF9 ) SPR1     ;
__sbit __at ( 0xF8 ) SPR0     ;

/* BIT definitions for bits that are not directly accessible */
/* PCON bits */
#define IDL             0x01
#define PD              0x02
#define GF0             0x04
#define GF1             0x08
#define SMOD            0x80

/* TMOD bits */
#define T0_M0           0x01
#define T0_M1           0x02
#define T0_CT           0x04
#define T0_GATE         0x08
#define T1_M0           0x10
#define T1_M1           0x20
#define T1_CT           0x40
#define T1_GATE         0x80

#define T0_MASK         0x0F
#define T1_MASK         0xF0

/* Interrupt numbers: address = (number * 8) + 3 */
#define IE0_VECTOR      0       /* 0x03 external interrupt 0 */
#define TF0_VECTOR      1       /* 0x0b timer 0 */
#define IE1_VECTOR      2       /* 0x13 external interrupt 1 */
#define TF1_VECTOR      3       /* 0x1b timer 1 */
#define SI0_VECTOR      4       /* 0x23 serial port 0 */


#endif //__ADUC812_H