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 program
working just fine. This variable name is TABLE_INDEKS .I have:
SDCC : mcs51/gbz80/z80/avr/ds390/pic16/pic14/TININative/xa51/ds400/hc08 2.6.1
#4341 (Aug 24 2006) (MINGW32)
gasm-0.13.3 beta
gplink-0.13.3 alfa
windowsXP pro
My program:
/*==================================================================================*/
/*
/*/*==================================================================================*/
#define __16f628a
#include <pic/pic16f628a.h>
#include "urzadzenia_pica.h"
#include "definicje.h"
typedef unsigned int WORD;
WORD at 0x2007 __CONFIG = (_CP_OFF & _WDT_ON & _MCLRE_OFF &
_INTOSC_OSC_NOCLKOUT & _LVP_OFF & _PWRTE_ON & _BODEN_ON);
/*=================================== DEFINICJE
=====================================*/
#define BIT(x) (1<<(x))
/*=========================== DEKLARACJE ZMIENNYCH GLOBALNYCH
=======================*/
code unsigned char
tabelka[240]={51,54,57,60,63,66,69,72,75,85,87,89,91,93,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,147,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,29,25,25,25,25,25,25,25,25,
25,25,16,16,16,16,16,16,16,16,16,16,10};
static struct SOFT_KOMP{ //stuktura sterujaca komparatorem programowym
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;
unsigned char LICZ_PRZER_T0; //licznik impulsow zliczonych przez
przerwaia z timera0
unsigned int LICZ_PRZER_T1; //licznik impulsow zliczonych przez przerwaia
z timera1
unsigned char OPEN_BSP_TIME; //czas przez jaki ma byc otwarty tranzystor
unsigned char TABLE_INDEKS;
/*=================================== FUNKCJA MAIN
===================================*/
void main(void)
{
//TABLE_INDEKS=0;
TRISA=0x00; //chwilowo ustawiamy wszystkie porty jako wyjscia
TRISB=0x00; //
PORTA=0xFF; //
PORTB=0xFF; //
STER_COMP.timer_working=0;
STER_COMP.start=205;
OPEN_BSP_TIME=235;
init_PIC_port();
PORTB&=~BIT(BSP_GATE_O); //WYLACZAMY TRANZYSTOR BSP295 BSP_GATE_O=0
PORTB|=BIT(BSP_GATE_O);
PORTB|=BIT(BUP_GATE_O); //ZALACZAMY TRANZYSTOR BUP203 BUP_GATE_O=1
init_PIC_timer0();
init_PIC_timer1();
PEIE=1; //wlaczenie zezwolenia na przerwanie od dodatkoych przerwan
GIE=1; //globalne zezwolenie na przerwania
if(PORTA&BIT(AN1)){STER_COMP.OLD_AN1=1;STER_COMP.NEW_AN1=1;}else{STER_COMP.OLD_AN1=0;STER_COMP.NEW_AN1=0;}
if(PORTA&BIT(AN2)){STER_COMP.OLD_AN2=1;STER_COMP.NEW_AN2=1;}else{STER_COMP.OLD_AN2=0;STER_COMP.NEW_AN2=0;}
while(1)
{
if(!STER_COMP.timer_working && !STER_COMP.start) //jesli pracujemy
{
if(PORTA&BIT(AN1)){STER_COMP.NEW_AN1=1;}else{STER_COMP.NEW_AN1=0;}
if(PORTA&BIT(AN2)){STER_COMP.NEW_AN2=1;}else{STER_COMP.NEW_AN2=0;}
if((STER_COMP.NEW_AN1!=STER_COMP.OLD_AN1) &&
(STER_COMP.NEW_AN2!=STER_COMP.OLD_AN2))
{
PORTB&=~BIT(BUP_GATE_O);
PORTB&=~BIT(BSP_GATE_O);
STER_COMP.OLD_AN1=STER_COMP.NEW_AN1;
STER_COMP.OLD_AN2=STER_COMP.NEW_AN2;
STER_COMP.timer_working=1;
T0IE=1;//1;
T0CS=0;//0;
}
}
if(!STER_COMP.timer_working && STER_COMP.start!=0) //jesli wlasnie
startujemy
{
if(PORTA&BIT(AN1)){STER_COMP.NEW_AN1=1;}else{STER_COMP.NEW_AN1=0;}
if(PORTA&BIT(AN2)){STER_COMP.NEW_AN2=1;}else{STER_COMP.NEW_AN2=0;}
if((STER_COMP.NEW_AN1!=STER_COMP.OLD_AN1) &&
(STER_COMP.NEW_AN2!=STER_COMP.OLD_AN2))
{
STER_COMP.start=STER_COMP.start-1;
LICZ_PRZER_T0=250;
PORTB&=~BIT(BUP_GATE_O);
PORTB&=~BIT(BSP_GATE_O);
STER_COMP.OLD_AN1=STER_COMP.NEW_AN1;
STER_COMP.OLD_AN2=STER_COMP.NEW_AN2;
STER_COMP.timer_working=1;
T0IE=1;//1;
T0CS=0;//0;
}
}
}
}
/*==================================== OBSLUGA
PRZERWAN===============================*/
static void przerwanie(void) interrupt 0
{
if(T0IF)
{
T0IF=0;
if(PORTB&BIT(PWR_OK_I)) //jesli PWR_OK to odliczaj czas
{
LICZ_PRZER_T0++;
if(!LICZ_PRZER_T0) //jesli licznik sie przepelnil to
{
PORTB|=BIT(BUP_GATE_O); //znaczy ze juz czas konczyc odliczanie
PORTB|=BIT(BSP_GATE_O); //no i ustawiamy porty wyjsciowe w odp stan
TMR0=D_INIT_TIMER; //inicjalizujemy timer wartoscia poczatkowa
T0IE=0; //blokujemy przerwania ad timera 0
T0CS=1; //zliczmy impulsy zewnetrzne czyli stop
LICZ_PRZER_T0=OPEN_BSP_TIME;
STER_COMP.timer_working=0;
}
}
else
{
PORTB|=BIT(BUP_GATE_O);
}
TMR0=TMR0-D_TIMER_INTERVAL; //korekcja licznika timera0 tak aby byla
wlasciwa ilosc cykli do zliczeia
}
if(TMR1IF)
{
TMR1IF=0;
PORTB^=BIT(5);
LICZ_PRZER_T1++;
if(!LICZ_PRZER_T1)
{
PORTB^=BIT(5);
LICZ_PRZER_T1=(65535-/*900*/10); //czas 45 sekund
}
TMR1L=D_INIT_TIMER1L;
TMR1H=D_INIT_TIMER1H;
}
}
included files:
#include "urzadzenia_pica.h"
/*======================================== FUNKCJE
===========================================*/
void init_PIC_timer0(void)
{
PSA=1;
T0CS=1;
T0IE=0;
TMR0=D_INIT_TIMER;
}
/*void init_PIC_comp (void)
{
CM0=1;
CM2=1;
PEIE=1;
CMIF=0;
CMIE=1;
}*/
void init_PIC_port(void)
{
CM0=1;
CM1=1;
CM2=1;
TRISA|=BIT(AN1);
TRISA|=BIT(AN2);
NOT_RBPU=0;
TRISB&=~BIT(BUP_GATE_O);
TRISB&=~BIT(BSP_GATE_O);
TRISB|=BIT(PWR_OK_I);
TRISB&=~BIT(5);
}
void init_PIC_timer1(void)
{
TMR1IF=0;
TMR1ON=0;
TMR1IE=1;
TMR1CS=0;
T1CKPS1=0;
T1CKPS0=0;
TMR1L=D_INIT_TIMER1L;
TMR1H=D_INIT_TIMER1H;
TMR1ON=1;
}
and my makefile:
#=================================ZMIENNE MAKFILE===========================#
CC=sdcc
#zmienne gdy uzywamy gputils
CFLAGS=-V --debug-xtra -mpic14 -p16f628a
LINKER=gplink
LFLAGS=-ainhx8m -m
LLIB= "c:\Program Files\sdcc\lib\pic\pic16f628a.lib" "c:\Program
Files\sdcc\lib\pic\libsdcc.lib"
CL_DIR="c:\Documents and Settings\marcin\Pulpit\pce\"
#===========================================================================#
all: count
count: count.o urzadzenia_pica.o
# $(CC) $(CFLAGS) -o count.hex count.o urzadzenia_pica.o
$(LINKER) $(LFLAGS) -o count.hex count.o urzadzenia_pica.o $(LLIB)
urzadzenia_pica.o: urzadzenia_pica.c
$(CC) $(CFLAGS) -c urzadzenia_pica.c
count.o: count.c
$(CC) $(CFLAGS) -c count.c
clean:
rm *.hex *.lst *.o *.cod *.asm *.d *.p *.map
What I'm doing wrong ?
Please anyone help me.
------------------------------------------------------------------------
Szybko i tanio ubezpiecz samochod!
Kupno polisy zajmie Ci 15 minut! Kontakt przez telefon albo Internet.
Kliknij i sprawdz: http://link.interia.pl/f19a0
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys -- and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Sdcc-user mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/sdcc-user