AT89C4051 - minimální konfigurace a oživení

Dobrý den, mám takový začátečnický problém, ale už jsem zkusil kdeco a furt to nemohu rozchodit. Výše zmíněný procesor zkouším naprogramovat tak, aby na portu 3 nastavoval bit 1 střídavě (tak po vteřině) na 0 a 1 a blikal led diodou. Nefunguje to. Problém je, že chyba může být v zapojení, ale i v programu, resp. obsahu paměti. Nemám programátor, který by uměl pracovat přímo s hex formátem, ale musím mu to předhodit přímo v bin tvaru, do kterého to konvertuju. Popíšu svůj postup: V RIDE jsem schopen naprogramovat něco, co by mělo blikat, RIDE mi vytvoří HEX, ten zkonvertuju do bin a naprogramuju do obvodu. Obvod zapojím s 12MHz krystalem a dvěma 27pF kondenzátory a startovacím resetem s elektrolytem a odporem, zmíněný P3.1 vývod zapojím na TTL vstup hradla (abych vyloučil, že mám diodu na výstupu špatně zapojenou), na jehož výstupu je led-dioda. Ale problém je, že i když tam ta dioda není a já ten výstup jen měřím, tak to nefunguje, napřed je tam asi tři sekundy jednička, pak to spadne na nulu a tak to zůstane. Možná by mi pomohlo, kdyby mi někdo byl ochoten poslat bin soubor, který by měl zmíněnou funkcionalitu, abych vyloučil chybu v programu. A šlo by nějak měřením vyloučit chybu zapojení ? Díky.

Ahoj

Je to už hodně dlouho, co jsem naposled programoval nějaký Atmel s CISC. U takto jednoduchého programu bych si snad vzpomněl, takže ti doporučím, vlož zde do code celý svůj program a já se na něj podívám.

Jaký používáš programátor?

Nejsem si jist, když tak mě prosím oprav, ale neumí náhodou RIDE tvořit i soubor *.bin?

Způsob jakým připojuješ LED je příliš složitý. Nedělej si starosti s chybným zapojením a LED připoj katodou k mikropočítači a anodu dej přes rezistor 1k5 na +5V. Otestuj to potom tak, že na na katodu připoj drátkem GND a LED by měla svítit. Pokud připojíš +5V, tak by měla zhasnout.

Standardně zjisti, jestli je na mikropočítači napěti, jestli není někde obvod rozpojen, případně můžeš zapojit logickou sondu na P3.1 a sledovat co se “děje”.

Díky, vkládat sem zdroják asi nemá cenu, protože ten jsem krokoval a ten se jeví ok (což samozřeujmě není záruka, že je ok :slight_smile:, ale já mu věřím - jsem softwerář), jde spíš o ten bin, který by mohl zkontrolovat někdo, kdo má disassembler a rutinu. Do toho binu to totiž konvertuju vlastním programem, což v sobě může nést potenciální problém. Programátor mám od Elektro Obecnice P-89C5x. Ten RIDE je dost obsáhlý, netvrdím, že ho znám, ale bin tam žádný nevidím, ať koukám, jak koukám (ani v dokumentaci, ani v adresáři po buildu). Za ten tip s ledkou dík, zkusil jsem to tak, ale problém trvá. Mám takový pocit, že problém by mohl být v taktování nebo resetu, ale nevím. Taky mám prd výbavu.

Výbavu nepotřebuješ v podstatě žádnou - stačí ti mikropočítač, součástky a kontaktní deska.
Navrhl bych ti jinou věc - můžu ti poslat jiný překladač. Je sice mírně archaický (ovládá se příkazovou řádkou), ale jako jeho výstup je hex i bin a funguje spolehlivě.

Díky moc, ten překladač by možná nebyl špatný - mám adresu ctverec (zavináč) post.cz . Jinak, abych nebyl úplný lenoch, posílám tady ten svůj program, je tam vidět, jak jsem měnil výtupní piny, protože mám pocit, že některé brány se liší elektrickou charakteristikou výstupu. programoval jsem to samozřejmě v C, páč nejsem masochista :wink:.

stmt level source
1 /#include <stdio.h>/
2 #include <reg51.h>
3
4 void main()
5 {
6 1 int loop;
7 1
8 1 while(1)
9 1 {
10 2
11 2 //asm{0xc2,0xB1}
12 2 asm{0xc2,0x97}
13 2 for (loop = 0; loop < 1000000; loop++)
14 2 {
15 3 asm{0x00,0x00,0x00}
16 3 }
17 2 // P1 = 0xFF;
18 2
19 2 //asm{0xd2,0xB1}
20 2 asm{0xd2,0x97}
21 2 for (loop = 0; loop < 1000000; loop++)
22 2 {
23 3 asm{0x00,0x00,0x00}
24 3 }
25 2 // P1 = 0x00;
26 2 }
27 1
28 1 }
29
30
RC51 COMPILER V03.03.35, BLIKAC 03/13/07 18:28:17 PAGE 2

ASSEMBLY LISTING OF GENERATED OBJECT CODE

        ; FUNCTION main (BEGIN)

0000 ?WHILE1:
0000 DB 0C2097
; SOURCE LINE # 13
0002 E4 CLR A
0003 F500 R MOV loop,A
0005 F500 R MOV loop+01H,A
0007 ?FOR2:
0007 DB 000000000
000A 0500 R INC loop+01H
000C E500 R MOV A,loop+01H
000E 7002 JNZ ?LAB7
0010 0500 R INC loop
0012 ?LAB7:
0012 E500 R MOV A,loop
0014 33 RLC A
0015 E4 CLR A
0016 5001 JNC ?NXT10
0018 14 DEC A
0019 ?NXT10:
0019 C0E0 PUSH ACC
001B C0E0 PUSH ACC
001D C000 R PUSH loop
001F C000 R PUSH loop+01H
0021 E4 CLR A
0022 FC MOV R4,A
0023 7D0F MOV R5,#00FH
0025 7E42 MOV R6,#042H
0027 7F40 MOV R7,#040H
0029 120000 R LCALL ?C_CMPL
002C BF00D8 CJNE R7,#000H,?FOR2
002F DB 0D2097
; SOURCE LINE # 21
0031 E4 CLR A
0032 F500 R MOV loop,A
0034 F500 R MOV loop+01H,A
0036 ?FOR3:
0036 DB 000000000
0039 0500 R INC loop+01H
003B E500 R MOV A,loop+01H
003D 7002 JNZ ?LAB8
003F 0500 R INC loop
0041 ?LAB8:
0041 E500 R MOV A,loop
0043 33 RLC A
0044 E4 CLR A
0045 5001 JNC ?NXT13
0047 14 DEC A
0048 ?NXT13:
0048 C0E0 PUSH ACC
004A C0E0 PUSH ACC
004C C000 R PUSH loop
004E C000 R PUSH loop+01H
0050 E4 CLR A
0051 FC MOV R4,A
0052 7D0F MOV R5,#00FH
0054 7E42 MOV R6,#042H
0056 7F40 MOV R7,#040H
0058 120000 R LCALL ?C_CMPL
005B BF00D8 CJNE R7,#000H,?FOR3
005E 80A0 SJMP ?WHILE1

        ; FUNCTION main (END)

:arrow_right: administrator: příspěvek byl upraven

Upravil jsem ti zápis emailu aby jsi nedostával SPAM.
Takovýto program dělat v Céčku? To jsi spíše sadista :smiley:.
Ten překladač musím najít. Až ho najdu, tak jej pošlu…