Forum: Mikrocontroller und Digitale Elektronik Hex- bzw C-File in asm


von Mark t. (asm333)


Angehängte Dateien:

Lesenswert?

Hallo,
ich habe folgendes problem auf der Seite Coolcircuits habe ich die 
Datein für einen 3-Digit Voltmeter mir runtergeladen die schaltung habe 
ich bereits gebaut es fehlt nur noch der PIC jedoch bekomme ich es nicht 
hin die beiden datein in die Assembler sprache zuwandeln. Habe schon 
sich programme ausprobiert und bin mit meinen latein am ende.
Bitte hilft mir so das ich die datein mit Mplab comilieren kann und 
Build suceeded ist.
Bitte Bitte.
Ps: Ich möchte weder den PIC ändern noch das programm selbsst schreiben 
da ich nicht so viel mit den programmieren kann.
Ich hoffe auf eure unterstützing.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Mark tow schrieb:
> jedoch bekomme ich es nicht
> hin die beiden datein in die Assembler sprache zuwandeln.

Wozu auch? Die Hex-Datei enthält das fertig übersetzte Programm, das 
musst Du nur noch mit einem geeigneten Programmiergerät in den PIC 
reinbekommen.

von jonas biensack (Gast)


Lesenswert?

Wobei ich mich frage wie eine 2.4 kb große C Datei, ein 3.6 kb großes 
HEX File ergeben können ???

Das muss mir mal einer erklären...

gruß jonas

von Moep (Gast)


Lesenswert?

Warum auch nicht? Kommentare, Defines, etc...

von Moep (Gast)


Lesenswert?

Ups... Ich sollte besser lesen.. Sorry :)

von Karl H. (kbuchegg)


Lesenswert?

jonas biensack schrieb:
> Wobei ich mich frage wie eine 2.4 kb große C Datei, ein 3.6 kb großes
> HEX File ergeben können ???
>
> Das muss mir mal einer erklären...

Das sind alles nur Texte.
Weder die Größe des C-Files sagt etwas darüber aus, wie 'groß' oder 
'komplex' das C Programm ist, noch besagt die Größe des Hex-Files, dass 
das brennbare Programm tatsächlich 3600 Bytes umfasst.
Beim Hex-File kann man ungefähr über den Daumen erst mal die Hälfte 
annehmen (weil man ja für jedes Byte in Hex-Schreibweise 2 Buchstaben 
braucht) und vom Rest dann noch etwas abziehen, weil da ja auch 
Steuerinformation drinnen ist. Das eigentlich Binärprogramm wird also 
irgendwas in der Größenordnung von vielleicht 1kb haben.

Und zum Thema C

wenn du schreibst

int main()
{
  int a, b, c;

  a = 5;
  b = 8;
  c = a * b;

  ...
}

dann hast du zwar wenig C-Code, aber irgendwer muss ja auch die 16 Bit 
Multiplikation implementieren, die der Prozessor nicht vion alleine 
kann.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Und noch heftiger wirds bei

> int main()
> {
>   float a, b, c;
>
>   a = 5;
>   b = 8;
>   c = a * b;
>
>   ...
> }

Dann wird das resultierende Programm gleich deutlich größer, obwohl der 
Quelltext nur zwei Zeichen länger wurde.

von Mark t. (asm333)


Lesenswert?

Ja ich weiß das ich nur das Hex file brauch jedoch möchte ich den sehr 
gerne als assembller noch einmal sehen um ihn evtl. zu verstehen.
Hinzu kommt noch das mir nur der MPlab IDE v.8.70 zu verfügung steht.
Und der mir im moment nur probleme mit der Hex datei beim Builden macht.

von Mark t. (asm333)


Lesenswert?

Ach ja und hier ist noch einmal die Seite woher ich die Daten habe.
http://www.coolcircuit.com/project/meter/index.html

von Lehrmann M. (ubimbo)


Lesenswert?

Mark tow schrieb:
> Und der mir im moment nur probleme mit der Hex datei beim Builden macht.

Wenn du noch sagst welche Fehler kommen, dann kann man dir auch helfen. 
Hast du denn die Linkerscripte und Includes in MPLAB gelinkt. Hast du 
den C18 Compiler überhaupts runtergeladen? Der ist nicht bei MPLAB dabei 
!

von Mark t. (asm333)


Lesenswert?

Also ich habe den PIC C Compiler installiert und wenn ich mit MPlab nun 
die C-Datei builden will schreibt der mir das:

Clean: Deleting intermediary and output files.
Clean: Deleted file "C:\Users\Baka\Desktop\Neu\Test.mcs".
Clean: Done.
Executing: "C:\Program Files (x86)\PICC\Ccsc.exe" +FM 
"..\..\Downloads\meter\main.c" #__DEBUG=1 +ICD +DF +LN +T +A +M +Z +Y=9 
+EA  #__16F676=TRUE
*** Error 74 "main.c" Line 117(1,2): Not enough RAM for all variables
      1 Errors,  0 Warnings.
Halting build on first failure as requested.
BUILD FAILED: Sat Jun 11 11:53:15 2011

von Mark t. (asm333)


Lesenswert?

Dazu der Text:

#include <16F676.h>
#device adc=10
#fuses INTRC_IO,NOWDT,PUT,NOPROTECT,BROWNOUT,NOMCLR
#use delay (clock=4000000) // 4MHz clock

#rom  0x3ff={0x3444}

#byte PORTA = 0x05
#byte PORTC = 0x07
#byte TRISA = 0x85
#byte TRISC = 0x87

#define SPORTA PORTA
#define SPORTC PORTC

#define  TICKS_BETWEEN_INTERRUPTS      5000 //5000
#define  INTERRUPT_OVERHEAD            35
#define  TMR1RESET 
(0xFFFF-(TICKS_BETWEEN_INTERRUPTS-INTERRUPT_OVERHEAD))

const char SegCode[11] = 
{0x40,0x57,0x22,0x06,0x15,0x0C,0x08,0x56,0x00,0x04,0xFF};
  //                       0    1    2    3    4    5    6    7    8 
9
const char Column[3]   = {0x02,0x01,0x04};
static char Segment[3] = {0x7f,0x7f,0x7f};
static unsigned char ColCount=0x00;

void CPU_SETUP(void);
void Display(void);
void HTO7S(unsigned int32 Num);

byte i;
unsigned int32 result;

#INT_TIMER1
void Timer1(void)
{
  set_timer1(TMR1RESET);
  Display();
}

void main()
{
  unsigned char i;

  CPU_SETUP();

  while(true)
  {
    result=0;
    for (i=0;i<20;i++)
    {
      set_adc_channel(3);
      delay_ms(1);
      result=result+read_adc();
    }
      //result = 0x3fe;
     HTO7S(result/20);
    delay_ms(200);
  }

}

void CPU_SETUP()
{

   setup_comparator(NC_NC_NC_NC);  // not use comparator module
   setup_adc_ports( sAN3 | VSS_VDD);
   setup_adc(ADC_CLOCK_DIV_64);
   TRISA=0b00011000;
   PORTA=0x27;
   TRISC=0b00000000;
   PORTC=0x37;


   setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);
   set_timer1(TMR1RESET);
   enable_interrupts(GLOBAL);
   enable_interrupts(INT_TIMER1);
}

//-------------------------------------
// Display routine
//-------------------------------------
void Display()
{
  PORTA = 0b00100111;    // off all digits column and Segment G
  PORTC = 0b00111111;   // off segment a-f
  delay_cycles(2);


  if (ColCount>=3)
  ColCount=0;

  SPORTC = Segment[ColCount];
  SPORTA = ((Segment[ColCount] & 0b01000000)>>1) | 
(Column[ColCount]^0x07);
  ColCount++;
}

//--------------------------------------
// Convet HEX 2 byte to 7-Segment code
//--------------------------------------
void HTO7S(unsigned int32 Num)
{

  unsigned int32 res;


  Segment[0]=SegCode[30*Num/10230];
  if (Segment[0]==0x40)
  Segment[0]=0xFF;

  res = 30*Num%10230;
  Segment[1]=SegCode[10*res/10230];
  res=10*res%10230;
  Segment[2]=SegCode[10*res/10230];

von Programist (Gast)


Lesenswert?

Mark tow schrieb:
> *** Error 74 "main.c" Line 117(1,2): Not enough RAM for all variables

Ich würde sagen da sind zu viele Variablen für diesen Pic.Hast du den 
richtigen chip eingestellt in Mplab?

von Mark t. (asm333)


Lesenswert?

Ja das habe ich den 16F676. So wie es auch auf der I-net seite steht.

von Programist (Gast)


Lesenswert?

Der Feher ist irgendwo in Line 117(1,2).Da must du halt rausfinden 
welche Line ist die 117 und nachsehen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.