www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

Hi-tech picc Error[1091]

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Microchip PIC
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
ljudsko
Član
Član



Pridružen-a: Pon 31 Mar 2008 8:19
Prispevkov: 1184
Aktiv.: 5.65
Kraj: Koroška-Mežica

PrispevekObjavljeno: Sre Dec 15, 2010 11:41 am    Naslov sporočila:  Hi-tech picc Error[1091] Odgovori s citatom

V Piklabu pišem program v C-ju za merilec hitrosti in uporabljam PICC prevajalnik od HI-TECH (verzija 9.80). Težava je v tem, da uporabljam dve izvorni .c datoteki (merilec_hitrosti.c in lcd.c). Če vsebino lcd.c prekopiram v merilec_hitrosti.c, se projekt zgradi brez težav, čim ko je program v večdatotečni obliki, mi ne da miru z napako
Koda:
Error[1091] /usr/hitech/picc/9.80/sources/float.c 86 : main function "_main" not defined


Lcd.h:
Koda:
/*
 *   LCD interface header file
 *   See lcd.c for more info
 */

/* write a byte to the LCD in 4 bit mode */

extern void lcd_write(unsigned char);

/* Clear and home the LCD */

extern void lcd_clear(void);

/* write a string of characters to the LCD */

extern void lcd_puts(const char * s);

/* Go to the specified position */

extern void lcd_goto(unsigned char pos);
   
/* intialize the LCD - call before anything else */

extern void lcd_init(void);

extern void lcd_putch(char);

/*   Set the cursor position */

#define   lcd_cursor(x)   lcd_write(((x)&0x7F)|0x80)


Lcd.c:
Koda:
/*
 *   LCD interface example
 *   Uses routines from delay.c
 *   This code will interface to a standard LCD controller
 *   like the Hitachi HD44780. It uses it in 4 bit mode, with
 *   the hardware connected as follows (the standard 14 pin
 *   LCD connector is used):
 *   
 *   PORTD bits 0-3 are connected to the LCD data bits 4-7 (high nibble)
 *   PORTA bit 3 is connected to the LCD RS input (register select)
 *   PORTA bit 1 is connected to the LCD EN bit (enable)
 *   
 *   To use these routines, set up the port I/O (TRISA, TRISD) then
 *   call lcd_init(), then other routines as required.
 *   
 */

#ifndef _XTAL_FREQ
 // Unless specified elsewhere, 4MHz system frequency is assumed
 #define _XTAL_FREQ 4000000
#endif


#include   <htc.h>
#include   "lcd.h"

#define   LCD_RS RA0
//#define   LCD_RW RA2
#define LCD_EN RA1

#define LCD_DATA   PORTB

#define   LCD_STROBE()   ((LCD_EN = 1),(LCD_EN=0))

/* write a byte to the LCD in 4 bit mode */

void
lcd_write(unsigned char c)
{
   __delay_us(40);
   LCD_DATA = ( ( c >> 4 ) & 0x0F );
   LCD_STROBE();
   LCD_DATA = ( c & 0x0F );
   LCD_STROBE();
}

/*
 *    Clear and home the LCD
 */

void
lcd_clear(void)
{
   LCD_RS = 0;
   lcd_write(0x1);
   __delay_ms(2);
}

/* write a string of chars to the LCD */

void
lcd_puts(const char * s)
{
   LCD_RS = 1;   // write characters
   while(*s)
      lcd_write(*s++);
}

/* write one character to the LCD */

void
lcd_putch(char c)
{
   LCD_RS = 1;   // write characters
   lcd_write( c );
}


/*
 * Go to the specified position
 */

void
lcd_goto(unsigned char pos)
{
   LCD_RS = 0;
   lcd_write(0x80+pos);
}
   
/* initialise the LCD - put into 4 bit mode */
void
lcd_init()
{
   char init_value;

   //ADCON1 = 0x06;   // Disable analog pins on PORTA

   init_value = 0x3;
   TRISA=0;
   TRISB=0;
   LCD_RS = 0;
   LCD_EN = 0;
   //LCD_RW = 0;
   
   __delay_ms(15);   // wait 15mSec after power applied,
   LCD_DATA    = init_value;
   LCD_STROBE();
   __delay_ms(5);
   LCD_STROBE();
   __delay_us(200);
   LCD_STROBE();
   __delay_us(200);
   LCD_DATA = 2;   // Four bit mode
   LCD_STROBE();

   lcd_write(0x28); // Set interface length
   lcd_write(0xF); // Display On, Cursor On, Cursor Blink
   lcd_clear();   // Clear screen
   lcd_write(0x6); // Set entry Mode
}


merilec_hitrosti.c: (program zdaj še ne dela nič)
Koda:
#include <htc.h>
#include "lcd.h"

__CONFIG(UNPROTECT & LVPDIS & BORDIS & MCLREN & PWRTEN & WDTDIS & HS);

#ifndef _XTAL_FREQ
#define   _XTAL_FREQ 8000000
#endif

void
main (void)
{
   
}


Googlam že 2 uri, pa brez rezultata. V manualu sicer piše nekaj o tej napaki, ampak mi ne pove nič (da mora vsak program imeti funkcijo main()... Brick wall ). Ima kdo kakšno idejo, ker meni se bo utrgalo?

_________________
return;
brake;
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
sraka
Član
Član



Pridružen-a: Čet 20 Nov 2008 23:52
Prispevkov: 481
Aktiv.: 2.38
Kraj: PMAVs

PrispevekObjavljeno: Sre Dec 15, 2010 12:03 pm    Naslov sporočila:   Odgovori s citatom

Nauk: Programiranje je igra, kjer se ti lahko utrga.
_________________
Danes je težko biti budala, konkurenca je velika, pa še dokazovati se moraš večkrat na dan.
Sem ogledalo: Nisem kriv, če v meni vidite nekaj kar vam ni všeč.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
snow
Član
Član



Pridružen-a: Tor 27 Dec 2005 14:02
Prispevkov: 341
Aktiv.: 1.44
Kraj: Ljubljana || Velenje

PrispevekObjavljeno: Sre Dec 15, 2010 10:30 pm    Naslov sporočila:   Odgovori s citatom

To delaš v mplabu ali zaženeš picc compiler na roke?
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
ljudsko
Član
Član



Pridružen-a: Pon 31 Mar 2008 8:19
Prispevkov: 1184
Aktiv.: 5.65
Kraj: Koroška-Mežica

PrispevekObjavljeno: Sre Dec 15, 2010 11:31 pm    Naslov sporočila:   Odgovori s citatom

To delam v Piklabu (Ubuntu-Linux), kjer prevajalnik kličem prek tega IDE-ja. Zakaj, je to pomembno?
_________________
return;
brake;
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
igo
Član
Član



Pridružen-a: Sre 11 Okt 2006 19:11
Prispevkov: 3641
Aktiv.: 16.00

PrispevekObjavljeno: Sre Dec 15, 2010 11:40 pm    Naslov sporočila:   Odgovori s citatom

Ja pa napiši notri v main
{
a=0;
i=0;
for i=0 ; i=100 ; i++
a=i+a :
end for
i=0;
a=0;
}
ali nekaj podobnega. Ne moreš imeti praznega podprograma, sploh pa ne main (glavni program).

Sicer pa v main spada
{
- komplet inicializacija (LCD, ADC, I/O, vpis konstant in parametrov,...) nato pa
while(1)
{
.... glavna zanka, ki kliče podprograme ...
}
}

_________________
Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
dule26
Član
Član



Pridružen-a: Tor 28 Sep 2010 7:30
Prispevkov: 26
Aktiv.: 0.15
Kraj: Murska Sobota

PrispevekObjavljeno: Čet Dec 16, 2010 8:09 am    Naslov sporočila:   Odgovori s citatom

Poskusi namesto "void main(void){}" napisat "int main() {}"
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
ljudsko
Član
Član



Pridružen-a: Pon 31 Mar 2008 8:19
Prispevkov: 1184
Aktiv.: 5.65
Kraj: Koroška-Mežica

PrispevekObjavljeno: Čet Dec 16, 2010 12:28 pm    Naslov sporočila:   Odgovori s citatom

int main() brez return?
_________________
return;
brake;
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
dule26
Član
Član



Pridružen-a: Tor 28 Sep 2010 7:30
Prispevkov: 26
Aktiv.: 0.15
Kraj: Murska Sobota

PrispevekObjavljeno: Čet Dec 16, 2010 12:32 pm    Naslov sporočila:   Odgovori s citatom

Brez!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
ljudsko
Član
Član



Pridružen-a: Pon 31 Mar 2008 8:19
Prispevkov: 1184
Aktiv.: 5.65
Kraj: Koroška-Mežica

PrispevekObjavljeno: Čet Dec 16, 2010 2:57 pm    Naslov sporočila:   Odgovori s citatom

Zaenkrat niti preizkusiti ne morem, ker v Piklabu ne morem nastaviti prevajalnika. Kl!k
_________________
return;
brake;
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
ljudsko
Član
Član



Pridružen-a: Pon 31 Mar 2008 8:19
Prispevkov: 1184
Aktiv.: 5.65
Kraj: Koroška-Mežica

PrispevekObjavljeno: Ned Dec 19, 2010 4:10 pm    Naslov sporočila:   Odgovori s citatom

Ista napaka. Int main() ne pomaga Confused
_________________
return;
brake;
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
bungee
Član
Član



Pridružen-a: Pon 07 Mar 2005 18:49
Prispevkov: 1479
Aktiv.: 6.24
Kraj: Ljubljana

PrispevekObjavljeno: Pon Dec 20, 2010 12:59 am    Naslov sporočila:   Odgovori s citatom

A ni Void main() Rolling Eyes
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
igo
Član
Član



Pridružen-a: Sre 11 Okt 2006 19:11
Prispevkov: 3641
Aktiv.: 16.00

PrispevekObjavljeno: Pon Dec 20, 2010 3:26 am    Naslov sporočila:   Odgovori s citatom

Ali morajo biti frekvence povsod enake?
Enkrat je 4MHz, drugič pa 8MHz.

Povsem izbriši void in main ter ju napiši na novo. Lahko si kak skrit znak pred m natipkal. ALT GR + ... ali podobno.
Morda mora biti main(), namesto main () . Včash so povsem brezvezne stvari.

Vzemi eno delujočo datoteko in pobriši vse ven, razen main.

_________________
Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
ljudsko
Član
Član



Pridružen-a: Pon 31 Mar 2008 8:19
Prispevkov: 1184
Aktiv.: 5.65
Kraj: Koroška-Mežica

PrispevekObjavljeno: Pon Dec 20, 2010 1:52 pm    Naslov sporočila:   Odgovori s citatom

Zanimivo je, ker samo to datoteko gre prevest, če dam compile this file, projekta pa ne gre zgradit. Z ukazne vrstice pa gre obe datoteki, vsako posebej prevesti. Ne razumem ravno najbolje ukazne vrstice za ta prevajalnik.
_________________
return;
brake;
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
ljudsko
Član
Član



Pridružen-a: Pon 31 Mar 2008 8:19
Prispevkov: 1184
Aktiv.: 5.65
Kraj: Koroška-Mežica

PrispevekObjavljeno: Pon Dec 20, 2010 4:50 pm    Naslov sporočila:   Odgovori s citatom

Odločil sem se, da bom programiral prevajal z SDCC. Zanima me, na kakšen način bi lahko v nek del asm kode, ki jo vključim v c kodo prenesel vrednost iz kode, ki je napisana v c. Recimo imam funkcijo:

Koda:
void funkcija (int vrednost) {_asm 'Tukaj želim recimo movlw vrednost _endasm;}


Namreč dobil sem idejo, da bi driver za LCD napisal sam v zbirniku v neko funkcijo, potem pa bi to funkcijo klical iz glavnega programa:

Koda:
lcd_pisi ("besedilo");

_________________
return;
brake;
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Microchip PIC Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
Ne, ne moreš dodajati novih tem v tem forumu
Ne, ne moreš odgovarjati na teme v tem forumu
Ne, ne moreš urejati svojih prispevkov v tem forumu
Ne, ne moreš brisati svojih prispevkov v tem forumu
Ne ne moreš glasovati v anketi v tem forumu
Ne, ne moreš pripeti datotek v tem forumu
Ne, ne moreš povleči datotek v tem forumu

Uptime: 495 dni


Powered by phpBB © 2001, 2005 phpBB Group