Hex- bzw C-File in asm

OP #2220295
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.
Angehängte Dateien:
#2220419
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.
OP #2220563
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.
OP #2220989
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
OP #2220991
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];

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren