| The 
            8052 microcontroller is the 8051's "big brother." It is a slightly 
            more powerful microcontroller, sporting a number of additional 
            features which the developer may make use of:  
              
            256 
            bytes of Internal RAM (compared to 128 in the standard 8051). 
            
            A 
            third 16-bit timer, capable of a number of new operation modes and 
            16-bit reloads. 
            
            Additional SFRs to support the functionality offered by the third 
            timer.  That's 
            really about all there is to the difference between the 8051 and 
            8052. The remainder of this tutorial will explain these additional 
            features offered by the 8052, and how they are used within user 
            programs. Throughout this tutorial, it is assumed that you already 
            have read the 8051 Tutorial and have a thorough understanding of it. The 
            standard 8051 microcontroller contains 128 bytes of Internal RAM 
            that are available to the developer as working memory for variables 
            and/or for the operating stack. Instructions that refer to addresses 
            in the range of 00h through 7Fh refer to the 8051's Internal RAM, 
            while addresses in the range of 80h through FFh refer to Special 
            Function Registers (SFRs). 
            Although the 8052 has 256 bytes of Internal RAM, the above method of 
            referrencing them remains true. Any address between 00h and 7Fh 
            refers to Internal RAM whereas address in the range of 80h through 
            FFh refer to SFRs. The 
            8052's additional Internal RAM may only be referred by Indirect 
            Addressing. Indirect addressing always refers to Internal RAM, never 
            to an SFR. Thus, 
            to read the value contained in Internal RAM address 90h, the 
            developer would need to code something along the lines of the 
            following:  MOV 
            R0,#90h ;Set the indirect address to 90h MOV 
            A,@R0 ;Read the contents of Internal RAM pointed to by R0 The 
            above code first assigns the value 90h to the register R0. It 
            subsequently reads, indirectly, the contents of the address 
            contained in R0 (90h). Thus, after these two instructions have 
            executed, the Accumulator will contain the value of Internal RAM 
            address 90h. It is 
            very important to understand that the above code is not the same as 
            the following:  MOV 
            A,90h ;Reads the contents of SFR 90h (P1) This 
            instruction uses direct addressing; recall that direct addressing 
            reads Internal RAM when the address is in the range of 00h through 
            7Fh, and reads an SFR when the address is in the range of 80h 
            through FFh. Thus in the case of this second example, the move 
            instruction reads the value of SFR 90h-which happens to be P1 (I/O 
            Port 1). In 
            addition to the 8051's standard 21 SFRs, the 8052 adds an additional 
            5 SFRs related to the 8052's third timer. All of the original 8051 
            SFRs function exactly as they do in the 8051-the 8052 simply adds 
            new SFRs, it doesn't change the definition of the standard SFRs. The 
            five new SFRs are in the range of C8h to CDh (SFR C9h is not 
            defined). 
             
            The operation of Timer 2 (T2) is controlled almost 
            entirely by the T2CON SFR, at address C8h. Note that since this SFR 
            is evenly divisible by 8 that it is bit-addressable. 
              
              
                | BIT | NAME | BIT ADDRESS | DESCRIPTION |  
                | 7 | TF2 | CFh | Timer 2 Overflow. This bit is set when 
                  T2 overflows. When T2 interrupt is enabled, this bit will 
                  cause the interrupt to be triggered. This bit will not be set 
                  if either TCLK or RCLK bits are set. |  
                | 6 | EXF2 | CEh | Timer 2 External Flag. Set by a reload 
                  or capture caused by a 1-0 transition on T2EX (P1.1), but only 
                  when EXEN2 is set. When T2 interrupt is enabled, this bit will 
                  cause the interrupt to be triggered. |  
                | 5 | RCLK | CDh | Timer 2 Receive Clock. When this bit 
                  is set, Timer 2 will be used to determine the serial port 
                  receive baud rate. When clear, Timer 1 will be 
              used. |  
                | 4 | TCLK | CCh | Timer 2 Receive Clock. When this bit 
                  is set, Timer 2 will be used to determine the serial port 
                  transmit baud rate. When clear, Timer 1 will be 
              used. |  
                | 3 | EXEN2 | CBh | Timer 2 External Enable. When set, a 
                  1-0 transition on T2EX (P1.1) will cause a capture or reload 
                  to occur. |  
                | 2 | TR2 | CAh | Timer 2 Run. When set, timer 2 will be 
                  turned on. Otherwise, it is turned off. |  
                | 1 | C/T2 | C9h | Timer 2 Counter/Interval Timer. If 
                  clear, Timer 2 is an interval counter. If set, Timer 2 is 
                  incremented by 1-0 transition on T2 (P1.0). |  
                | 0 | CP/RL2 | C8h | Timer 2 Capture/Reload. If clear, auto 
                  reload occurs on timer 2 overflow, or T2EX 1-0 transition if 
                  EXEN2 is set. If set, a capture will occur on a 1-0 transition 
                  of T2EX if EXEN2 is set. |    Timer 2 may be used 
            as a baud rate generator. This is accomplished by setting either 
            RCLK (T2CON.5) or TCLK (T2CON.4).  With the standard 
            8051, Timer 1 is the only timer which may be used to determine the 
            baud rate of the serial port. Additionally, the receive and transmit 
            baud rate must be the same.  With the 8052, 
            however, the user may configure the serial port to receive at one 
            baud rate and transmit with another. For example, if RCLK is set and 
            TCLK is cleared, serial data will be received at the baud rate 
            determined by Timer 2 whereas the baud rate of transmitted data will 
            be determined by Timer 1.  Determining the 
            auto-reload values for a specific baud rate is discussed in Serial 
            Port Operation; the only difference is that in the case of Timer 2, 
            the auto-reload value is placed in RCAP2H and RCAP2L, and the value 
            is a 16-bit value rather than an 8-bit value.  NOTE: When Timer 2 is 
            used as a baud rate generator (either TCLK or RCLK are set), the 
            Timer 2 Overflow Flag (TF2) will not be set.  The first mode in 
            which Timer 2 may be used is Auto-Reload. The auto-reload mode 
            functions just like Timer 0 and Timer 1 in auto-reload mode, except 
            that the Timer 2 auto-relaod mode performs a full 16-bit reload 
            (recall that Timer 0 and Timer 1 only have 8-bit reload values). 
            When a reload occurs, the value of TH2 will be reloaded with the 
            value contained in RCAP2H and the value of TL2 will be reloaded with 
            the value contained in RCAP2L.  To operate Timer 2 in 
            auto-reload mode, the CP/RL2 bit (T2CON.0) must be clear. In this 
            mode, Timer 2 (TH2/TL2) will be reloaded with the reload value 
            (RCAP2H/RCAP2L) whenever Timer 2 overflows; that is to say, whenever 
            Timer 2 overflows from FFFFh back to 0000h. An overflow of Timer 2 
            will cause the TF2 bit to be set, which will cause an interrupt to 
            be triggered, if Timer 2 interrupt is enabled. Note that TF2 will 
            not be set on an overflow condition if either RCLK or TCLK (T2CON.5 
            or T2CON.4) are set.  Additionally, by also 
            setting EXEN2 (T2CON.3), a reload will also occur whenever a 1-0 
            transition is detected on T2EX (P1.1). A reload which occurs as a 
            result of such a transition will cause the EXF2 (T2CON.6) flag to be 
            set, triggering a Timer 2 interrupt if said interrupt has been 
            enabled.  A new mode specific 
            to Timer 2 is called "Capture Mode." As the name implies, this mode 
            captures the value of Timer 2 (TH2 and TL2) into the capture SFRs 
            (RCAP2H and RCAP2L). To put Timer 2 in capture mode, CP/RL2 
            (T2CON.0) must be set, as must be EXEN2 (T2CON.3).  When configured as 
            mentioned above, a capture will occur whenever a 1-0 transition is 
            detected on T2EX (P1.1). At the moment the transition is detected, 
            the current values of TH2 and TL2 will be copied into RCAP2H and 
            RCAP2L, respectively. At the same time, the EXF2 (T2CON.6) bit will 
            be set, which will trigger an interrupt if Timer 2 interrupt is 
            enabled.  NOTE 1: Note that 
            even in capture mode, an overflow of Timer 2 will result in TF2 
            being set and an interrupt being triggered. NOTE 2: Capture mode 
            is an efficient way to measure the time between events. At the 
            moment that an event occurs, the current value of Timer 2 will be 
            copied into RCAP2H/L. However, Timer 2 will not stop and an 
            interrupt will be triggered. Thus your interrupt routine may copy 
            the value of RCAP2H/L to a temporary holding variable without having 
            to stop Timer 2. When another capture occurs, your interrupt can 
            take the difference of the two values to determine the time 
            transpired. Again, the main advantage is that you don't have to stop 
            timer 2 to read its value, as is the case with timer 0 and timer 1.
             As is the case with 
            the other two timers, timer 2 can be configured to trigger and 
            interrupt. In fact, the text above indicates a number of situations 
            that can trigger a timer 2 interrupt.  To enable Timer 2 
            interrupt, set ET2 (IE.5). This bit of IE is only valid on an 8052. 
            Similarly, the priority of Timer 2 interrupt can be configured using 
            PT2 (IP.5). As always, be sure to also set EA (IE.7) when enabling 
            any interrupt.  Once Timer 2 
            interrupt has been enabled, a Timer 2 interrupt will be triggered 
            whenever TF2 (T2CON.7) or EXF2 (T2CON.6) are set. The Timer 2 
            Interrupt routine must be placed at 002Bh in code memory.  |