Poczatki C 8051
Masz problem? Zapytaj na forum elektroda.pl
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++)
;
}
}
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
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
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.
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.
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: inc R7</tt>
<br><tt> cjne R7,#0x00,A</tt>
<br><tt> inc R6</tt>
<br><tt>A: cjne R6,#0x7F,B</tt>
<br><tt> cjne 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> unsigned int data n;
<br> for(n=0;n!=32767;n++);
<br> </html>
--------------E4E7438DBFE5678FE13A8CE1--
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
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
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
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
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
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!
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.
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!
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 ;->>>
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!
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!
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/