pic16f877a timer question ccs compiler

Discussion in 'Embedded Systems and Microcontrollers' started by thedarkotaku, Feb 6, 2013.

  1. thedarkotaku

    Thread Starter New Member

    Feb 28, 2011
    7
    0
    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:

    Code ( (Unknown Language)):
    1.  
    2. #include <16F877A.h>
    3. #fuses xt,NOWDT,PUT,NOBROWNOUT,NOLVP
    4. #use delay(clock = 4000000)
    5. #byte PORTA=0X05
    6. #byte PORTC=0x07
    7. #byte PORTB=0X06
    8. #byte PORTE=0x05
    9. #byte PORTD=0x08
    10. #define A0 PIN_A0
    11. #define A1 PIN_A1
    12. #define A2 PIN_A2
    13. #define A3 PIN_A3
    14. #define A4 PIN_A4
    15. #define A5 PIN_A5
    16.  
    17.  
    18.  int sec1,sec2,min1,min2,hour1,hour2;
    19.  
    20. int counter=125;
    21. int flag=0;
    22.  
    23.  
    24. const int table[10]={0b00111111,
    25.             0b00000110,
    26.             0b01011011,
    27.             0b01001111,
    28.             0b01100110,
    29.             0b01101101,
    30.             0b01111101,
    31.             0b00000111,
    32.             0b01111111,
    33.                0b01100111};
    34.  
    35.  
    36.  
    37.  
    38. void main()
    39. {
    40. PORTB=0X00;
    41. PORTC=0X00;
    42.  
    43. set_tris_e(0xff);
    44. set_tris_a(0xff);
    45. set_tris_c(0x00);
    46. set_tris_b(0x00);
    47. set_RTCC(6);
    48. setup_counters(RTCC_INTERNAL,RTCC_DIV_32);
    49. enable_interrupts(GLOBAL);
    50.  
    51.  
    52. for(;;)
    53. {
    54. PORTB=table[sec1];
    55. PORTC=0X01;
    56. delay_ms(2);
    57.  
    58. PORTB=table[sec2];
    59. PORTC=0x02;
    60. delay_ms(2);
    61.  
    62. PORTB=table[min1];
    63. PORTC=0x04;
    64. delay_ms(2);
    65.  
    66. PORTB=table[min2];
    67. PORTC=0x08;
    68. delay_ms(2);
    69.  
    70. PORTB=table[hour1];
    71. PORTC=0x10;
    72. delay_ms(2);
    73.  
    74. PORTB=table[hour2];
    75. PORTC=0x20;
    76. delay_ms(2);
    77.  
    78.  
    79.  
    80.  
    81. if(flag==1){
    82.  
    83.  
    84.             flag=0;
    85.             }
    86.    
    87.  
    88.  
    89.  
    90.  
    91.  
    92. if(input(A0)==0)  
    93.         {
    94.               disable_interrupts(INT_RTCC);
    95.              if(input(A1)==0){
    96.                              delay_ms(250);
    97.                             if(++min1>9)       {
    98.                                 min1=0;
    99.                              
    100.                                            if(++min2>5)  {
    101.                                                 min2=0;
    102.                                                          }
    103.                                                }
    104.                                      
    105.                            }
    106.              if(input(A2)==0){
    107.                                             delay_ms(250);
    108.                                              if( ++hour1>9 ){                                                          
    109.                                                          hour1=0;
    110.                                                          ++hour2;
    111.                                                             }
    112.                                                if( (hour2==2) & (hour1>3) )  {
    113.                                                                  sec1=0;
    114.                                                                  sec2=0;
    115.                                                                  min1=0;
    116.                                                                  min2=0;
    117.                                                                  hour1=0;
    118.                                                                  hour2=0;
    119.                                                                              }    
    120.                                                    
    121.                            }
    122.           }
    123. else if(input(A0)==1){
    124.             enable_interrupts(INT_RTCC);
    125.                }
    126.     }
    127.  }
    128.  
    129.  
    130. }
    131.  
    132.  
    133. #int_RTCC
    134. void microII()
    135.  
    136. {                            //void switch_time();
    137. if(--counter>0)return;
    138. counter=125;
    139. flag=1;
    140.  
    141.  
    142. if(++sec1>9){
    143.    sec1=0;
    144.            
    145.    if(++sec2>5){
    146.        sec2=0;
    147.                      
    148.        if(++min1>9){
    149.            min1=0;
    150.                              
    151.             if(++min2>5){
    152.                 min2=0;
    153.                                       if( ++hour1>9 )
    154.                                                             {
    155.                                                          hour1=0;
    156.                                                          ++hour2;
    157.                                                             }
    158.                                                if( (hour2==2) & (hour1>3) )  {
    159.                                                                  sec1=0;
    160.                                                                  sec2=0;
    161.                                                                  min1=0;
    162.                                                                  min2=0;
    163.                                                                  hour1=0;
    164.                                                                  hour2=0;
    165.                                                                              }                
    166.                                                                      
    167.             }                                                                        
    168.                          }
    169.                      }
    170.                 }
    171.            }
    172.  


    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:

    Code ( (Unknown Language)):
    1.  
    2. #include <16F877A.h>
    3. #fuses HS,NOWDT,PUT,NOBROWNOUT,NOLVP
    4. #use delay(clock = 4000000)
    5. #byte PORTD=0X08
    6. #byte PORTE=0x05
    7.  
    8. void main()
    9. {
    10. while(1){
    11. PORTD = 0xff;
    12. PORTE = 0X00;
    13. set_tris_D(0x00);
    14. set_tris_E(0x00);
    15.  
    16.  
    17. PORTD=0b000000000;
    18. PORTE=0X00;
    19. delay_ms(50);
    20. PORTD=0b010000000;
    21. PORTE=0X00;
    22. delay_ms(50);
    23. PORTD=0b011000000;
    24. PORTE=0X00;
    25. delay_ms(50);
    26. PORTD=0b011100000;
    27. PORTE=0X00;
    28. delay_ms(50);
    29. PORTD=0b011110000;
    30. PORTE=0X00;
    31. delay_ms(50);
    32. PORTD=0b011111000;
    33. PORTE=0X00;
    34. delay_ms(50);
    35. PORTD=0b011111100;
    36. PORTE=0X00;
    37. delay_ms(50);
    38. PORTD=0b011111110;
    39. PORTE=0X00;
    40. delay_ms(50);
    41. PORTD=0b011111111;
    42. PORTE=0X00;
    43. delay_ms(50);
    44. PORTD=0b011111111;
    45. PORTE=0X00;
    46. delay_ms(50);
    47. PORTD=0b011111110;
    48. PORTE=0X00;
    49. delay_ms(50);
    50. PORTD=0b011111100;
    51. PORTE=0X00;
    52. delay_ms(50);
    53. PORTD=0b011111000;
    54. PORTE=0X00;
    55. delay_ms(50);
    56. PORTD=0b011110000;
    57. PORTE=0X00;
    58. delay_ms(50);
    59. PORTD=0b011110000;
    60. delay_ms(50);
    61. PORTE=0X00;
    62. PORTD=0b011111000;
    63. PORTE=0X00;
    64. delay_ms(50);
    65. PORTD=0b011111100;
    66. PORTE=0X00;
    67. delay_ms(50);
    68. PORTD=0b011111000;
    69. PORTE=0X00;
    70. delay_ms(50);
    71. PORTD=0b011110000;
    72. PORTE=0X00;
    73. delay_ms(50);
    74. PORTD=0b011100000;
    75. PORTE=0X00;
    76. delay_ms(50);
    77. PORTD=0b011000000;
    78. PORTE=0X00;
    79. delay_ms(50);
    80. PORTD=0b010000000;
    81. PORTE=0X00;
    82. delay_ms(50);
    83. PORTD=0b000000000;
    84. PORTE=0X00;
    85.  
    86.  
    87.  
    88. delay_ms(50);
    89. PORTD=0b010000000;
    90. PORTE=0X00;
    91. delay_ms(50);
    92. PORTD=0b011000000;
    93. PORTE=0X00;
    94. delay_ms(50);
    95. PORTD=0b011100000;
    96. PORTE=0X00;
    97. delay_ms(50);
    98. PORTD=0b011110000;
    99. PORTE=0X00;
    100. delay_ms(50);
    101. PORTD=0b011111000;
    102. PORTE=0X00;
    103. delay_ms(50);
    104. PORTD=0b011110000;
    105. PORTE=0X00;
    106. delay_ms(50);
    107. PORTD=0b011100000;
    108. PORTE=0X00;
    109. delay_ms(50);
    110. PORTD=0b011000000;
    111. PORTE=0X00;
    112. delay_ms(50);
    113. PORTD=0b011100000;
    114. PORTE=0X00;
    115. delay_ms(50);
    116. PORTD=0b011110000;
    117. PORTE=0X00;
    118. delay_ms(50);
    119. PORTD=0b011111000;
    120. PORTE=0X00;
    121. delay_ms(50);
    122. PORTD=0b011111100;
    123. PORTE=0X00;
    124. delay_ms(50);
    125. PORTD=0b011111110;
    126. PORTE=0X00;
    127. delay_ms(50);
    128. PORTD=0b011111111;
    129. PORTE=0X00;
    130. delay_ms(50);
    131. PORTD=0b011111111;
    132. PORTE=0X00;
    133. delay_ms(50);
    134. PORTD=0b011111110;
    135. PORTE=0X00;
    136. delay_ms(50);
    137. PORTD=0b011111110;
    138. PORTE=0X00;
    139. delay_ms(50);
    140. PORTD=0b011111100;
    141. PORTE=0X00;
    142. delay_ms(50);
    143. PORTD=0b011111100;
    144. PORTE=0X00;
    145. delay_ms(50);
    146. PORTD=0b011111000;
    147. PORTE=0X00;
    148. delay_ms(50);
    149. PORTD=0b011111000;
    150. PORTE=0X00;
    151. delay_ms(50);
    152. PORTD=0b011110000;
    153. PORTE=0X00;
    154. delay_ms(50);
    155. PORTD=0b011110000;
    156. PORTE=0X00;
    157. delay_ms(50);
    158. PORTD=0b011100000;
    159. PORTE=0X00;
    160. delay_ms(50);
    161. PORTD=0b011100000;
    162. PORTE=0X00;
    163. delay_ms(50);
    164. PORTD=0b011000000;
    165. PORTE=0X00;
    166. delay_ms(50);
    167. PORTD=0b010000000;
    168. PORTE=0X00;
    169. delay_ms(50);
    170. PORTD=0b011100000;
    171. PORTE=0X00;
    172. delay_ms(50);
    173. PORTD=0b011111000;
    174. PORTE=0X00;
    175. delay_ms(50);
    176. PORTD=0b011111110;
    177. PORTE=0X00;
    178. delay_ms(50);
    179. PORTD=0b011111111;
    180. PORTE=0X00;
    181. delay_ms(50);
    182. PORTD=0b011111100;
    183. PORTE=0X00;
    184. delay_ms(50);
    185. PORTD=0b011111000;
    186. PORTE=0X00;
    187. delay_ms(50);
    188. PORTD=0b011100000;
    189. PORTE=0X00;
    190. delay_ms(50);
    191. PORTD=0b010000000;
    192. PORTE=0X00;
    193. delay_ms(50);
    194. PORTD=0b000000000;
    195. PORTE=0X00;
    196. delay_ms(50);
    197. PORTD=0b011000000;
    198. PORTE=0X00;
    199. delay_ms(50);
    200. PORTD=0b011111111;
    201. PORTE=0X00;
    202. delay_ms(50);
    203. PORTD=0b011111100;
    204. PORTE=0X00;
    205. delay_ms(50);
    206. PORTD=0b011111111;
    207. PORTE=0X00;
    208. delay_ms(50);
    209. PORTD=0b011111110;
    210. PORTE=0X00;
    211. delay_ms(50);
    212. PORTD=0b011111100;
    213. PORTE=0X00;
    214. delay_ms(50);
    215. PORTD=0b011111000;
    216. PORTE=0X00;
    217. delay_ms(50);
    218. PORTD=0b011110000;
    219. PORTE=0X00;
    220. delay_ms(50);
    221. PORTD=0b011100000;
    222. PORTE=0X00;
    223. delay_ms(50);
    224. PORTD=0b011000000;
    225. PORTE=0X00;
    226. delay_ms(50);
    227. PORTD=0b010000000;
    228. PORTE=0X00;
    229. delay_ms(50);}
    230. }
    231.  
     
    Last edited by a moderator: Feb 7, 2013
Loading...