at898252.h


1
/*--------------------------------------------------------------------------
2
AT89S8252
3
4
Header file for the Atmel AT89S8252.
5
Copyright 1996-1997 Keil Elektronik GmbH and Keil Software, Inc.
6
All rights reserved.
7
--------------------------------------------------------------------------*/
8
9
#ifndef AT89S8252_HEADER_FILE
10
#define AT89S8252_HEADER_FILE 1
11
12
/*------------------------------------------------
13
Byte Registers
14
15
Note: Only Registers located on addresses that
16
are evenly divisible by 8 are bit addressable.
17
All other registers use bit masks.
18
------------------------------------------------*/
19
sfr P0      = 0x80;     /* Port 0 */
20
sfr SP      = 0x81;     /* Stack Pointer */
21
sfr DPL     = 0x82;     /* Data Pointer Low Byte */
22
sfr DP0L    = 0x82;     /* Alternate Definition */
23
sfr DPH     = 0x83;     /* Data Pointer High Byte */
24
sfr DP0H    = 0x83;     /* Alternate Definition */
25
sfr DP1L    = 0x84;     /* Data Pointer 1 Low Byte , different to AT89C52 */
26
sfr DP1H    = 0x85;     /* Data Pointer 1 High Byte , different to AT89C52 */
27
sfr SPDR    = 0x86;     /* SPI Data Register , different to AT89C52 */
28
sfr PCON    = 0x87;     /* Power Control Register */
29
30
sfr TCON    = 0x88;     /* Timer Control Register */
31
sfr TMOD    = 0x89;     /* Timer Mode Control Register */
32
sfr TL0     = 0x8A;     /* Timer 0 Low Byte */
33
sfr TL1     = 0x8B;     /* Timer 1 Low Byte */
34
sfr TH0     = 0x8C;     /* Timer 0 High Byte */
35
sfr TH1     = 0x8D;     /* Timer 1 High Byte */
36
37
sfr P1      = 0x90;     /* Port 1 */
38
sfr WMCON   = 0x96;     /* Watchdog and Memory Control Register */
39
sfr SCON    = 0x98;     /* Serial Port Control */
40
sfr SBUF    = 0x99;     /* Serial Port Buffer */
41
42
sfr P2      = 0xA0;     /* Port 2 */
43
sfr IE      = 0xA8;     /* Interrupt Enable Register 0 */
44
sfr SPSR    = 0xAA;     /* SPI Status Register , different to AT89C52 */
45
46
sfr P3      = 0xB0;     /* Port 3 */
47
sfr IP      = 0xB8;     /* Interrupt Priority Register */
48
49
sfr T2CON   = 0xC8;     /* Timer 2 Control */
50
sfr T2MOD  = 0xC9;     /* Timer 2 Mode */
51
sfr RCAP2L  = 0xCA;     /* Timer 2 Capture Low Byte */
52
sfr RCAP2H  = 0xCB;     /* Timer 2 Capture High Byte */
53
sfr TL2     = 0xCC;     /* Timer 2 Low Byte */
54
sfr TH2     = 0xCD;     /* Timer 2 High Byte */
55
56
sfr PSW     = 0xD0;     /* Program Status Word */
57
sfr SPCR    = 0xD5;     /* SPI Control Register , different to AT89C52 */
58
59
sfr ACC     = 0xE0;     /* Accumulator */
60
61
sfr B       = 0xF0;     /* B Register */
62
63
/*------------------------------------------------
64
P0 (0x80) Bit Registers
65
------------------------------------------------*/
66
sbit P0_0 = 0x80;
67
sbit P0_1 = 0x81;
68
sbit P0_2 = 0x82;
69
sbit P0_3 = 0x83;
70
sbit P0_4 = 0x84;
71
sbit P0_5 = 0x85;
72
sbit P0_6 = 0x86;
73
sbit P0_7 = 0x87;
74
75
/*------------------------------------------------
76
PCON (0x87) Bit Values
77
------------------------------------------------*/
78
#define IDL_    0x01    /* Idle Mode Bit: 1=Active */
79
80
#define STOP_   0x02    /* Stop Mode Bit: 1=Active */
81
#define PD_     0x02    /* Alternate definition */
82
83
#define GF0_    0x04    /* General Purpose Flag 0 */
84
#define GF1_    0x08    /* General Purpose Flag 1 */
85
#define SMOD_   0x80    /* Double Baud Rate Bit for use with Timer 1 */
86
87
/*------------------------------------------------
88
TCON (0x88) Bit Registers
89
------------------------------------------------*/
90
sbit IT0  = 0x88;       /* Interrupt 0 Type Control Bit */
91
sbit IE0  = 0x89;       /* Interrupt 0 Edge Flag */
92
sbit IT1  = 0x8A;       /* Interrupt 1 Type Control Bit */
93
sbit IE1  = 0x8B;       /* Interrupt 1 Edge Flag */
94
sbit TR0  = 0x8C;       /* Timer 0 Run Control Bit */
95
sbit TF0  = 0x8D;       /* Timer 0 Overflow Flag */
96
sbit TR1  = 0x8E;       /* Timer 1 Run Control Bit */
97
sbit TF1  = 0x8F;       /* Timer 1 Overflow Flag */
98
99
/*------------------------------------------------
100
TMOD (0x89) Bit Values
101
------------------------------------------------*/
102
#define T0_M0_   0x01   /* Timer 0 Mode Bit 0 */
103
#define T0_M1_   0x02   /* Timer 0 Mode Bit 1 */
104
#define T0_CT_   0x04   /* Timer 0 Counter/Timer Select: 0=Counter, 1=Timer */
105
#define T0_GATE_ 0x08   /* Timer 0 Gate Control */
106
107
#define T1_M0_   0x10   /* Timer 1 Mode Bit 0 */
108
#define T1_M1_   0x20   /* Timer 1 Mode Bit 1 */
109
#define T1_CT_   0x40   /* Timer 1 Counter/Timer Select: 0=Counter, 1=Timer */
110
#define T1_GATE_ 0x80   /* Timer 1 Gate Control */
111
112
#define T1_MASK_ 0xF0   /* Timer 0 Mask */
113
#define T0_MASK_ 0x0F   /* Timer 1 Mask */
114
115
/*------------------------------------------------
116
P1 (0x90) Bit Registers
117
------------------------------------------------*/
118
sbit P1_0 = 0x90;
119
sbit P1_1 = 0x91;
120
sbit P1_2 = 0x92;
121
sbit P1_3 = 0x93;
122
sbit P1_4 = 0x94;
123
sbit P1_5 = 0x95;
124
sbit P1_6 = 0x96;
125
sbit P1_7 = 0x97;
126
127
sbit T2   = 0x90;       /* External input to Timer/Counter 2, clock out */
128
sbit T2EX = 0x91;       /* Timer/Counter 2 capture/reload trigger & dir ctl */
129
130
sbit SS   = 0x94;       /* SPI: SS - Slave port select input */
131
sbit MOSI = 0x95;       /* SPI: MOSI - Master data output, slave data input */
132
sbit MISO = 0x96;       /* SPI: MISO - Master data input, slave data output */
133
sbit SCK  = 0x97;       /* SPI: SCK - Master clock output, slave clock input */
134
135
/*------------------------------------------------
136
WMCON (0x96) Bit Values
137
------------------------------------------------*/
138
#define WDTEN_   0x01
139
140
#define WDTRST_  0x02   /* Watchdog Timer Reset and EEPROM Ready,/Busy Flag */
141
#define EERDY_   0x02   /* Watchdog Timer Reset and EEPROM Ready,/Busy Flag */
142
143
#define DPS_     0x04   /* Data Pointer Select: 0=DP0, 1=DP1 */
144
#define EEMEN_   0x08   /* Internal EEPROM Access Enable: 1=Enabled */
145
#define EEMWE_   0x10   /* Internal EEPROM Write Enable: 1=Enabled */
146
#define PS0_     0x20   /* Prescaler bit 0 for the Watchdog Timer */
147
#define PS1_     0x40   /* Prescaler bit 1 for the Watchdog Timer */
148
#define PS2_     0x80   /* Prescaler bit 2 for the Watchdog Timer */
149
                        /* 000 =   16ms Timeout */
150
                        /* 001 =   32ms Timeout */
151
                        /* 010 =   64ms Timeout */
152
                        /* 011 =  128ms Timeout */
153
                        /* 100 =  256ms Timeout */
154
                        /* 101 =  512ms Timeout */
155
                        /* 110 = 1024ms Timeout */
156
                        /* 111 = 2048ms Timeout */
157
158
/*------------------------------------------------
159
SCON (0x98) Bit Registers
160
------------------------------------------------*/
161
sbit RI   = 0x98;       /* Receive Interrupt Flag */
162
sbit TI   = 0x99;       /* Transmit Interrupt Flag */
163
sbit RB8  = 0x9A;       /* 9th data bit received */
164
sbit TB8  = 0x9B;       /* 9th data bit to be transmitted in modes 2 & 3 */
165
sbit REN  = 0x9C;       /* Receive Enable */
166
sbit SM2  = 0x9D;       /* Serial Port Mode Bit 2 */
167
sbit SM1  = 0x9E;       /* Serial Port Mode Bit 1 */
168
sbit SM0  = 0x9F;       /* Serial Port Mode Bit 0 */
169
170
/*------------------------------------------------
171
P2 (0xA0) Bit Registers
172
------------------------------------------------*/
173
sbit P2_0 = 0xA0;
174
sbit P2_1 = 0xA1;
175
sbit P2_2 = 0xA2;
176
sbit P2_3 = 0xA3;
177
sbit P2_4 = 0xA4;
178
sbit P2_5 = 0xA5;
179
sbit P2_6 = 0xA6;
180
sbit P2_7 = 0xA7;
181
182
/*------------------------------------------------
183
IE (0xA8) Bit Registers
184
------------------------------------------------*/
185
sbit EX0  = 0xA8;       /* External Interrupt 0 Enable: 1=Enabled */
186
sbit ET0  = 0xA9;       /* Timer 0 Interrupt Enable: 1=Enabled */
187
sbit EX1  = 0xAA;       /* External Interrupt 1 Enable: 1=Enabled */
188
sbit ET1  = 0xAB;       /* Timer 1 Interrupt Enable: 1=Enabled */
189
sbit ES   = 0xAC;       /* SPI and UART Interrupt Enable: 1=Enabled */
190
sbit ET2  = 0xAD;       /* Timer 2 Interrupt Enable: 1=Enabled */
191
192
sbit EA   = 0xAF;       /* Global Interrupt Enable: 0=Disable all interrupts */
193
194
/*------------------------------------------------
195
SPSR (0xAA) Bit Values - Reset Value = 0000.0000
196
------------------------------------------------*/
197
#define WCOL_   0x40    /* SPI Write Collision Flag: 1=Collision */
198
#define SPIF_   0x80    /* SPI Interrupt Flag */
199
200
/*------------------------------------------------
201
P3 (0xB0) Bit Registers (Mnemonics & Ports)
202
------------------------------------------------*/
203
sbit P3_0 = 0xB0;
204
sbit P3_1 = 0xB1;
205
sbit P3_2 = 0xB2;
206
sbit P3_3 = 0xB3;
207
sbit P3_4 = 0xB4;
208
sbit P3_5 = 0xB5;
209
sbit P3_6 = 0xB6;
210
sbit P3_7 = 0xB7;
211
212
sbit RXD  = 0xB0;       /* Serial data input */
213
sbit TXD  = 0xB1;       /* Serial data output */
214
sbit INT0 = 0xB2;       /* External interrupt 0 */
215
sbit INT1 = 0xB3;       /* External interrupt 1 */
216
sbit T0   = 0xB4;       /* Timer 0 external input */
217
sbit T1   = 0xB5;       /* Timer 1 external input */
218
sbit WR   = 0xB6;       /* External data memory write strobe */
219
sbit RD   = 0xB7;       /* External data memory read strobe */
220
221
/*------------------------------------------------
222
IP (0xB8) Bit Registers
223
------------------------------------------------*/
224
sbit PX0  = 0xB8;       /* External Interrupt 0 Priority Bit */
225
sbit PT0  = 0xB9;       /* Timer 0 Interrupt Priority Bit */
226
sbit PX1  = 0xBA;       /* External Interrupt 1 Priority Bit */
227
sbit PT1  = 0xBB;       /* Timer 1 Interrupt Priority Bit */
228
sbit PS   = 0xBC;       /* Serial Port Interrupt Priority Bit */   
229
sbit PT2  = 0xBD;       /* Timer 2 Interrupt Priority Bit */
230
231
/*------------------------------------------------
232
T2CON (0xC8) Bit Registers
233
------------------------------------------------*/
234
sbit CP_RL2= 0xC8;      /* 0=Reload, 1=Capture select */
235
sbit C_T2 = 0xC9;       /* 0=Timer, 1=Counter */
236
sbit TR2  = 0xCA;       /* 0=Stop timer, 1=Start timer */
237
sbit EXEN2= 0xCB;       /* Timer 2 external enable */
238
sbit TCLK = 0xCC;       /* 0=Serial clock uses Timer 1 overflow, 1=Timer 2 */
239
sbit RCLK = 0xCD;       /* 0=Serial clock uses Timer 1 overflow, 1=Timer 2 */
240
sbit EXF2 = 0xCE;       /* Timer 2 external flag */
241
sbit TF2  = 0xCF;       /* Timer 2 overflow flag */
242
243
/*------------------------------------------------
244
T2MOD (0xC9) Bit Values
245
------------------------------------------------*/
246
#define DCEN_   0x01    /* 1=Timer 2 can be configured as up/down counter */
247
#define T2OE_   0x02    /* Timer 2 output enable */
248
249
/*------------------------------------------------
250
PSW (0xD0) Bit Registers
251
------------------------------------------------*/
252
sbit P    = 0xD0;       /* Parity Flag */
253
sbit FL   = 0xD1;       /* User Flag */
254
sbit OV   = 0xD2;       /* Overflow Flag */
255
sbit RS0  = 0xD3;       /* Register Bank Select Bit 0 */
256
sbit RS1  = 0xD4;       /* Register Bank Select Bit 1 */
257
sbit F0   = 0xD5;       /* User Flag 0 */
258
sbit AC   = 0xD6;       /* Auxiliary Carry Flag */
259
sbit CY   = 0xD7;       /* Carry Flag */
260
261
/*------------------------------------------------
262
SPCR (0xD5) Bit Values - Reset Value = 0000.01XX
263
------------------------------------------------*/
264
#define SPR0_   0x01    /* SPI Clock Rate Select bit 0 */
265
#define SPR1_   0x02    /* SPI Clock Rate Select bit 1 */
266
                        /* 00 = Fosc / 4   */
267
                        /* 01 = Fosc / 16  */
268
                        /* 10 = Fosc / 64  */
269
                        /* 11 = Fosc / 128 */
270
271
#define CPHA_   0x04    /* SPI Clock Phase */
272
#define CPOL_   0x08    /* SPI Clock Polarity */
273
#define MSTR_   0x10    /* SPI Master/Slave Select: 0=Slave, 1=Master */
274
#define DORD_   0x20    /* SPI Data Order: 0=MSB First, 1=LSB First */
275
#define SPE_    0x40    /* SPI Enable: 0=Disabled, 1=Enabled */
276
#define SPIE_   0x80    /* SPI Interrupt Enable: 0=Disabled, 1=Enabled */
277
278
/*------------------------------------------------
279
Interrupt Vectors:
280
Interrupt Address = (Number * 8) + 3
281
------------------------------------------------*/
282
#define IE0_VECTOR  0  /* 0x03 External Interrupt 0 */
283
#define TF0_VECTOR  1  /* 0x0B Timer 0 */
284
#define IE1_VECTOR  2  /* 0x13 External Interrupt 1 */
285
#define TF1_VECTOR  3  /* 0x1B Timer 1 */
286
#define SIO_VECTOR  4  /* 0x23 Serial port */
287
288
#define TF2_VECTOR  5  /* 0x2B Timer 2 */
289
#define EX2_VECTOR  5  /* 0x2B External Interrupt 2 */
290
291
/*------------------------------------------------
292
------------------------------------------------*/
293
#endif