Problème avec le compilateur AVR ImageCraft

J

Jack / / Ani

Guest
Salut à tous,

S'il vous plaît dites-moi quel est le problème avec ce programme

# Include <io2313v.h>
# Include <macros.h>

num const char [] = (0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80);

void wait () (;)

void main ()
(
unsigned int i; / * * var Delay /
unsigned char j; / * * LED var /

while (1)
(/ * Boucle infinie * /

for (j = 0; j <8; j ) / * LED Blink 0,1,2,3,4,5,6,7 * /
(
PORTB = num [j];
/ * Affichage à LED * Port /
for (i = 0; i <10000; i ) / Delay * Chiffres pour 1000 * /
(
wait (); / * * fonction d'attente d'appel /
)
)
)
)

Lorsque je compile ce fichier je reçois cet hexagone

: 020000000EC030
: 140016000102040810204080CFEDD0E0CDBFDEBFC051D04021
: 14002A000AEA08830024E0E6F0E010E0E036F10711F00192F7
: 14003E00FBCF0083EEE1F0E0A0E6B0E010E0EE31F10721F094
: 14005200C89531960D92F9CF02D0FFCF089519C0442715C0B9
: 1400660086E190E0242E3324280E391EE22DF32DC89508BA2B
: 14007A006627772703C0EEDF6F5F7F4F6031E7E27E07C8F381
: 0A008E004395483048F3E6CF08958B
: 00000001FF

J'ai testé cet hexagone par AT90S2313 de programmation, mais il ne fonctionne pas, les LED ne clignotent pas du tout!
Pouvez-vous s'il vous plaît me donner hex code source / de / testé programme a vérifié à clignoter la LED, afin que je puisse obtenir l'assurance que mon programmeur et l'UC sont fonctionne correctement.Je suis novice à AVR et est-il urgent.

Merci pour toute réponse / suggestions.

 
main ()
(

while (1)
(
int compteur;
PORTB = 0xFF;
for (count = 0; compter <1000, le comte );
PORTB = 0x00;
for (count = 0; compter <1000, le comte );
)
)

 
Je pense que c'est ce que vous tentait de mettre en œuvre:void main (void)
(

int compteur;
temp int;

DDRB = 0xff;
PORTB = 0;

for (;

<img src="http://www.edaboard.com/images/smiles/icon_wink.gif" alt="Clin d'œil" border="0" />for (temp = 0; temp! = 8; temp )
(
PORTB = 1 <<temp;
pour (suite = 0; compter <1000, le comte );
)
)

 
Merci pour la réponse.Pouvez-vous s'il vous plaît de souligner pourquoi mon programme ci-dessus ne fonctionne pas, afin que je puisse comprendre ma faute.Je suppose que le problème que je / direction déclaration registre O est manquant.Comme dans PIC, nous utilisons TRISA et TRISB à régler le code PIN comme I / O.Si je ne me trompe pas Artem a suggéré d'ajouter DDRB vous inscrire à la purpose.But même je suis encore confus, je voudrais tout de même avoir un peu plus de précisions!

Merci encore

 
Me semble que le paramètre de port est la principale différence entre les programmes, et la seule raison que je peux voir pourquoi le vôtre ne fonctionne pas.
Il suffit de l'ajouter à votre programme et voir si elle commence à clignoter.

Maui

 
Salut Jack / / Ani,

Comme Artem suggère vous n'avez pas besoin du tableau num.Il suffit de déplacement vers la gauche la variable TEMP.Réglage DDRB registre c'est un must si vous conduisez la LED directement.Si vous les conduire par un conducteur (par exemple un transistor NPN), vous n'avez pas à vous soucier depuis internes MOS résistance pull-up de la volonté source du courant à des biais de votre transistor (100 uA si vous conduisez directement le transistor de base, la base sera flotteurs lorsque vous inscrire 0 sur les données portx registre; souviens DDRB n'a pas été mis à 1, alors votre port se comporte comme entrée).

Selon votre hex j'ai eu ce code désassemblé:
Code:

;------------------------------------------------- ------------------------

. CSEG

. Org 0

;------------------------------------------------- ------------------------

avr000F rjmp; 0000 C00E

inconnu, 0001 FFFF

inconnu, 0002 FFFF

inconnu, 0003 FFFF

inconnu, 0004 FFFF

inconnu, 0005 FFFF

inconnu, 0006 FFFF

inconnu, 0007 FFFF

inconnu, 0008 FFFF

inconnu, 0009 FFFF

inconnu; 000A FFFF

Muls R16, R17, 000B 0201

SBC R0, R4, 000C 0804

et R1, R0; 000D 2010

ld R4, Z; 000E 8040

avr000F: LDI YL, 0xDF; 000F EDCF

YH LDI, 0x00; 0010 E0D0

les SPL, YL, 0011 BFCD

des SPH, YH; 0012 BFDE

Subi YL, 0x10; 0013 51C0

SBCI YH, 0x00; 0014 40D0

ldi r16, 0xAA; 0015 EA0A

Y st, R16; 0016 8308

clr r0; 0017 2400

ZL LDI, 0x60; 0018 E6E0

ZH LDI, 0x00; 0019 E0F0

ldi r17, 0x00; 001A E010

avr001B: IPC ZL, 0x60; 001B 36E0

ZH cpc, R17, 001C 07F1

breq avr0020; 001D F011

r. Z , r0; 001F 9201

avr001B rjmp; 001F CFFB

avr0020: r. Z, R16; 0020 8300

ZL LDI, 0x1E; 0021 E1EE

ZH LDI, 0x00; 0022 E0F0

XL LDI, 0x60; 0023 E6A0

XH LDI, 0x00; 0024 E0B0

ldi r17, 0x00; 0025 E010

avr0026: IPC ZL, 0x1E; 0026 31EE

ZH cpc, R17; 0027 07F1

breq avr002D; 0028 F021

LPM; 0029 95C8

adiw ZL, 0x01; 002A 9631

r. X , r0; 002B 920D

rjmp avr0026; CFF9 002C

avr002D: sub0030 rcall; D002 002D

avr002E: avr002E rjmp; 002E FLMC

;------------------------------------------------- ------------------------

sub002F: ret; 002F 9508

;------------------------------------------------- ------------------------

sub0030: avr004A rjmp; 0030 C019

avr0031: r20 clr; 0031 2744

rjmp avr0048; 0032 C015

avr0033: R24 LDI, 0x16; 0033 E186

LDI R25, 0x00; 0034 E090

mov r2, r20; 0035 2E24

clr r3; 0036 2433

Ajouter R2, R24; 0037 0E28

adc R3, R25; 0038 1E39

ZL mov, R2; 0039 2DE2

ZH mov, r3; 003A 2DF3

LPM; 003B 95C8

sur PORTB, r0; 003C BA08

clr r22; 003D 2766

clr r23; 003E 2777

rjmp avr0043; C003 003F

avr0040: sub002F rcall; 0040 DFEE

Subi r22, 0xFF; 0041 5F6F

SBCI r23, 0xFF; 0042 4F7F

avr0043: R22 IPC, 0x10, 0043 3160

ZL LDI, 0x27; 0044 E2E7

CPC r23, ZL; 0045 077E

brlo avr0040; 0046 F3C8

inc r20; 0047 9543

avr0048: r20 IPC, 0x08, 0048 3048

brlo avr0033; 0049 F348

avr004A: avr0031 rjmp; 004A CFE6

ret; 004B 9508. Sortie

 
Merci à tous pour des suggestions utiles.Mon programme final Artem suggéré est comme ça.Maintenant je peux voir LED brillant éclat, mais le problème est d'autant qu'ils lueur dans le même temps quand je mets l'alimentation et de ne jamais briller à nouveau!

# Include <io2313v.h>
void main (void)
(
int compteur;
temp int;
DDRB = 0xff;
PORTB = 0;

for (;

<img src="http://www.edaboard.com/images/smiles/icon_wink.gif" alt="Clin d'œil" border="0" />for (temp = 0; temp! = 8; temp )
(
PORTB = 1 <<temp;
for (count = 0; compteur <10000; nombre );
)

)

Voici l'hexagone

: 020000000AC034
: 14001600CFEDD0E0CDBFDEBFC051D0400AEA08830024E0E6B7
: 14002A00F0E010E0E036F10711F00192FBCF0083E6E1F0E07C
: 14003E00A0E6B0E010E0E631F10721F0C89531960D92F9CFFD
: 1400520001D0FFCF8FEF87BB222428BA4427552701E010E05B
: 14006600242F352F11D008BB662777276F5F7F4F6031E7E20A
: 14007A007E07D4F34F5F5F4F4830E0E05E0761F7E9CF089580
: 0E008E00222321F0000F111F2A95FACF0895AA
: 00000001FF

S'il vous plaît aidez-moi.

Merci encore

 
Jack / / Ani a écrit:

Merci à tous pour des suggestions utiles.
Mon programme final Artem suggéré est comme ça.
Maintenant je peux voir LED brillant éclat, mais le problème est d'autant qu'ils lueur dans le même temps quand je mets l'alimentation et de ne jamais briller à nouveau!# Include <io2313v.h>

void main (void)

(

int compteur;

temp int;

DDRB = 0xff;

PORTB = 0;for (;
<img src="http://www.edaboard.com/images/smiles/icon_wink.gif" alt="Clin d'œil" border="0" />
for (temp = 0; temp! = 8; temp )

(

PORTB = 1 <<temp;

for (count = 0; compteur <10000; nombre );

))Voici l'hexagone: 020000000AC034

: 14001600CFEDD0E0CDBFDEBFC051D0400AEA08830024E0E6B7

: 14002A00F0E010E0E036F10711F00192FBCF0083E6E1F0E07C

: 14003E00A0E6B0E010E0E631F10721F0C89531960D92F9CFFD

: 1400520001D0FFCF8FEF87BB222428BA4427552701E010E05B

: 14006600242F352F11D008BB662777276F5F7F4F6031E7E20A

: 14007A007E07D4F34F5F5F4F4830E0E05E0761F7E9CF089580

: 0E008E00222321F0000F111F2A95FACF0895AA

: 00000001FFS'il vous plaît aidez-moi.Merci encore
 
Salut Jack / / Ani

Comme d'habitude, je vais poster le programme démonté en fonction de votre fichier hex nouvelle.
Dans la couleur rouge est souligné les instructions en cas de retard équivalent C (pour (count = 0; compteur <10000; nombre )

<img src="http://www.edaboard.com/images/smiles/icon_wink.gif" alt="Clin d'œil" border="0" />Parce que votre XTAL est 4MHz, cela signifie un cycle d'instruction de 250 ns.
Ainsi, vous disposez d'un délai de 7 cycles x 250 x 10000 ns = 17,5 ms
Trop court délai pour voir la marche à LED.
Étant donné que vous déclarez la variable temp que vous pouvez int ya 65535 maximum.
En utilisant la même boucle basée sur des déclaration que vous pouvez obtenir un délai maximum de 115 ms.
Encore trop court.
Parce que vous êtes entre les peuples à puce utilisées pour themself gérer, je ne vais pas vous montrer comment augmenter le délai.

BTW, regardez le code entre l'offset 0049 et 004A,
et entre 003F offset et 0043.
C'est parce que vous avez déclaré temp variable int unsigned char au lieu.
Vous auriez dû au compilateur d'utiliser une paire registre, si les 8 facilement dans un octet.
Et vous pouvez voir une de la limitation du noyau AVR.Lorsque vous avez à comparer un mot, pour l'octet de poids fort, vous devez utiliser CPC.
Puisque vous ne pouvez pas utiliser une constante immédiate, vous êtes forcé de charger un registre utilisé (voir à l'offset 0042)

;------------------------------------------------- ------------------------
. CSEG
. Org 0
;------------------------------------------------- ------------------------
rjmp avr000B; 0000 C00A
inconnu, 0001 FFFF
inconnu, 0002 FFFF
inconnu, 0003 FFFF
inconnu, 0004 FFFF
inconnu, 0005 FFFF
inconnu, 0006 FFFF
inconnu, 0007 FFFF
inconnu, 0008 FFFF
inconnu, 0009 FFFF
inconnu; 000A FFFF
avr000B: LDI YL, 0xDF; 000B EDCF
YH LDI, 0x00; 000C E0D0
les SPL, YL; BFCD 000D
des SPH, YH; BFDE 000E
Subi YL, 0x10; 000F 51C0
SBCI YH, 0x00; 0010 40D0
ldi r16, 0xAA; 0011 EA0A
Y st, R16; 0012 8308
clr r0; 0013 2400
ZL LDI, 0x60; 0014 E6E0
ZH LDI, 0x00; 0015 E0F0
ldi r17, 0x00; 0016 E010
avr0017: IPC ZL, 0x60; 0017 36E0
ZH cpc, R17; 0018 07F1
breq avr001C; 0019 F011
r. Z , r0; 001A 9201
rjmp avr0017; 001B CFFB
avr001C: r. Z, R16, 001C 8300
ZL LDI, 0x16; 001D E1E6
ZH LDI, 0x00; 001E E0F0
XL LDI, 0x60; 001F E6A0
XH LDI, 0x00; 0020 E0B0
ldi r17, 0x00; 0021 E010
avr0022: IPC ZL, 0x16; 0022 31E6
ZH cpc, R17; 0023 07F1
breq avr0029; 0024 F021
LPM; 0025 95C8
adiw ZL, 0x01, 0026 9631
r. X , r0; 0027 920D
rjmp avr0022; 0028 CFF9
avr0029: sub002B rcall; 0029 D001
avr002A: avr002A rjmp; 002A FLMC
;------------------------------------------------- ------------------------
sub002B: R24 services; 002B EF8F
à DDRB, R24; 002C BB87
clr R2; 002D 2422
sur PORTB, R2; 002E BA28
avr002F: r20 clr; 002F 2744
clr r21; 0030 2755
avr0031: R16 LDI, 0x01; 0031 E001
ldi r17, 0x00; 0032 E010
mov R18, R20, 2F24 0033
mov R19, R21, 2F35 0034
rcall sub0047; 0035 D011
sur PORTB, r16; 0036 BB08
clr r22; 0037 2766
clr r23; 0038 2777

avr0039: R22 Subi, 0xFF; 0039 5F6FSBCI r23, 0xFF; 003A 4F7FIPC R22, 0x10; 003B 3160ZL LDI, 0x27; 003C E2E7CPC r23, ZL; 077E 003Dbrlt avr0039; F3D4 003E

Subi r20, 0xFF; 003F 5F4F
SBCI r21, 0xFF; 0040 4F5F
IPC r20, 0x08, 0041 3048
ZL LDI, 0x00; 0042 E0E0
CPC R21, ZL; 0043 075E
brne avr0031; 0044 F761
avr002F rjmp; 0045 CFE9
ret; 0046 9508
;------------------------------------------------- ------------------------
sub0047: R18 tst; 0047 2322
breq avr004D; 0048 F021
LSL r16; 0049 0F00
rol r17; 004A 1F11
décembre R18; 004B 952A
rjmp sub0047; 004C CAPE
avr004D: ret; 004D 9508

. Sortie

 
Enfin j'ai compris le problème qui est dû à cette nonsence http://www.blitzlogic.com/led_90.htm schématique, les pouvoirs en place sur la remise en mauvais sens!

 
Oui, c'est juste pas une mauvaise plaisanterie, mais une très mauvaise, j'ai perdu beaucoup de temps sur elle!Mais je ne comprends pas broche RESET est peu actif, cela signifie qu'il doit être tiré vers le bas à la terre afin de permettre, mais ici c'est tout le contraire!Pourquoi??ou je me fais quelque chose de mal?

 
Jack / / Ani a écrit:

broche RESET est peu actif, cela signifie qu'il doit être tiré vers le bas à la terre afin de permettre, mais ici, c'est tout le contraire!
Pourquoi??
ou je me fais quelque chose de mal?
 

Welcome to EDABoard.com

Sponsor

Back
Top