Timer 0 negative werte
Dienstag, 22. Mai 2012
 
 

PIC Mikrocontroller Forum  |  PIC Mikrocontroller  |  CCS Compiler  |  Timer (CCS)  |  Timer 0 negative werte « vorheriges nächstes »
Seiten: [1] Nach unten Drucken
Autor Thema: Timer 0 negative werte  (Gelesen 2012 mal)
 
mkkirchner
Gast
« am: Dezember 11, 2008, 21:55:57 »

Hallo,
Bin neu in der PIC Welt und programmiere mit CCS.
Habe nun ein kleines testprogramm geschrieben mit dem ich die Weite von Rechteckimpulsen messen möchte.
Mein Code:
Code:
#include "D:\softwareprojekte\PIC\TEST\20M.h"
#include <stdlib.h>
 

  int s,v;
 int8 t;
 int32 d;

#INT_TIMER0
void tower()
   { 
   d++;
   }

void main()
{

   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_spi(FALSE);

   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);

 
 
   enable_interrupts(GLOBAL);
   enable_interrupts(INT_TIMER0);
 while(1)
   {
   if(input(PIN_B0))
      {
         output_high(PIN_A0);
         d=0;
         set_timer0(0);
         setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
         
         while(input(PIN_B0))
            {
            //printf(".");
            }
           
      t=get_timer0();
      printf("\r\n");
      printf("%ld",d);
      printf("  *  ");
      printf("%d",t);
      printf("    #    ");
      printf(get_timer0());
      printf("\n");
      output_low(PIN_A0);
      }
     
 
 
output_low(PIN_A0);
output_high(PIN_C4);

   }
}

Das Problem ist aber nun, dass mir die Ausgabe  printf("%d",t); teilweise NEGATIVE Werte liefert Huch
Ansonsten scheint es zu funktionieren, bei einer Impulsbreite von 988µsec ist d immer =19 was in etwa der Impulsbreite entspricht, aber warum liefert  printf("%d",t); einen negativen Wert???

Vielen Dank für eure Hilfe

martin
Gespeichert
Bernd
Globaler Moderator
Hero Member
*****
Offline Offline

Beiträge: 3815



Profil anzeigen
« Antworten #1 am: Dezember 11, 2008, 22:30:42 »

Zitat
aber warum liefert  printf("%d",t); einen negativen Wert???

Weil es sich bei "%d" um das Format-Kennzeichen für einen vorzeichenbehafteten Wert (signed int) handelt. Beim CCS kann ein int 8 Bits aufnehmen, d.h. sobald der Wert von t größer als 127 ist (dann ist das MSB der Variablen gesetzt), wird dieser als negativ interpretiert. Für nicht vorzeichenbehaftete Werte (unsigned) mußt Du "%u" (8 Bit) oder "%lu" (16 Bit) verwenden.


Viele Grüße

Bernd
Gespeichert

kirchner
Gast
« Antworten #2 am: Dezember 11, 2008, 22:38:56 »

O.K.
Erstmal vielen Dank,
Also verstehe ich das richtig:
Det timer t0 zählt von 0 - 255, also hat t in wirklichkeit immer einen Wert zwischen 0 und 255 und wird nur durch die falsche format angabe fehlerhaft ausgegeben.
Wenn ich nun %u angebe würden dann die Werte richtig (0-255) ausgegeben werden ??

Nochmals Danke
Martin

PS: bin auch neu bei C, . . .komme von VB Smiley
Gespeichert
Bernd
Globaler Moderator
Hero Member
*****
Offline Offline

Beiträge: 3815



Profil anzeigen
« Antworten #3 am: Dezember 11, 2008, 22:58:19 »

Zitat
Det timer t0 zählt von 0 - 255, also hat t in wirklichkeit immer einen Wert zwischen 0 und 255 und wird nur durch die falsche format angabe fehlerhaft ausgegeben.

Ja.

Zitat
Wenn ich nun %u angebe würden dann die Werte richtig (0-255) ausgegeben werden ??

Ebenfalls ja.


Viele Grüße

Bernd
Gespeichert

kirchner
Gast
« Antworten #4 am: Dezember 11, 2008, 23:40:30 »

Vielen dank!!!

Gespeichert
Seiten: [1] Nach oben Drucken 
« vorheriges nächstes »
Gehe zu:  

Powered by MySQL Powered by PHP Made for Mozilla (Firefox) Made for Internet Explorer
Seite erstellt in 0.031 Sekunden mit 18 Zugriffen.
 
Top! Top!