Poczatki C 8051



Masz problem? Zapytaj na forum elektroda.pl

Poprzedni Następny
Wiadomość
Spis treści
From: "Gissbourne" <gissbourne_at_nospam_poczta.onet.pl>
Subject: Poczatki C 8051
Date: Fri, 13 Dec 2002 21:55:20 +0100


Czy ktos moze mi wyjasnic dlaczego jesli w petli for zrobie 32768 zamiast
tego co jest to program zle dziala ?
Wyglada na to, ze pakiet Raisonance zle dziala albo o czyms nie wiem.
Kwarc=11,0592MHz
Gissbourne



#include <reg51.h>
sbit led=P1^7;

main()
{
unsigned int data n;
while(1)
{
led=!led;
for(n=0;n!=32767;n++)
;
}
}






Poprzedni Następny
Wiadomość
Spis treści
From: zielpro_at_nospam_cavern.pl (ziel)
Subject: RE: Poczatki C 8051
Date: 13 Dec 2002 23:10:26 +0100


Czy ktos moze mi wyjasnic dlaczego jesli w petli for zrobie 32768 zamiast
tego co jest to program zle dziala ?

Nie rozumiem.

pzdr
Artur
--
Archiwum grupy: http://niusy.onet.pl/pl.misc.elektronika


Poprzedni Następny
Wiadomość
Spis treści
From: "Tomasz Bednarz" <tb_at_nospam_internet.pl>
Subject: Re: Poczatki C 8051
Date: Sat, 14 Dec 2002 00:25:34 +0100



Użytkownik "Gissbourne" <gissbourne_at_nospam_poczta.onet.pl> napisał w wiadomości
news:atdhf5$fjp$1_at_nospam_news.tpi.pl...
Czy ktos moze mi wyjasnic dlaczego jesli w petli for zrobie 32768 zamiast
tego co jest to program zle dziala ?
Wyglada na to, ze pakiet Raisonance zle dziala albo o czyms nie wiem.
Kwarc=11,0592MHz
for(n=0;n!=32767;n++)

zauwaz ze
L1=32767 to binarnie 0111 1111 1111 1111
L2=32768 to binarnie 1000 0000 0000 0000

Czyli jezeli masz L1 to do jej zapisu wystarczaja ci 15 bitow
jezeli zas wpiszesz L2 tp juz potrzebujesz bitow 16 !
Co prawda nie mam ani wielkiego doswiadczenia w C++ ani w 8051
ale moim zdaniem dochodzi tu do przepelnienia drugiego parametru for
i jak wpisujesz L2 to pierwszy bit zostaje uciety i de facto masz zero !
for(n=0;n!=0;n++)
czyli petla zrobi jeden krok ? dla n = 0


TB



Poprzedni Następny
Wiadomość
Spis treści
From: "jerry1111" <jerry1111_at_nospam_wp.pl>
Subject: Re: Poczatki C 8051
Date: Sat, 14 Dec 2002 00:32:38 +0100


Czyli jezeli masz L1 to do jej zapisu wystarczaja ci 15 bitow
jezeli zas wpiszesz L2 tp juz potrzebujesz bitow 16 !
Co prawda nie mam ani wielkiego doswiadczenia w C++ ani w 8051
ale moim zdaniem dochodzi tu do przepelnienia drugiego parametru for

Nie pasuje. Kompilator powinien 32768 zapisac poprawnie
jako unsigned i tak porownywac (bo zmienna tez jest
unsigned). Metoda jedna - popatrzec w to, co kompilator
wyprodukowal i dedukowac 'co poeta mial na mysli'.

jerry

PS: Albo sprobuj wpisac 32768L - nie znam tego kompilatora
ale moze pomoze.



Poprzedni Następny
Wiadomość
Spis treści
From: Maciej Czapla <mc_at_nospam_sensor.com.pl>
Subject: Re: Poczatki C 8051
Date: Sat, 14 Dec 2002 00:56:47 +0100


PS: Albo sprobuj wpisac 32768L - nie znam tego kompilatora
ale moze pomoze.

Albo 32768u. Normalnie literały zaokrąglane są do typu int a 32768 nie jest juz
int.

MC
--
Czy to sens ma, kląć, że ten Świat z kiepskiego zrobiony surowca,
Bo dobry Bóg już zrobił co mógł, teraz trzeba zawołać fachowca.

Poprzedni Następny
Wiadomość
Spis treści
From: Ireneusz Niemczyk <NOSPAM_i.niemczyk_at_nospam_multispedytor.com.pl>
Subject: Re: Poczatki C 8051
Date: Sat, 14 Dec 2002 01:49:32 +0100



--------------E4E7438DBFE5678FE13A8CE1
Content-Type: text/plain; charset=iso-8859-2
Content-Transfer-Encoding: 8bit

Witaj Macieju :-)

Keil zrobił z tego* coś takiego:

B: inc R7
cjne R7,#0x00,A
inc R6
A: cjne R6,#0x7F,B
cjne R7,#0xFF,B

Czyli całkiem nieźle :-)

Miłej nocki Macieju.
--
PZD, Irek.N.
Chcesz rozweselić Boga? Powiedz Mu że masz plany!
*
unsigned int data n;
for(n=0;n!=32767;n++);


--------------E4E7438DBFE5678FE13A8CE1
Content-Type: text/html; charset=iso-8859-2
Content-Transfer-Encoding: 8bit

<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
Witaj Macieju :-)
<p>Keil zrobił z tego* coś takiego:
<p><tt>B:&nbsp;&nbsp;&nbsp; inc&nbsp;&nbsp;&nbsp; R7</tt>
<br><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cjne&nbsp;&nbsp; R7,#0x00,A</tt>
<br><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inc&nbsp;&nbsp;&nbsp; R6</tt>
<br><tt>A:&nbsp;&nbsp;&nbsp; cjne&nbsp;&nbsp; R6,#0x7F,B</tt>
<br><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cjne&nbsp;&nbsp; R7,#0xFF,B</tt>
<p>Czyli całkiem nieźle :-)
<p>Miłej nocki Macieju.
<br>--
<br>PZD, Irek.N.
<br>Chcesz rozweselić Boga? Powiedz Mu że masz plany!
<br>*
<br>&nbsp;unsigned int data n;
<br>&nbsp;for(n=0;n!=32767;n++);
<br>&nbsp;</html>

--------------E4E7438DBFE5678FE13A8CE1--


Poprzedni Następny
Wiadomość
Spis treści
From: "Gissbourne" <gissbourne_at_nospam_poczta.onet.pl>
Subject: Re: Poczatki C 8051
Date: Sat, 14 Dec 2002 12:00:55 +0100



Użytkownik "Ireneusz Niemczyk" <NOSPAM_i.niemczyk_at_nospam_multispedytor.com.pl>
napisał w wiadomości news:3DFA801C.218B4C43_at_nospam_multispedytor.com.pl...
Witaj Macieju :-)
Keil zrobił z tego* coś takiego:
B: inc R7
cjne R7,#0x00,A
inc R6
A: cjne R6,#0x7F,B
cjne R7,#0xFF,B

Podrzuc jeszcze to co jest dla 32768.
Jerry: "L" nie zrozwiazuje sprawy i nawet nie zglasza bledu (chyba powinien
byc)
M. Czapla: "u" zalatwia pomyslnie.
I jeszcze pytanie dlaczego musze dostawiac u skoro zmienna jest unsigned ?

Gissbourne

Na koniec to co wyprodukowal Rainsonance dla 32768 i 32768:


#include <reg51.h>

main()
{
int data unsigned n;
for(n=0;n!=32767;n++);
}

0000 E4 CLR A
0001 F500 R MOV n,A
0003 F500 R MOV n+01H,A
0005 ?FOR1:
0005 E500 R MOV A,n
0007 B47F05 CJNE A,#07FH,?NXT3
000A E500 R MOV A,n+01H
000C F4 CPL A
000D 600A JZ ?NXT2
000F ?NXT3:
000F 0500 R INC n+01H
0011 E500 R MOV A,n+01H
0013 70F0 JNZ ?FOR1
0015 0500 R INC n
0017 80EC SJMP ?FOR1
0019 ?NXT2:
0019 22 RET



#include <reg51.h>

main()
{
int data unsigned n;
for(n=0;n!=32768;n++);
}

0000 E4 CLR A
0001 F500 R MOV n,A
0003 F500 R MOV n+01H,A
0005 ?FOR1:
0005 E4 CLR A
0006 C0E0 PUSH ACC
0008 C0E0 PUSH ACC
000A C000 R PUSH n
000C C000 R PUSH n+01H
000E FC MOV R4,A
000F FD MOV R5,A
0010 7E80 MOV R6,#080H
0012 FF MOV R7,A
0013 120000 R LCALL ?C_CMPL
0016 BF0001 CJNE R7,#000H,?NXT3
0019 22 RET
001A ?NXT3:
001A 0500 R INC n+01H
001C E500 R MOV A,n+01H
001E 70E5 JNZ ?FOR1
0020 0500 R INC n
0022 80E1 SJMP ?FOR1



Poprzedni Następny
Wiadomość
Spis treści
From: "jerry1111" <jerry1111_at_nospam_wp.pl>
Subject: Re: Poczatki C 8051
Date: Sat, 14 Dec 2002 12:26:57 +0100


Podrzuc jeszcze to co jest dla 32768.
Jerry: "L" nie zrozwiazuje sprawy i nawet nie zglasza bledu (chyba powinien
byc)
M. Czapla: "u" zalatwia pomyslnie.

Bo ma byc U a nie L ;-)))

U nakazuje kompilatorowi traktowac stala jako unsigned
a L jako long. A tam potrzeba unsigned. I wszystko.
Pomyslalem o jednym a napisalem drugie ;-))

Po prostu jak nie dasz dla kompilatora U to bedzie on traktowal
32767 dobrze, a 32768 to bedzie dla niego -1. Po to jest U.

jerry



Poprzedni Następny
Wiadomość
Spis treści
From: "Gissbourne" <gissbourne_at_nospam_poczta.onet.pl>
Subject: Re: Poczatki C 8051
Date: Sat, 14 Dec 2002 12:39:19 +0100



Użytkownik "jerry1111" <jerry1111_at_nospam_wp.pl> napisał w wiadomości news:
Po prostu jak nie dasz dla kompilatora U to bedzie on traktowal
32767 dobrze, a 32768 to bedzie dla niego -1. Po to jest U.

A scislej -32768.

Gissbourne



Poprzedni Następny
Wiadomość
Spis treści
From: "jerry1111" <jerry1111_at_nospam_wp.pl>
Subject: Re: Poczatki C 8051
Date: Sat, 14 Dec 2002 16:15:09 +0100


A scislej -32768.

) no tak :)

Nie wiem czemu ale wyobrazilem sobie ze to bedzie
0xffff :)

Chyba chodzilo mi o zakres 16 bitow :)

jerry



Poprzedni Następny
Wiadomość
Spis treści
From: "jerry1111" <jerry1111_at_nospam_wp.pl>
Subject: Re: Poczatki C 8051
Date: Sat, 14 Dec 2002 12:18:25 +0100


B: inc R7
cjne R7,#0x00,A
inc R6
A: cjne R6,#0x7F,B
cjne R7,#0xFF,B
Czyli całkiem nieźle :-)

A jak wpiszesz 32768 to dalej bedzie
trzymal arytmetyke bez znaku? Czy cos dolozy?

jerry



Poprzedni Następny
Wiadomość
Spis treści
From: Ireneusz Niemczyk <NOSPAM_i.niemczyk_at_nospam_multispedytor.com.pl>
Subject: Re: Poczatki C 8051
Date: Sat, 14 Dec 2002 18:34:33 +0100


A jak wpiszesz 32768 to dalej bedzie
trzymal arytmetyke bez znaku? Czy cos dolozy?

Nieźle jest....operacje zaczyna wykonywać na longu :-) W efekcie kodu
przybywa znacznie. Absorbuje sporo więcej rejestrów pod to (z DPTR-em
włšcznie) oraz podpiera się odejmowaniem z biblioteki. W sumie tak z
4-5x więcej kodu na oko. Dodanie 'u' załatwia sprawę - pozostaje przy 2
bajtowym int.
--
PZD, Irek.N.
Chcesz rozweselić Boga? Powiedz Mu że masz plany!



Poprzedni Następny
Wiadomość
Spis treści
From: Milosz Skowyra <miloszek_at_nospam_fidonet.org.pl>
Subject: Re: Poczatki C 8051
Date: Sat, 14 Dec 2002 12:21:36 +0100


Ireneusz Niemczyk wrote:

Witaj Macieju :-)
Czyli całkiem nieźle :-)

Hmmm czemu piszesz w html-u ?
--
Regards. Przy odpowiedzi usun "." przed "net" z adresu!!!
|-----------------------------------------------------|
| Milosz Skowyra GSM Mobile +48 600 95 35 72 |
| miloszek_at_nospam_fido.net.org.pl 2:484/2.47 on fidonet |
|-----------------------------------------------------|
Poszukuje babci - urwala sie z lancucha.

Poprzedni Następny
Wiadomość
Spis treści
From: Ireneusz Niemczyk <NOSPAM_i.niemczyk_at_nospam_multispedytor.com.pl>
Subject: Re: Poczatki C 8051
Date: Sat, 14 Dec 2002 18:25:47 +0100


Hmmm czemu piszesz w html-u ?

A jakoś tak poszło, wiesz - moja własna, prywatna netszkapa doprowadza
mnie już do rozpaczy. Zachowuje się idiotycznie - igdnoruje moje
nastawy, pewnie trzeba przeinstalować...kiedyś będzie ;-) Sorki więc.

Miłego wieczoru Miłosz.
--
PZD, Irek.N.
Chcesz rozweselić Boga? Powiedz Mu że masz plany!



Poprzedni Następny
Wiadomość
Spis treści
From: Milosz Skowyra <miloszek_at_nospam_fidonet.org.pl>
Subject: Re: Poczatki C 8051
Date: Sat, 14 Dec 2002 21:21:54 +0100


Ireneusz Niemczyk wrote:

Hmmm czemu piszesz w html-u ?
A jakoś tak poszło, wiesz - moja własna, prywatna netszkapa doprowadza
mnie już do rozpaczy. Zachowuje się idiotycznie - igdnoruje moje
nastawy, pewnie trzeba przeinstalować...kiedyś będzie ;-) Sorki więc.

Nie dramat, tylko myslalem ze przeinstalowales system czy cus i
zapomniales zmienic ;-)

Miłego wieczoru Miłosz.

Rowniez... jest bardzo mily bo zaraz ide spac ;-)
--
Regards. Przy odpowiedzi usun "." przed "net" z adresu!!!
|-----------------------------------------------------|
| Milosz Skowyra GSM Mobile +48 600 95 35 72 |
| miloszek_at_nospam_fido.net.org.pl 2:484/2.47 on fidonet |
|-----------------------------------------------------|
"Zaprojektowany do lubudubu" - (C) Marek Dzwonnik ;->>>

Poprzedni Następny
Wiadomość
Spis treści
Date: Mon, 16 Dec 2002 19:16:33 +0100
From: badworm <nospam_at_nospam_post.pl>
Subject: Re: Poczatki C 8051


Dnia 02-12-14 18:25 Chomik zjadł i zmagazynował posta od < Ireneusz
Niemczyk > :

A jakoś tak poszło, wiesz - moja własna, prywatna netszkapa doprowadza
mnie już do rozpaczy. Zachowuje się idiotycznie - igdnoruje moje
nastawy, pewnie trzeba przeinstalować...kiedyś będzie ;-) Sorki więc.



Jak już przeinstalowywać to lepiej od razu na Mozillę :-)

--
Pozdrawiam Bad Worm badworm<małpa>post<kropka>pl
http://www.gusnet.prv.pl GG# 2400455
"All in all you're just another brick in the wall"
Tnijcie cytaty i sygnaturki!


Poprzedni Następny
Wiadomość
Spis treści
From: Ireneusz Niemczyk <NOSPAM_i.niemczyk_at_nospam_multispedytor.com.pl>
Subject: Re: Poczatki C 8051
Date: Mon, 16 Dec 2002 23:51:15 +0100


Jak już przeinstalowywać to lepiej od razu na Mozillę :-)

Kiedy to międzymordzie do operatora siakieś takie.....
Ale masz rację - kiedyś trzeba będzie!
--
PZD, Irek.N.
Chcesz rozweselić Boga? Powiedz Mu że masz plany!



Poprzedni Następny
Wiadomość
Spis treści
From: Samotnik <samotnik_at_nospam_samotnia.eu.org>
Subject: Re: Poczatki C 8051
Date: Sat, 14 Dec 2002 11:58:54 +0000 (UTC)


W artykule <atdhf5$fjp$1_at_nospam_news.tpi.pl> Gissbourne napisał(a):
Czy ktos moze mi wyjasnic dlaczego jesli w petli for zrobie 32768 zamiast
tego co jest to program zle dziala ?

Przekraczasz zakres i licznik Ci się obraca (robi Ci się -32ilestam ;).
--
Samotnik
Michal Jeczalik Sr, http://www.samotnia.eu.org/