I just write simple program for 16f628a Pic and I have problems with run it=
when I want add and initialize next variable. If I don't add variable prog=
ram working just fine. This variable name is TABLE_INDEKS .I have:
=20
SDCC : mcs51/gbz80/z80/avr/ds390/pic16/pic14/TININative/xa51/ds400/hc08 2.6=
.1 #4341 (Aug 24 2006) (MINGW32)
=20
gasm-0.13.3 beta
gplink-0.13.3 alfa
windowsXP pro
My program:
=20
/*=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D*/
/*
/*/*=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D*/
#define __16f628a
#include <pic/pic16f628a.h>
#include "urzadzenia_pica.h"
#include "definicje.h"
=20
typedef unsigned int WORD;
=20
WORD at 0x2007 __CONFIG =3D (_CP_OFF & _WDT_ON & _MCLRE_OFF & _INTOSC_OSC_N=
OCLKOUT & _LVP_OFF & _PWRTE_ON & _BODEN_ON);
=20
/*=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D DEFINICJE =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D*/
=20
#define BIT(x) (1<<(x))
=20
/*=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D DEKLARACJE ZMIENNYCH GLOBALNYCH =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D*/
code unsigned char tabelka[240]=3D{51,54,57,60,63,66,69,72,75,85,87,89,91,9=
3,95,97,99,101,103,114,116,118,120,122,124,126,128,130,
132,140,142,144,146,148,150,152,154,156,158,169,172,175,178,181,184,=
187,190,193,196,201,197,193,
189,185,181,177,173,169,165,161,158,155,152,149,146,143,140,137,134,=
126,123,120,117,114,111,108,
105,102,99,90,87,84,81,78,75,72,69,66,63,51,47,43,39,35,31,27,23,19,=
15,10,12,14,16,18,20,22,24,
26,28,34,35,36,37,38,39,40,41,42,43,47,49,51,53,55,57,59,61,63,65,68=
,70,72,74,76,78,80,82,84,86,
95,98,101,104,107,110,113,116,119,122,126,129,132,135,138,141,144,14=
7,150,153,157,162,167,172,
177,182,187,192,197,202,207,202,197,192,187,182,177,172,167,162,157,=
152,147,142,137,132,127,122,
117,112,105,101,97,93,89,85,81,77,73,69,56,53,50,47,44,41,38,35,32,2=
9,25,25,25,25,25,25,25,25,
25,25,16,16,16,16,16,16,16,16,16,16,10};
=20
static struct SOFT_KOMP{ //stuktura sterujaca komparatorem program=
owym
unsigned char OLD_AN1 :1;
unsigned char OLD_AN2 :1;
unsigned char NEW_AN1 :1;
unsigned char NEW_AN2 :1;
unsigned char timer_working :1;
unsigned char start ;
}STER_COMP;
=20
unsigned char LICZ_PRZER_T0; //licznik impulsow zliczonych przez prz=
erwaia z timera0=20
unsigned int LICZ_PRZER_T1; //licznik impulsow zliczonych przez przer=
waia z timera1
unsigned char OPEN_BSP_TIME; //czas przez jaki ma byc otwarty tranzys=
tor
=20
unsigned char TABLE_INDEKS;
=20
/*=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D FUNKCJA MAIN =3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D*/
void main(void)=20
{
=20
//TABLE_INDEKS=3D0;
=20
TRISA=3D0x00; //chwilowo ustawiamy wszystkie porty jako wyjscia
TRISB=3D0x00; //
PORTA=3D0xFF; //
PORTB=3D0xFF; //
=20
STER_COMP.timer_working=3D0;
STER_COMP.start=3D205;
=20
OPEN_BSP_TIME=3D235;
=20
init_PIC_port();
PORTB&=3D~BIT(BSP_GATE_O); //WYLACZAMY TRANZYSTOR BSP295 BSP_GATE_O=
=3D0
=20
PORTB|=3DBIT(BSP_GATE_O);
=20
PORTB|=3DBIT(BUP_GATE_O); //ZALACZAMY TRANZYSTOR BUP203 BUP_GATE_O=
=3D1
=20
init_PIC_timer0();
init_PIC_timer1();
=20
PEIE=3D1; //wlaczenie zezwolenia na przerwanie od dodatkoych p=
rzerwan
GIE=3D1; //globalne zezwolenie na przerwania
=20
if(PORTA&BIT(AN1)){STER_COMP.OLD_AN1=3D1;STER_COMP.NEW_AN1=3D1;}else{STER_=
COMP.OLD_AN1=3D0;STER_COMP.NEW_AN1=3D0;}
if(PORTA&BIT(AN2)){STER_COMP.OLD_AN2=3D1;STER_COMP.NEW_AN2=3D1;}else{STER_=
COMP.OLD_AN2=3D0;STER_COMP.NEW_AN2=3D0;}
=20
while(1)
{
if(!STER_COMP.timer_working && !STER_COMP.start) //jesli pracujemy
{
if(PORTA&BIT(AN1)){STER_COMP.NEW_AN1=3D1;}else{STER_COMP.NEW_AN1=3D0;}
if(PORTA&BIT(AN2)){STER_COMP.NEW_AN2=3D1;}else{STER_COMP.NEW_AN2=3D0;}
if((STER_COMP.NEW_AN1!=3DSTER_COMP.OLD_AN1) && (STER_COMP.NEW_AN2!=3DST=
ER_COMP.OLD_AN2))
{
=20
PORTB&=3D~BIT(BUP_GATE_O);
PORTB&=3D~BIT(BSP_GATE_O);
=20
STER_COMP.OLD_AN1=3DSTER_COMP.NEW_AN1;
STER_COMP.OLD_AN2=3DSTER_COMP.NEW_AN2;
STER_COMP.timer_working=3D1;
T0IE=3D1;//1;
T0CS=3D0;//0;
}
}
=20
if(!STER_COMP.timer_working && STER_COMP.start!=3D0) //jesli wlasnie=
startujemy
{
=20
if(PORTA&BIT(AN1)){STER_COMP.NEW_AN1=3D1;}else{STER_COMP.NEW_AN1=3D0;}
if(PORTA&BIT(AN2)){STER_COMP.NEW_AN2=3D1;}else{STER_COMP.NEW_AN2=3D0;}
if((STER_COMP.NEW_AN1!=3DSTER_COMP.OLD_AN1) && (STER_COMP.NEW_AN2!=3DST=
ER_COMP.OLD_AN2))
{
STER_COMP.start=3DSTER_COMP.start-1;
LICZ_PRZER_T0=3D250;
=20
PORTB&=3D~BIT(BUP_GATE_O);
PORTB&=3D~BIT(BSP_GATE_O);
=20
STER_COMP.OLD_AN1=3DSTER_COMP.NEW_AN1;
STER_COMP.OLD_AN2=3DSTER_COMP.NEW_AN2;
STER_COMP.timer_working=3D1;
T0IE=3D1;//1;
T0CS=3D0;//0;
}
}
}=20
}
=20
=20
=20
/*=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D OBSLUGA PRZERWAN=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D*/
static void przerwanie(void) interrupt 0
{
if(T0IF)
{
T0IF=3D0;
=20
if(PORTB&BIT(PWR_OK_I)) //jesli PWR_OK to odliczaj czas
{
LICZ_PRZER_T0++; =20
if(!LICZ_PRZER_T0) //jesli licznik sie przepelnil to=20
{ =20
PORTB|=3DBIT(BUP_GATE_O); //znaczy ze juz czas konczyc odliczanie
PORTB|=3DBIT(BSP_GATE_O); //no i ustawiamy porty wyjsciowe w odp st=
an
TMR0=3DD_INIT_TIMER; //inicjalizujemy timer wartoscia poczatkowa
=20
T0IE=3D0; //blokujemy przerwania ad timera 0
T0CS=3D1; //zliczmy impulsy zewnetrzne czyli stop
=20
LICZ_PRZER_T0=3DOPEN_BSP_TIME; =20
STER_COMP.timer_working=3D0; =20
}
}
else
{
PORTB|=3DBIT(BUP_GATE_O);
}
TMR0=3DTMR0-D_TIMER_INTERVAL; //korekcja licznika timera0 tak aby byl=
a wlasciwa ilosc cykli do zliczeia
}
=20
if(TMR1IF)
{
TMR1IF=3D0;
PORTB^=3DBIT(5);
LICZ_PRZER_T1++;
if(!LICZ_PRZER_T1)
{
PORTB^=3DBIT(5);
LICZ_PRZER_T1=3D(65535-/*900*/10); //czas 45 sekund
}
=20
TMR1L=3DD_INIT_TIMER1L;
TMR1H=3DD_INIT_TIMER1H;
}
}
=20
included files:
=20
#include "urzadzenia_pica.h"
/*=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D FUNKCJE =3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D*/=20
=20
void init_PIC_timer0(void)
{=20
PSA=3D1; =20
T0CS=3D1; =20
T0IE=3D0; =20
TMR0=3DD_INIT_TIMER; =20
}
=20
/*void init_PIC_comp (void)
{
CM0=3D1; =20
CM2=3D1;
PEIE=3D1; =20
CMIF=3D0; =20
CMIE=3D1; =20
}*/
=20
void init_PIC_port(void)
{
CM0=3D1; =20
CM1=3D1;
CM2=3D1;
TRISA|=3DBIT(AN1); =20
TRISA|=3DBIT(AN2);=20
NOT_RBPU=3D0; =20
TRISB&=3D~BIT(BUP_GATE_O); =20
TRISB&=3D~BIT(BSP_GATE_O); =20
TRISB|=3DBIT(PWR_OK_I); =20
=20
TRISB&=3D~BIT(5); =20
}
=20
void init_PIC_timer1(void)
{
TMR1IF=3D0; =20
TMR1ON=3D0; =20
TMR1IE=3D1; =20
TMR1CS=3D0; =20
T1CKPS1=3D0; =20
T1CKPS0=3D0;
TMR1L=3DD_INIT_TIMER1L;
TMR1H=3DD_INIT_TIMER1H;
TMR1ON=3D1; =20
}
and my makefile:
=20
#=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3DZMIENNE MAKFILE=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D#
=20
CC=3Dsdcc
#zmienne gdy uzywamy gputils
=20
CFLAGS=3D-V --debug-xtra -mpic14 -p16f628a=20
LINKER=3Dgplink
LFLAGS=3D-ainhx8m -m
LLIB=3D "c:\Program Files\sdcc\lib\pic\pic16f628a.lib" "c:\Program Files\sd=
cc\lib\pic\libsdcc.lib"
=20
CL_DIR=3D"c:\Documents and Settings\marcin\Pulpit\pce\"
=20
#=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D#
=20
all: count
=20
count: count.o urzadzenia_pica.o=20
=20
# $(CC) $(CFLAGS) -o count.hex count.o urzadzenia_pica.o
=20
$(LINKER) $(LFLAGS) -o count.hex count.o urzadzenia_pica.o $(LLIB)
=20
urzadzenia_pica.o: urzadzenia_pica.c
=20
$(CC) $(CFLAGS) -c urzadzenia_pica.c
=20
count.o: count.c
=20
$(CC) $(CFLAGS) -c count.c=20
=20
clean:
=20
rm *.hex *.lst *.o *.cod *.asm *.d *.p *.map
What I'm doing wrong ?
Please anyone help me. =20
------------------------------------------------------------------------
Szybko i tanio ubezpiecz samochod!
Kupno polisy zajmie Ci 15 minut! Kontakt przez telefon albo Internet.
Kliknij i sprawdz: http://link.interia.pl/f19a0
|