pic16f877a timer question ccs compiler

Thread Starter

thedarkotaku

Joined Feb 28, 2011
7
i have two questions for anyone on this forum. i've got a 6 7 segment count up clock circuit controlled by a pic16f877a and i was wondering how i would alter the code to get it to count down instead:

Rich (BB code):
#include <16F877A.h>
#fuses xt,NOWDT,PUT,NOBROWNOUT,NOLVP
#use delay(clock = 4000000)
#byte PORTA=0X05
#byte PORTC=0x07
#byte PORTB=0X06
#byte PORTE=0x05
#byte PORTD=0x08
#define A0 PIN_A0
#define A1 PIN_A1
#define A2 PIN_A2
#define A3 PIN_A3
#define A4 PIN_A4
#define A5 PIN_A5


 int sec1,sec2,min1,min2,hour1,hour2;

int counter=125;
int flag=0;


const int table[10]={0b00111111,
            0b00000110,
            0b01011011,
            0b01001111,
            0b01100110,
            0b01101101,
            0b01111101,
            0b00000111,
            0b01111111,
               0b01100111};




void main()
{
PORTB=0X00;
PORTC=0X00;

set_tris_e(0xff);
set_tris_a(0xff);
set_tris_c(0x00);
set_tris_b(0x00);
set_RTCC(6);
setup_counters(RTCC_INTERNAL,RTCC_DIV_32);
enable_interrupts(GLOBAL);


for(;;)
{
PORTB=table[sec1];
PORTC=0X01;
delay_ms(2);

PORTB=table[sec2];
PORTC=0x02;
delay_ms(2);

PORTB=table[min1];
PORTC=0x04;
delay_ms(2);

PORTB=table[min2];
PORTC=0x08;
delay_ms(2);

PORTB=table[hour1];
PORTC=0x10;
delay_ms(2);

PORTB=table[hour2];
PORTC=0x20;
delay_ms(2);




if(flag==1){


            flag=0;
            }
   
 




if(input(A0)==0)  
        {
              disable_interrupts(INT_RTCC);
             if(input(A1)==0){
                             delay_ms(250);
                            if(++min1>9)       {
                                min1=0;
                             
                                           if(++min2>5)  { 
                                                min2=0; 
                                                         }
                                               }
                                     
                           }
             if(input(A2)==0){
                                            delay_ms(250); 
                                             if( ++hour1>9 ){                                                          
                                                         hour1=0; 
                                                         ++hour2;
                                                            }
                                               if( (hour2==2) & (hour1>3) )  {
                                                                 sec1=0;
                                                                 sec2=0;
                                                                 min1=0; 
                                                                 min2=0; 
                                                                 hour1=0; 
                                                                 hour2=0;
                                                                             }     
                                                   
                           }
          }
else if(input(A0)==1){
            enable_interrupts(INT_RTCC);
               }
    }
 }


}


#int_RTCC
void microII()

{                            //void switch_time();
if(--counter>0)return;
counter=125;
flag=1;


if(++sec1>9){
   sec1=0;
            
   if(++sec2>5){
       sec2=0;
                     
       if(++min1>9){
           min1=0;
                             
            if(++min2>5){
                min2=0; 
                                      if( ++hour1>9 )
                                                            {
                                                         hour1=0; 
                                                         ++hour2;
                                                            }
                                               if( (hour2==2) & (hour1>3) )  {
                                                                 sec1=0;
                                                                 sec2=0;
                                                                 min1=0; 
                                                                 min2=0; 
                                                                 hour1=0; 
                                                                 hour2=0;
                                                                             }                
                                                                     
            }                                                                         
                         }
                     }
                } 
           }


and also, i've been trying to get something else integrated into it , it would drive a bargraph led, but everytime i try to put it into this code, the timer will not light up or will flicker and go out. any suggestions, as i want to be able to have the bargraph animate while the timer is counting, and not be animated when its not counting. thanks for any help guys. oh and heres the bargraph portion of the code:

Rich (BB code):
#include <16F877A.h>
#fuses HS,NOWDT,PUT,NOBROWNOUT,NOLVP
#use delay(clock = 4000000)
#byte PORTD=0X08
#byte PORTE=0x05

void main()
{
while(1){
PORTD = 0xff;
PORTE = 0X00; 
set_tris_D(0x00);
set_tris_E(0x00); 


PORTD=0b000000000;
PORTE=0X00;
delay_ms(50);
PORTD=0b010000000;
PORTE=0X00;
delay_ms(50);
PORTD=0b011000000;
PORTE=0X00;
delay_ms(50);
PORTD=0b011100000;
PORTE=0X00;
delay_ms(50);
PORTD=0b011110000;
PORTE=0X00;
delay_ms(50);
PORTD=0b011111000;
PORTE=0X00;
delay_ms(50);
PORTD=0b011111100;
PORTE=0X00;
delay_ms(50);
PORTD=0b011111110;
PORTE=0X00;
delay_ms(50);
PORTD=0b011111111;
PORTE=0X00;
delay_ms(50);
PORTD=0b011111111;
PORTE=0X00;
delay_ms(50);
PORTD=0b011111110;
PORTE=0X00;
delay_ms(50);
PORTD=0b011111100;
PORTE=0X00;
delay_ms(50);
PORTD=0b011111000;
PORTE=0X00;
delay_ms(50);
PORTD=0b011110000;
PORTE=0X00;
delay_ms(50);
PORTD=0b011110000;
delay_ms(50);
PORTE=0X00;
PORTD=0b011111000;
PORTE=0X00;
delay_ms(50);
PORTD=0b011111100;
PORTE=0X00;
delay_ms(50);
PORTD=0b011111000;
PORTE=0X00;
delay_ms(50);
PORTD=0b011110000;
PORTE=0X00;
delay_ms(50);
PORTD=0b011100000;
PORTE=0X00;
delay_ms(50);
PORTD=0b011000000;
PORTE=0X00;
delay_ms(50);
PORTD=0b010000000;
PORTE=0X00;
delay_ms(50);
PORTD=0b000000000;
PORTE=0X00;



delay_ms(50);
PORTD=0b010000000;
PORTE=0X00;
delay_ms(50);
PORTD=0b011000000;
PORTE=0X00;
delay_ms(50);
PORTD=0b011100000;
PORTE=0X00;
delay_ms(50);
PORTD=0b011110000;
PORTE=0X00;
delay_ms(50);
PORTD=0b011111000;
PORTE=0X00;
delay_ms(50);
PORTD=0b011110000;
PORTE=0X00;
delay_ms(50);
PORTD=0b011100000;
PORTE=0X00;
delay_ms(50);
PORTD=0b011000000;
PORTE=0X00;
delay_ms(50);
PORTD=0b011100000;
PORTE=0X00;
delay_ms(50);
PORTD=0b011110000;
PORTE=0X00;
delay_ms(50);
PORTD=0b011111000;
PORTE=0X00;
delay_ms(50);
PORTD=0b011111100;
PORTE=0X00;
delay_ms(50);
PORTD=0b011111110;
PORTE=0X00;
delay_ms(50);
PORTD=0b011111111;
PORTE=0X00;
delay_ms(50);
PORTD=0b011111111;
PORTE=0X00;
delay_ms(50);
PORTD=0b011111110;
PORTE=0X00;
delay_ms(50);
PORTD=0b011111110;
PORTE=0X00;
delay_ms(50);
PORTD=0b011111100;
PORTE=0X00;
delay_ms(50);
PORTD=0b011111100;
PORTE=0X00;
delay_ms(50);
PORTD=0b011111000;
PORTE=0X00;
delay_ms(50);
PORTD=0b011111000;
PORTE=0X00;
delay_ms(50);
PORTD=0b011110000;
PORTE=0X00;
delay_ms(50);
PORTD=0b011110000;
PORTE=0X00;
delay_ms(50);
PORTD=0b011100000;
PORTE=0X00;
delay_ms(50);
PORTD=0b011100000;
PORTE=0X00;
delay_ms(50);
PORTD=0b011000000;
PORTE=0X00;
delay_ms(50);
PORTD=0b010000000;
PORTE=0X00;
delay_ms(50);
PORTD=0b011100000;
PORTE=0X00;
delay_ms(50);
PORTD=0b011111000;
PORTE=0X00;
delay_ms(50);
PORTD=0b011111110;
PORTE=0X00;
delay_ms(50);
PORTD=0b011111111;
PORTE=0X00;
delay_ms(50);
PORTD=0b011111100;
PORTE=0X00;
delay_ms(50);
PORTD=0b011111000;
PORTE=0X00;
delay_ms(50);
PORTD=0b011100000;
PORTE=0X00;
delay_ms(50);
PORTD=0b010000000;
PORTE=0X00;
delay_ms(50);
PORTD=0b000000000;
PORTE=0X00;
delay_ms(50);
PORTD=0b011000000;
PORTE=0X00;
delay_ms(50);
PORTD=0b011111111;
PORTE=0X00;
delay_ms(50);
PORTD=0b011111100;
PORTE=0X00;
delay_ms(50);
PORTD=0b011111111;
PORTE=0X00;
delay_ms(50);
PORTD=0b011111110;
PORTE=0X00;
delay_ms(50);
PORTD=0b011111100;
PORTE=0X00;
delay_ms(50);
PORTD=0b011111000;
PORTE=0X00;
delay_ms(50);
PORTD=0b011110000;
PORTE=0X00;
delay_ms(50);
PORTD=0b011100000;
PORTE=0X00;
delay_ms(50);
PORTD=0b011000000;
PORTE=0X00;
delay_ms(50);
PORTD=0b010000000;
PORTE=0X00;
delay_ms(50);}
}
 
Last edited by a moderator:
Top