Stránka 1 z 2

ISP programování AT89S52

Napsal: 16 kvě 2010, 14:51
od MirrA1
Přešel jsem z PICů a z assembleru na Atmely a na programovací jazyk C. Momentálně se učím programovat, takže zatím zkouším jednoduché příkazy na rožnutí LEDky, blikání...
Programátor používám pro sériové ISP programování.

Narazil jsem ale na problém, že celé naprogramování procesoru proběhně zprávně, ale poté program neběží a nerožne se mi ani LEDka. Příjde mi, že se procesor chová po každým zapnutí jinak - někdy se ledka rožne a jindy ne.
Kód je opsaný z knihy C pro mikrokontroléry ATMEL 89S52, kontrolér mám zapojen na nepájivém poli kde má zapojeny jen napájecí piny, krystal a připojen ISP programátor.

Nenapadá někoho náhodou v čem by mohl být problém?

Předem díky :-)

#include <regx52.h>

#define LED P0_0
#define LED2 P2_0

void stop ()
{
while(1);
}

void main ()
{
LED=0;
LED2=1;
stop ();
}

Napsal: 16 kvě 2010, 14:55
od Burajko

Napsal: 16 kvě 2010, 15:11
od MirrA1
Takže když si takhle zapojím RESET, tak po připojení napájení mi diody probliknou (svítit by měla jen jedna) a nebo zůstane svítit jedna nebo druhá. Pokud zůstane svítit dioda která dle programu svítit nemá, tak svítí jen asi polovičním jasem. Dále pokud nechám připojené napájení a RST vstup krátce spojím s Ucc, tak diody probliknou a nebo se po několikátém pokusu rožne ta která je naprogramovaná.

Takže mi připadá že celkově je to nějaké divné nestabilní.

Napsal: 16 kvě 2010, 15:19
od Burajko
Kontakty mas dobre?Napatie blokovane?Je v tolerancii?

Napsal: 16 kvě 2010, 15:29
od MirrA1
Burajko píše:Kontakty mas dobre?Napatie blokovane?Je v tolerancii?


teď na to koukám a při každým připojení se napětí na napájecích vstupech rozkmitá s amplitudou okolo 1,5V a frekvencí blízkou frekvenci použitýho krystalu. Takže tam asi někde bude past. Tak ještě mrknu na blokování :- )

Napsal: 16 kvě 2010, 16:07
od MirrA1
Takže jsem bezradnej :-) napájení mám blokovaný, ale stejně to celé kmitá, na všech vývodech portu 0 je obdélník pokaždé o jiné frekvenci...

Napsal: 16 kvě 2010, 16:14
od Andrea
Kam máš připojenej pin 31?

Napsal: 16 kvě 2010, 16:31
od MirrA1
Andrea píše:Kam máš připojenej pin 31?



Tenhle pin zůstal nezapojen. Takže tu byl nejistej stav a mikrokontrolér chudák nevěděl odkud má číst program... Jsem si nevšiml, že to nemám zapojeno :-) Tak ZATÍM to vypadá, že problém je vyřešen :-)

Moc vám všem zůčastněným děkuji :idea:

Napsal: 16 kvě 2010, 18:42
od MirrA1
Tak když už jsme to řešili, tak nebudu zakládat nové vlákno.

Programuji v prostředí Keil uVision - dal jsem dohromady jednoduchý kód pro blikání ledky:

#include <regx52.h>

#define LED P0_1

void cekej()
{
unsigned int i;
for(i=0;i<=50000U;i++);
}


void main()
{
while(1)
{
LED=~LED;
cekej();
}
}


a při kompilaci mě to napíše problém WARNING L16 (UNCALLED SEGMENT, IGNORED FOR OVERLAY) Řešení problému je zde: http://www.keil.com/support/docs/2316.htm nicméně já to nějak nemůžu pochopit o co v tomto případě jde. Může mi to prosím někdo na tom mém konkrétním případě vysvětlit?

Napsal: 16 kvě 2010, 18:48
od Andrea
A funguje to?

Napsal: 16 kvě 2010, 18:49
od MirrA1
Andrea píše:A funguje to?


program je dobře napsán, je to dle knihy. Ale zkompilovat to nejde skrze tuhle chybu.

Napsal: 16 kvě 2010, 18:53
od Andrea
MirrA1 píše: zkompilovat to nejde skrze tuhle chybu.

Dyť to není chyba, jen varování. Nemáš zapnutou optimalizaci, která ten for ve funkci cekej vyhodí a zlikviduje celou funkci?

Napsal: 16 kvě 2010, 19:17
od MirrA1
Je to tak, nejprve nastala tato chyba: http://www.keil.com/support/docs/2334.htm a pak až to výše zmíněné varování. Ale nechápu v čem je problém, jak chybu odstranit.

Napsal: 16 kvě 2010, 19:22
od Andrea
Máš tam víc mainů. Co jsi změnil oproti tomu prvnímu programu, nezapnul jsi něco v nastaveních?

Napsal: 16 kvě 2010, 19:30
od MirrA1
Andrea píše:Máš tam víc mainů. Co jsi změnil oproti tomu prvnímu programu, nezapnul jsi něco v nastaveních?



vůbec nic jsem neměnil. Když ten druhý kód pro blikání přepíšu tím prvním pro svícení, tak to jede. Jen to nechce zkompilovat ten druhý skrze tu chybu a varování.
A jinak jak to myslíš že tam mám víc mainů?