Skip to main content

Real Time clock 02





1. Preprocessor Directives:

  • #include <pic.h>: Includes the header file pic.h, which contains definitions and declarations specific to PIC microcontrollers.

2. Variable Declarations:

  • unsigned char count = 0;: Declares an unsigned character variable count and initializes it to 0. This variable is used to keep track of the number of 50ms intervals that have elapsed.

3. main() Function:

  • Initialization:

    • TRISC = 0;: Configures PORTC as output pins.
    • TRISB = 0;: Configures PORTB as output pins.
    • PORTC = 0; PORTB = 0; PORTA = 0;: Clears the output pins on PORTC, PORTB, and PORTA.
    • ADCON1 = 0x07;: Configures the analog-to-digital converter (ADC) module.
    • RA1 = 1; RA2 = 1; RA3 = 1; RA5 = 1;: Activates the common anode segments of the seven-segment display.
    • T0CS = 0;: Selects the internal clock source (Fosc/4) for TMR0.
    • PSA = 0;: Assigns the prescaler to TMR0.
    • PS2 = 1; PS1 = 1; PS0 = 1;: Sets the prescaler to 256, providing a timer tick every 50 milliseconds.
    • TMR0 = 61;: Initializes TMR0 with the value 61 to generate a 50ms delay.
    • RC0 = 1;: Sets the output on RC0.
  • Main Loop:

    • while (1) { ... }: The main loop continues indefinitely.
    • Interrupt Handling:
      • if (T0IF) { ... }: Checks if the TMR0 interrupt flag is set.
      • TMR0 = 61;: Reloads TMR0 with the value 61 to start another 50ms delay.
      • count++;: Increments the count variable.
      • if (count == 20) { ... }: Checks if 20 50ms intervals have elapsed (1 second).
        • switch (count) { ... }: Uses a switch statement to select the appropriate seven-segment display pattern based on the current count value.
        • The case statements within the switch block assign the corresponding pattern to PORTB to display the numbers 0, 1, or 2 on the seven-segment display.
        • count = 0;: Resets the count variable to 0.
      • T0IF = 0;: Clears the TMR0 interrupt flag.

Explanation:

The code implements a simple digital counter that displays the numbers 0, 1, and 2 in sequence on a seven-segment display. The main components of the code are:

  • Timer Initialization: TMR0 is configured as an internal timer with a prescaler of 256, providing a timer tick every 50 milliseconds.
  • Interrupt Handling: The TMR0 interrupt is used to increment a counter and update the display.
  • Display Logic: The switch(count) statement controls the seven-segment display outputs based on the current count value.


#include <pic.h>

unsigned char count=0;

void main()

{
TRISC=0;    // PORTC output
PORTC=0;
TRISB=0;    // PORTC output
PORTB=0;
PORTA=0;
PORTA=0;

ADCON1=0x07;
RA1=1;        // digit 1 on
RA2=1;
RA3=1;
RA5=1;
   

T0CS=0;        // Internal Mode (Fosc/4)
PSA=0;        // Prescaler assigned to TMR0
PS2=1;
PS1=1;
PS0=1;   
   
TMR0=61;    // (256-195=61) for 50mS time
RC0=1;        // output on


while(1)   
{
    if(T0IF==1){
    TMR0=61;
    count++;
        if (count==20){
        switch(count)
        {
   
        case 0:
        PORTB=0x3F;
        break;
       
        case 1:
        PORTB=0x06;
        break;
   
        case 2:
        PORTB=0x5B;
        break;
        }

        count=0;
        }
        T0IF=0;
       
}
}

}


Comments

Popular posts from this blog

ANALOGUE to DIGITAL (A/D) Converter in PIC16F87X Series

ANALOGUE to DIGITAL (A/D) Converter What is a Sample & Sample rate? A "sample" is a single measurement of amplitude. Sample rate is simply the number of samples (or measurements of amplitude) taken per second. Sampling Intervals Quantization The samples are assigned a binary number approximating their sampled value. Quantizing divides up the sampled voltage range into 2n-1 quantizing intervals, where “n” is the number of bits per sample (the sampling resolution). For example, an 8-bit system can identify 28 (256) discrete sampled signal values (255 quantizing intervals). The amplitude of such a signal can occupy the entire quantizing range. A/D Reference Voltages Successive Approximation A/D Example 1 Example 2  Example 3 A/D Converter Modules in PIC16F87X series 28-pin devices has 5 modules. (AN0-AN4)         PIC16F873        PIC16F876 4...

Other PicBasic commands 01

W e shall n o w brief l y look at the remaining PicBasic commands in alphabetical order w hich are useful during the pr o g ram d e v elopment. More details about these commands can be obtained from the PicBasic manual. EEP R OM EEP R OM Location, (constant, constant,….., constant) Thi s comman d store s constant s i n consecut i v e b yte s i n on-chi p EEP R O M memo r y . Th e command on l y w ork s wit h th e PI C microcontroller s tha t h a v e EEP R OM , suc h a s th e PIC16F84 , PIC16F877, etc . Locatio n i s optional , an d i f omitte d th e f irs t EEP R O M locatio n i s assumed . Constant s ca n be numeri c constant s o r strin g constants . String s ar e store d a s consecut i v e b yte s o f ASCI I v alues . An e xampl e i s g i v e n bel o w . EEP R OM 3, (5, 2, 8)        ‘ Store 5 in location 3, ‘ 2 in location 4, and 8 in ‘ location 5 END END St...

Voltmeter

This code to read an analog temperature sensor, convert the reading to a digital value using the ADC, and display the temperature on a 4-digit 7-segment display. The display is updated periodically based on a timer interrupt. 1.Initialization: Setting up ports, configuring ADC, and Timer0. 2.Infinite Loop: Continuously reads analog input and updates the display. 3.ADC Conversion: Reads analog voltage from a sensor. 4.Voltage Calculation: Converts ADC value to voltage. 5.Digit Extraction: Extracts individual digits from the temperature/voltage value. 6.Display Function: Displays the digits on a 4-digit 7-segment display with slight delays. --------------------------------------------- #include <pic.h> // Include the header file for PIC microcontroller family. unsigned char PORTB_value[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; // Array containing values for 7-segment display. unsigned int a2d_value,temp; // Variables for analog to digital conversion and temporary sto...