Fórum témák
» Több friss téma |
Szimulátorban nézted már? Mutass többet a kódodból.
Idézet: „unsigned int n=0; void main() { setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); setup_timer_1(T1_DISABLED); setup_timer_2(T2_DISABLED,0,1); setup_comparator(NC_NC_NC_NC); setup_vref(FALSE); while(1){ if (n==0) output_high(PIN_A1); if (n==1) output_high(PIN_A0); if (n==2) output_high(PIN_A7); if (n==3) output_high(PIN_A6); ... delay_ms(500); n++; } }” Ez előtt pedig csak a be include-olt pic van. Annyira egyszerű, hogy nem igaz és megfog. Olvastam, hogy a proteus jó szimulátor. Kezdő vagyok ezért kérdem, hogy te mit ajánlsz? Én most beleégettem egy pic-be és úgy próbáltam. Ezért biztos, hogy nem működőképes
Az MPLAB-ban van szimulátor is, bár a CCS kódot forrásszinten nem biztos, hogy tudja kezelni (én úgy alapból nem szeretem a CCS-t, sosem kerestem, hogy tudja-e). asm szinten biztosan tudja. Viszont azt nem látom, hogy letiltanád az analóg-digitális átalakítót. Konfigurációs biteket is jó lenne látni, nem-e az a probléma, hogy a watchdog mindig újraindítja a pic-et, mielőtt odaérhetne, hogy magasra húzza az A0 lábat.
Én az assembly-val nem vagyok megbékélve. Ezért is kezdtem inkább C-vel. Itt van minden. Holnap az egészet új mappába mindenestől újra megírom nehogy az legyen a baj.
Idézet: „#include <16F628A.h> #FUSES NOWDT //No Watch Dog Timer #FUSES INTRC_IO //Internal RC Osc, no CLKOUT #FUSES NOPUT //No Power Up Timer #FUSES NOPROTECT //Code not protected from reading #FUSES NOBROWNOUT //No brownout reset #FUSES NOMCLR //Master Clear pin used for I/O #FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O #FUSES NOCPD //No EE protection #use delay(clock=20000000)”
Köszönöm. Holnap kipróbálom mert egész nap kódokat bújtam. Én is kaptam egy generált hibás kódot de annál még a futtatás közbeszólt. Úgy látszik vannak hibák ebben a programban is. Mindenhol 20Mhz-et láttam én is, biztos ezért nem tűnt fel. Most nézem az adatlapot, hogy a belső csak 4-re képes. Igen, valóban 3 topikot is találtam és nem tudtam melyikbe írjak (ez, ccs, pic kezdő).
Kíváncsiság megölt ezért még azért is kijavítottam a dolgokat. Még egyszer köszönöm szépen. Lehet még lesznek majd ügyetlen kérdéseim. Előre is elnézéseteket kérem. Majd a ccs topikjába fogom írni azokat.
Ismer valaki olyan C forrásfájl gyűjteményt, vagy bináris fájlokat, amik betűkészletek "leírását" tartalmazzák ilyesmi formában: Link? Vagy esetleg programot, ami tud ilyet generálni? A mikroelektronika Visual TFT nevű programja tud ilyen C forrást generálni bármilyen betűkészletből és bármekkora betűmérettel, csak épp az ascii tábla 0x32-0x7F tartományából vannak csak benne a karakterek, az afelettiek nincsenek, én meg szeretnék ékezetes betűket is kiíratni. Tudom, csinálhatnék magamnak ilyen fájlt akár kézzel is, de hátha létezik már készen és nem kell újra feltalálnom
Van ott egy segedprogram ami barmilyen alakzatbol csinal binaris (C) kimenetet, de neked kell megrajzolni a kivant betut.
Egy port bitét akarom 1-be állítani, ha egy váltózó 6. bite egy.
Össze lehet így fűzni két logikai operátort? Ez is jó lenne, de lefordítva asm-re, 2 sorral több:
C-ben legrövidebb így lenne:
Viszont ennek a fordításával én nem voltam megelégedve, ezért én ezt szoktam használni:
-------------------- Idézet: „Össze lehet így fűzni két logikai operátort?”
Ilyeneket inkább ne csinálj, ugyanis senki sem garantálja, hogy az A && B művelet eredménye csak 0 vagy 1 lehet, hanem könnyen lehet pl. a 64&&64 eredménye 64.
A két példa nem ugyanazt csinálja, az első a jó.
Mi van ha a változó értéke 128? Az első feltétel FALSE értéket ad vissza mert a 6.bit 0, a második TRUE-t, mert nagyobb mint 64. Feltételes kifejezéssel sokkal elegánsabb lehet a kód: LATCbits.LATC0 = (64 & v_sram_cim) ? 1 : 0;
Ehhez még annyit, hogy próbáld meg ezt, hátha ebből jobban fordít:
Szia!
Köszi!
Ezt a kérdőjeles forma még nekem új, az if-else ág áttekinthetőbb és most hogy nézem a disassembly ablakban, hatékonyabb is. Lokátoros, Hp41C köszi nektek is! Egyébként reggel eszembe jutott, hogy ez a maszkolásos módszer rövidnek tűnik, gyors ki is pattantam az ágyból (igen, még feküdtem, első 4 órám lyukas ) és leírtam. Az a kisebb-egyenlős megoldás tényleg nagy badarság, de ezt ráfogom arra, hogy reggel volt
Még egy kérdés: bár úgy látom helyesen lefordítja az MPLAB, de lehet egy sorba írni ezt:
Így:
Lehet. Általában az újsor jelek lényegtelenek a fordító számára. Nem mindenhol, mert pl. a //-el kezdődő kommenteket, meg a define-okat, pragma, stb.-t is az újsor zárja, így ezeknél lényeges, de a tiszta kódban most nem jut eszembe olyan, ahol feltétlenül fontos az újsor.
Köszi, így nem "rúgja" annyira szét a programot.
Nézegetem kicsit a disassembly ablakot és valamit nem értek. Van az alábbi C kód:
Aminek azt kéne csinálni, hogy amíg a PORTD 5. bite "0", addig "álljon" a program. Íme a lefordított kód a disassembly ablakban:
Viszont itt ha a PORTD (f83 a cime) 5. bite "0", akkor nem a while ciklustörzsét hatja végre, hanem visszaugrik a feltételvizsgálathoz (BRA 0x205e). Ez lehetne jó is, hisz eltelik egy utasításidő, amíg visszaugrik a BTFSC-re, de ha a ciklustörzsbe nem nopot, hanem pl. egy inkrementáló utasítást rakok, azt se hajta végre a disassembly kódot nézve. Szerk.: ez az MPLAB fordító hibája (elég nagy hiba lenne...), vagy csak én értelmezek valamit rosszul?
Én arra tippelek, hogy egyszerűen kioptimalizálta a NOP utasítást. Próbáld meg kikapcsolni az optimalizálásokat és nézd meg úgy is a listát.
A program memory meg teljesen mást mutat. Na én inkább beszúrok egy asm kódot és probléma (remélhetőleg) megoldva.
Ha megnezed az assembly utasitasok cimeit, akkor kiderul, hogy a NOP utasitas a 2062-es cimen van, es az az utasitas amelyik vissza ugrik a 2064-esen. Azaz jol forditott a fordito, csak ez a listazas furcsa kicsit...
... szoval a kod valojaban igy nez ki a program memoriaban:
Úgylátszik a program memory ablak használhatóbb infót ad.
Fura ez a lista, tenyleg. De amugy miert szeretted volna latni a disassembly kodot? Arra gyanakodtal hibas a fordito?
Csak kíváncsi voltam hogy mire fordítja le, de hát akkor lehet nem is azt mutatja...
Azt mutatja az, csak néha nem szedi sorba memóriacím szerint. Ezért én is a Program Memory ablakot nézem kínomban, ha helyes sorrendben akarom látni az utasításokat.
Sziasztok!
Egy kis segítségre lenne szükségem. Van egy ds1621-es IC-m és össze akarnám hozni egy PIC16F874-el+2x16-os LCD-vel. Na már most kipróbáltam a CCS gyári forráskódját és ugyan működik csak állandóan 82,83, 84 dec. számmal tér vissza az LCD-re. De már volt olyan, hogy lement 79-re. ![]() Szóval ha valaki tudna segíteni abban, hogy mit rontok el, akkor azt szívesen venném. A forrásfájl a következő: |
Bejelentkezés
Hirdetés |









