Nie znam mozliwości w tym zakresie Bascoma. Jedno jednak jest pewne. Każdy program tego typu może działać sekwencyjnie. Oznacza to, że wywoływanie kolejnych procedur w procedurze działać musi. Jest jednak tzw granica zagnieżdzeń. Może ona wynika z możliwości samego kompilatora (programu tłumaczącego - w tym wypadku Twoim nie sądzę aby tak było), albo...
0x60 to adres podawany bez najmłodszego bitu RW. Po dodaniu bitu RW otrzymujesz adresy: 0xC0 - zapis 0xC1 - odczyt Pamiętaj, że zanim zaczniesz czytać przydałoby sie podać adres od jakiego chcesz zacząć odczyt. Inaczej przy każdym wywołaniu Twoja procedura będzie czytać dane z innego obszaru.
Sprawdź, cza nazwa Twojej procedury obsługi przerwania jest taka sama, jak w tablicy adresów przerwań w pliku startup. Wyrzuć zbędne wywołanie SetPriority.
Witam. Wygląda na to, że Kolega niewłaściwie używa instrukcji skoków, próbując zastosować po nich instrukcję RET. Taka konstrukcja ma zastosowanie przy wywoływaniu podprogramów instrukcjami LCALL lub ACALL. Te dwa rozkazy zapamiętują adres powrotny, umieszczając go na stosie. Natomiast RET odczytuje ten adres i powoduje dalsze wykonywanie programu właśnie...
Nie wiem czy dobrze rozumiem ale: Wywołanie call (rcall) odkłada na stosie Program Counter, więc wewnątrz procedury program mógłby go pobrać ze stosu (POP) i wpisać tam coś innego (PUSH) - adres, gdzie ma iść dalej po skończeniu procedury rozkazem RET. Ale to nieeleganckie, niebezpieczne itd... I trzeba sobie przygotować takie "dalsze" kawałki programu...
Ten fragment o którym mówisz lepiej również przenieść za główną pętlę programu, a wywołać również poleceniem gosub . Inna opcja to użycie goto w tym akurat przypadku. Adres powrotu nie jest kasowany, ale zostanie nadpisany, bo po wykonaniu return nie jest już potrzebny. Działa to w ten sposób, że przy wywołaniu procedury adres powrotu jest zapamiętywany...
Link Register - najpierw zawiera adres skoku, który należy (albo i nie) wykonać, potem (jeżeli wykonano skok pakowany jest tam adres powrotny z procedury, tzn. : BPU wydłubuje sobie z cache, czy kolejki (nie wiem) instrukcję skoku do podprogramu, jeszcze zanim dojdzie do jej wykonania, jeżeli licznik programu dojdzie do tej instrukcji i należy wykonać...
Szczerze powiedziawszy to nie wiem, ale jak pytałem się wykładowcy jak zrobić zadanie o treści: Omówić na poziomie mikrooperacji wykonanie rozkazu: wywołaj procedurę spod adresu Ri to napisał mi to w 4-5 linijkach. Takie podstawowe operacje które muszą być wykonane.
. Język BASCOM BASIC oferuje wiele instrukcji obsługujacych wyświetlacz LCD. Aby jednak mieć całkowitą kontrolę nad wyświetlaczem można stosować procedury w języku asembler. Poniżej znajduje się przykład: $asm Ldi _temp1, 5 'załadowanie kodu rozkazu do R24 Rcall _Lcd_control 'prześlemy do LCD jako komendę Ldi _temp1, 65 'załadowanie do R24 kodu znaku...
Pisze pewien prosty program na 8051 w Keil uVision. Wiemy, że zmienne i stałe globalne można lokalizować w dwóch aspektach: rodzaj pamięci (wewętrzna, zewnętrzna RAM z dostępem bezpośrednim, zewnętrzna RAM z dostępem przez rejestr Rx) oraz adres, w którym dana zmienna jest położona. Czy w ogóle da się zrobić coś, co opisuję poniżej? Mamy program: void...
Włączyłeś przerwania, jednak nigdzie nie masz procedury obsługi dla RXCIE i TXCIE. Wywołanie przerwania powoduje skok programu pod adres zdefiniowany w tablicy wektorów przerwań, czyli w Twoim przypadku reset procka. Druga sprawa to błąd w tej funkcji. Ona nigdy się nie zakończy, gdyż brakuje inkrementacji wskaźnika s w pętli. Ale zakładam, że to błąd...
Sam kod jest bardzo prosty: Na końcu obsługi każdego (oprócz stanów końcowych) stanu jest przekazywane sterowanie do następnej procedury poprzez wpisanie wskaźnika do niej - do kolejki. [syntax=c] DISABLE_INTERRUPTS; // disable interrupts (atomic access) EV_Pointers_Table[EV_RecTable_WrPtr] = FuncPtr; EV_RecTable_WrPtr = (EV_RecTable_WrPtr+1) & 0x3F;...
Do "samosia" W roku 1990 miałem zdeassemblowany ręcznie cały ROM Cobry wraz z adresami początków procedur oraz szczegółowym opisem. Wówczas miałem zapał, gdyż był to mój jedyny domowy komputer. Później nastała era PC i po zakupie IBM PC AT 12MHz (80286) Cobra powędrowała do piwnicy a cała obszerna dokumentacja oprogramowania (system i wersje źródłowe...
Tym nie mniej adres powrotu Możemy się umówić, że przed wywołaniem przerwania, albo wykonaniem procedury, w liczniku adresu wyznaczany jest adres następnej instrukcji do wykonania (pomijając procedurę), zresztą tak to się odbywa w logice procesora. Czy to nazwiemy adresem powrotu, czy nową wartością licznika rozkazów, to jest tylko kwestia nomenklatury....
W uip też ten ból występuje, a problemem jest przekazanie gotowej ramki IP do ARP, ARP nie mając adresu IP w swojej tablicy rozpoczyna procedurę pozyskania adresu MAC, a ramkę z IP odrzuca. Może w tym jest problem. Jeśli chcesz to wykluczyć, przed wysłaniem ramki do komputera wyślij cokolwiek do STM32, żeby ten zarejestrował adres IP i MAC w swojej...
Panowie umiem w miarę C++ i przecież musi być miejsce wywołania funkcji a ja tego nie widzę. Pozdrawiam Wiesz co to są wektory przerwania, ATtiny2313 ma ich razem z resetem 19. Jeśli jakieś moduł np Timer, UART itp. zgłosi potrzebę obsługi, CPU przerywa wykonywanie programu, zapisuje swój stan na stosie i zaczyna wykonywać program od innego miejsca....
M8 == ATMega8 Opcje można znaleźć w helpie BASCOMa Options Compiler Chip itd...np... XRAM Pamięć zewnętrzna (dla M8 nie wchodzi w grę) HW Stack Stos "hardwarowy" adresy wywołań GOSUB (każde zagnieżdżenie = 2 bajty), dla procedur obsługi przerwań ze składowanymi rejestrami kazde zagnieżdżanie=32 bajty). Używany także przez inne instrukcje BASCOMa. Soft...
Zgadza się, wyrób końcowy taki sam, tylko fabryka całkiem inna, a Ty się upierasz, że właściwie taka sama, a obrabiarka CNC to właściwie takie kowadło z ręcznym miechem, tylko trochę lepsze i ten miech się nazywa frez, a może młotek - w końcu to wszystko jedno jaką nazwą określimy obrabiarkę lub jej dowolną część, skoro wyrób ten sam. No i przecież...
Ok, nieco się dokształciłem, jednak tablice nie dają mi żyć. Nie ma sensu wklejać moich wypociń, więc wolał bym się zdać na jakieś proste przykłady z waszej strony założenie jest takie: Tablica (będzie ich więcej, ale w celach dydaktycznych wystarczy jedna), która zwiera tekst dla LCD. Znacznikiem końca niech będzie wartość 128. Tekst może być rozdzielony...
Chodzi o to ze nie mam jeszcze kodu chce go napisać tylko nie wiem jak się zabrać Po prostu w parametrze podaje numer funkcji i po obliczeniu przesunięcia skacze pod ten adres a tam skacze pod procedurę która ma wykonać i wraca. Czyli wywołanie każdej funkcji jaka by nie była zostanie wykonane w tym samym czasie. chodzi mi o to ze jak będę miał koło...
Faktycznie, po usunięciu włączenia przerwań program działa, ale właściwie czemu to przeszkadzało prawidłowej pracy ? A co się dzieje jak się wywołuje przerwanie a nie ma procedury jego obsługi? Wylądujesz w DH, wywołasz HF albo skoczysz do jakiegoś adresu (co i tak zakończy się pewnie HF-em) w zależności co masz w tablicy wektorów..
Zakładam, że program działa tak jak chcesz, a chodzi o optymalizację, niekoniecznie permanentną. Pierwsza uwaga dotyczy startu programu. Mimo, że w aktualnej wersji programu nie wykorzystujesz przerwań proponuję przesunąć kod programu (etykietę START) powyżej adresu zarezerwowanego na przerwania (4) zostawiając miejsce przynajmniej na skok do podprogramu...
Luźne przemyślenia pod rozwagę: -procesor wchodząc do obsługi przerwania stanu ABORT (tryb ARM) podstawia shadow-registers w tym r13 który jest wskaźnikiem stosu używanym w czasie obsługi tego typu wyjątku. W twoim przypadku skoro chcesz wywoływać w procedurze obsługi funkcje do obsługi LCD prawie na pewno trzeba zarezerwować specjalny obszar stosu...
Dzięki! Dokładnie działa jak ta lala :D Przed skokiem trzeba zdjąć aż 4 POPy bo zapomniałem, że oprócz adresu powrotu jest odkładany na stos adres powrotu podprocedury z której program ma również wyskoczyć do pętli głównej. Myslałem wzcześniej jak bezpośrednio podmienić adres powrotu dla procedury przerwania odłożony na stosie na adres etykiety do której...
Nie używam i nie znam BASCOMA. Próbuje swoich sił w Arduino IDE (ATMega328(at)16MHz). Po pomocy ze strony przyjaznych niewiedzącym: BlueDraco , nsvinc , tmf mogę stwierdzić że: Ten uC ma na pewno możliwości, aby obsłużyć te przerwania (zakładam ok. 33kHz). Problem nie polega na wywołaniu zaprogramowanego przez Ciebie przerwania (ale to już zauważyłeś),...
Problem dotyczy wszystkich języków programowania i wszystkich mikrokontrolerów. Chodzi o uszkadzanie się zawartości pamięci eeprom kiedy program idzie w krzaki. Zauwzyłem, żę kiedy traktuję atmegę zakłoceniami emc potrafi o ona zacząć wykonywać inny fragment kodu (bascom), jakby skoczyła pod jakiś przypadkowy adres. objawia sie to czasem podwójnym pisaniem...
Witam :) Zacytuje Kasie18 ale odpowiadam atomowi1477 ;) Procedura wyglada tak: HINSTANCE ShellExecute( HWND hwnd,// handle to parent window LPCTSTR lpOperation,// pointer to string that specifies operation to perform LPCTSTR lpFile,// pointer to filename or folder name string LPCTSTR lpParameters,// pointer to string that specifies executable-file parameters...
(at)robiw na 99.99% to błąd kompilatora, bo kiedy definiujemy procedurę przerwań np. ISR(INT0_vect) to w domyśle jest ISR(INT0_vect, ISR_BLOCK), czyli w trakcie wykonywania przerwania ponowne przerwanie nie zostanie wywołane dopóki aktualne się nie zakończy. Ten rcall powoduje że blokowanie zostało zdjęte przez reti i to jest problem. No i kod wcale...
dzień dobry wszystkim!! mam pytanie do wszystkich którzy zajmują bądź zajmowali się mikrokontrolerami serii 51 Chodzi o oraganizacje stosu w 51. Przy wywołaniu procedury (podprogramu) na stos przekazywane są paramtetry procedury następnie adres powrotu z podprogramu. Czy dostęp do tych paramterów jest wykonywany przez wyzanczenie adresu tych danych...
Router LTE od orange Huawei b315. Dokupiony stały publiczny adres IP Skąd pewność, że masz adres publiczny? - w Orange z tego co mi wiadomo, taka usługa jest dostępna tylko dla firm. No i musimy odpowiednio zmodyfikować procedurę wywołania połączenia przez VPN od Orange - zamiast standardowego wywołania, musi być ustawiony APN vpn.static.pl: 1) APN...
Aby obliczyć prawidłowe wartości stosów wystarczy znać swój program, zwłaszcza to co ze stosów korzysta najwięcej. - Ile jest przerwań i jak mogą się wywoływać wzajemnie. Każde przerwanie może odłożyć na stos prawie 40 bajtów w prologu. - Ile mamy wywołań podprogramów przez GOSUB. Ile mamy wywołań wbudowanych funkcji i czy korzystają z operacji na zmiennych...
Jeśli program po restarcie odczyta nowe ustawienia to wystarczy Ci (jak napisał Kozak_sc ) skok do procedury resetu, znajdującej się domyślnie pod adresem $0000: Uściślając, pod tym adresem najczęściej, lecz nie zawsze jest umieszczony rozkaz przeskoku do procedury inicjującej. W przypadku przesunięcia wektora RESET do procedury bootloadera (fusebit...
Niedawno zrobiłem mały egzamin tej 'inteligencji', marnie wypadła ze znajomości avrów ;) (nie można zagnieździć bold w code, więc będzie rozlazłe) procesor avr ze stosem sprzetowym ChatGPT Procesory AVR, takie jak te z rodziny ATmega, są wyposażone w stos sprzętowy, który jest używany do zarządzania wywołaniami funkcji, przerwami oraz przechowywaniem...
Chodzi ci o takie wywołanie ? (wciąż ta sama biblioteka DLL) unit _main; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls, dynlibs; type {Dynamiczna procedure z DLL-a} TDynamiczny_Showform = procedure; cdecl; { TForm1 } TForm1 = class(TForm)...
Dodano po 2 Nie wiem czy ja popełniam błąd czy to Bascom... Choć symuluję to na najnowszej wersji, ale kompiluje na starszej wersji, bo nowa ma ograniczenie do 4kb.
tak też jest zrobione, zauważ że po wywołaniu adresu (do odczytu) 161 mam skasowaną flage C, która używam jako NACK/ACK. Jest ona ustawiona dopiero na ostatnim bajcie. ----------------------------------------... coś to kiepsko widze, jeśli ktoś ma pewne procedury to prosił bym podesłać na bolo(at)poczta.ox.pl
Mam taką sytuację, że wywołuje mi się data abort exception w data abort. Na początku przy pierwszym wywołaniu wyjątku procek skacze mi pod adres 0x010 (Data Abort) a potem pod adres który określiłem pod adresem 0x10, czyli do właściwej procedury obsługi wyjątku, konkretnie funkcji __cs3_isr_dabort(). NIestety procek nie przechodzi przez całą funkcję...
ok, idąc dalej samemu doszedłem już, że jest taka procedura jak _i2c_rbytes, której trzeba podać: r17 - adres slave układu r24 - ilość bajtów do wysłania r25 - ilość bajtów do odebrania X - bufor tychże bajtów więc próbuję ją wywołać --- rcall _i2c-rbytes i NIC ! nic nie wysyła ;( a jak zrobię wysłanie pojedyńczego bajtu za pomocą procedurek: _i2c_start...
O taki rozwiązaniu właśnie mówię. W bramce po stronie abonenckiej wpisujesz w okienku planu numeracyjnego adres na który ma być skierowane połączenie. Jeżeli przed adresem dasz parametr S0 i pustą pozycje wybieranego numeru to wywołanie nastąpi zaraz po podniesieniu słuchawki. Analogicznie ustawiasz po stronie bramki centralowej. Przykładowo; zapis:...
Mam taki (niezrozumiały dla mnie) przypadek: - wewnątrz procedury main() definiuję zmienną strukturalną beż żadnych modyfikatorów typu volatile, czy static; - programowo wypełniam jej pola wartościami; - z main() wywołuję inną procedurę zewnętrzną, do której przekazuję adres tej struktury, np. func(&struktura) - func() jest przystosowana do otrzymywania...
#pragma vector = <VECTOR_NAME> __interrupt void <ISR_NAME> (void) { // сюда вписыk... код обрабl... прерыk...
Dokładnie, to już mam tak to zrobione - procedura generuje mi pełną mapę pamięci (adresy załadowane, adresy 'sprawdzone', adresy skoków z/do,adresy wywołań z/do, adresy 'zakazanych' instrukcji, itd.) Ale takie podejście ma poważne problemy z np. z takim kodem (pseudokod): mov tab, 34 //początek tablicy mov x, P1 //przenieś do x stan portu p1 jmp (tab...
EXC_RETURN jest w tym przypadku "znacznikiem" końca procedury przerwania. Właściwy adres powrotu jest pobierany ze stosu (PC). Ze stosu jest zdejmowana również (między innymi) poprzednia wartość rejestru LR.
Rysunek pierwszy: F - Nie używasz FrameSpace - bo w programie nie ma żaden instrukcji, która by z niej korzystała. S - SoftStack też nie jest używany bo żadnych SUB ani FUNCTION nie masz. H - HWStack jest używany i maksymalnie rozrósł się do 12 bajtów, bo masz parę GOSUB i wewnętrzny kod też coś tam sobie skubnął. Nie ma też przerwań w programie zatem...
kurczę trochę nie łapię... to w niektórych rozkazach (w tekscie programu w C) stosuje się adres w pamięci ram, a w niektórych (w kodzie assemblera) adres w przestrzeni IO? nie przeczytałem jeszcze pdfa do AVR więc może czegoś nie wiem... mam jeszcze jedno pytanie (mam tą książkę, ale uważam, że jest marna) chcę napisać program w C który będzie miał...
Stos znajduje sie w pamięci RAM i problem polega na tym że wywołanie podprogramu powoduje odłożenie na stos adresu powrotu a jeśli z podprogramu wywołasz następny podprogram ten też odłoży na stosie swój adres powrotu i tak dzieje się do momentu aż stos sie przepełni co oznacza że nadpisze zmienne programowe. Aby uchronić sie od takiej sytuacji musisz...
No ale przerwanie spowoduje zachowanie rejestru statusu a później jego odtworzenie więc problemu nie będzie. Wywołanie przerwania jak procedury też nic złego nie narobi, nie wspominając już o tym że w przypadku wywołania tracenie rejestru statusu nie było by problemem bo praktycznie każdy normalny podprogram go traci. Chyba musisz sprecyzować pytanie.
Początkowa część programu napisana w kodzie maszynowym mikroprocesora Z80 zawiera 16 wywołań tego samego podprogramu zawierającego w sobie sprawdzanie czy wciśnięto klawisz S. Gdy nie wciśnięto, to po wykonaniu wszystkich procedur podprogramu wraca do głównego programu w miejsce skąd został wywołany. W ten sposób jest realizowana animacja i dźwięk strony...
Ta wersja jest napisana tak, że musi być w ROM od adresu 0 - używa instrukcji RST które wywołują procedury spod adresów 8, 10, 18 itd.. RAM gdziekolwiek powyżej ROM - dwie dyrektywy ORG pod koniec pliku. Czyli rozumiem, że nie mogę po prostu zamienić wartości przy ".ORG", tak aby program zaczynał się np. od 0xC000 (początek EPROM-u) a zmienne były...
Wyświetlacz udało mi się częściowo uruchomić. Z wysyłaniem danych do wyświetlenia nie ma problemu, gorzej jest z instrukcjami, np fragment kodu: ldi r16, 0b10111000 ;ustaw wiersz cbi O_LCD_STER, _CS1;aktywny pierwszy kontroler rcall LCD_instrukcja rcall LCD_instrukcja sbi O_LCD_STER, _CS1 cbi O_LCD_STER, _CS2;aktywny drugi kontroler rcall LCD_instrukcja...
Disassembler to program, który tłumaczy skompilowaną postać binarną programu dla danego procesora z powrotem na mnemoniki assemblera danego procesora. Oficjalnie służy to do odzyskiwania kodu programu w przypadku zaginięcia jego kodu źródłowego lub poprawianie wersji binarnej programu. "Nieoficjalnie" służy do operacji zwanej "reverse engineering" czyli...
Otrzymałeś więc odpowiedź, że w dużej mierze zależy to od tego w jakim środowisku został skompilowany program/biblioteka. Jeśli kod był skompilowany do języka maszynowego to taka operacja jest nieodwracalna, bowiem program w postaci maszynowej jest liniowy, nie ma klas, obiektów a nawet procedur ani zmiennych, są tylko adresy, dane i kody operacji....
Inicjalizacja wyglada tak: 00110000 -> 3 razy 00111000 00001000 00000110 00001100 00000001 Sterowanie 8 bit Dodano po 1 Oto program: #include "avr.inc" #include <m8515def.inc> .cseg .org 0x00 Rjmp Start ;wyświetlacz #define LCD_E PD1 #define LCD_RS PD0 #define LCD_DDR_CTRL DDRD #define LCD_Port PortA #define LCD_DDR DDRA ;Definicja...
Witam Mam dziwny problem z działaniem zegara PCF 8583 na magistrali I2C. Używam procedur do obsługi I2C ze strony: http://cyna.barlinek.biz/index.php?stron... Skleciłem na własne potrzeby procedurkę do odczytywania danych z zegara (poniżej). Problem polega na tym iż pierwsze wywołanie procedury działa ok ale kolejne już nie działa, procedurka I2C_Start...
Sam sobie chyba odpowiem, niestety skrypt linkera jak również asemblerowa rozbiegówka do bani niestety !. Siłą rzeczy muszę nasmarować je od nowa. Z SWI problem rozwiązany a oto jego rozwiązanie aby dobrze obsłużyć wyjątek SWI należy przydzielić na stosie SVC (supervisor) trochę miejsca oraz swiVector: // Aktualizacja dodanie adresu procedury obsługi...
komentarze ;) .EQU DATA = 5 ; zdefiniowanie pinu w uC na którym będzie sygnał DATA .EQU CLOCK = 6 ; -------------- || ---------------------------------- CLOCK .EQU CHIP_ENABLE = 7 ; ------------------|| ------------ CHIP_ENABLE ;parametry wejściowe ; ; 3 bajty danych do wysłania umieszczone w SRAM ; pod adresem dane: send: ldi XL, Low(dane) ; ładujemy...
Ostatnio dostałem informację o pewnej nieprawidłowości. Pod adresy poczynając od C000 wpiszemy bajty C3, 00, C0, otrzymujemy program składający się z jednego rozkazu, będący nieskończoną pętlą. Jak się uruchomi program poprzez wywołanie klawiszy kolejno GC00=, to przy wyłączonym wyzwalaniu przerwania niemaskowalnego, działa prawidłowo, czyli wyświetlacz...
Witam. Robi się to dokładnie tak, jak napisał Patryk. DB w asemblerze to po prostu Definiuj Bajt, jest to miejsce w pamięci programowej zarezerwowane na definicje np. tekstu. A więc (nie zaczyna się od 'a więc')jeśli ustawisz etykietę np. Linia_1 dla pierwszej linii na LCD i wpiszesz tam 16 bajtów tekstu, to będzie to wyglądać następująco: gdzieś w...
Jak za pomocą JTAG'a mogę zobaczyć z skąd nastąpiło jej wywołanie? Jeżeli jej wywołanie nastąpiło przez rcall to adres powrotny będziesz miał odłożony na stosie. Jeżeli została wywołana w inny sposób (rjmp), to się nie da. W przypadku rjmp można kombinować tak, że każdej funkcji przypisać jakąś wartość, dołożyć jedną zmienna i na początku każdej funkcji...
CHYLĘ CZOŁA - chłopie jesteś WIELKI. Kiedyś zrobiłem sopelka (plus kilka innych efektów na atmega8), ale zrobić coś takiego na attiny13 - majstersztyk. Przewkompilowałem Twoje źródła (sopelek) pod eclipse i wprowadziłem drobną modyfikację - funkcję led_on zrobiłem jako funkcja wewnętrzna w procedurze obsługi przerwania. Co się zmieniło - program z 386...
Wiatm potrzebuję zrobić pewną procedurkę ale nie wiem jak to wykonać. A mainowicie podczas wykonywania programu gdy wygenerowane zostanie rzerwanie INT0, program wchodzi do procedury przerwania, a po wykonaniu wraca do miejsca w programie z którego zostało wywołane. Chodzi mi o taką sytuacje żeby program zależnie od wartości zmiennej sprawdzanej w przerwaniu...
Więc tak: _BOOT_START = 0x20001C00 _BOOT_END = 0x200022E8 Boot_load_start = 0x080197D8 próbowałem także memcpy() efekt jak poprzednio. zapełniałem także pamięć wartościami [syntax=c] uint32_t zmlicz = (uint16_t*)ex_end - (uint16_t*)ex_begin; do { *ex_begin = 0x55aa; ex_begin++; zmlicz--; } while(zmlicz); [/syntax] Efekt: [syntax=c] 0x20001FD0 55AA55AA...
Posiadam eeprom szeregowy 32 kb 24c256 firmy Atmel któy ma organizacje 64 bajty na bank. Problem mam taki że zapisuje w nim czas (3bajty) załóżmy od komórki 0 i banku 0. Zapisuje się poprawnie od podanego adresu ale ten sam zapis dubluje od innego adresu w pamięci który zawsze jest przesunięty o 24576 bajtów. Np jeżeli zapisze 3 bajty załóżmy że(122030)...
Jak już wspomniałem instalacja pod Windows przebiegła pozytywnie i za pierwszym razem sukces! Natomiast instalacja pod Dos w tym laptopie nie daje mi spokoju - korzystam na nim generalnie tylko z Dos - a. Zgodnie z zaleceniami producenta przeprowadziłem procedurę instalacji automatycznej i ręcznej przedstawionej przez producenta na stronie http://www.argosy.nl/drivers/manual/seri...
Widze ze się ostro zrobilo :D przynajmniej temat jest na gorze jeszcze :wink: GienekS: jestem jeszcze noobem jesli chodzi o assembera a tymbardziej architekture prockow, tam na poczatku sa deklarowane adresy tych wszystkich zmiennych, ale jak mam podac tam wartosc dzielnej/dzielnika/odczytac wynik??:P Fakt że te procedury napisałem ładnych parę lat...
Witam! Niejednokrotnie już korzystałem z usług tego forum lecz pierwszy raz zdecydowałem się założyć własny temat (po prostu nie znalazłem odpowiedzi na nurtujące mnie pytania w tematach już istniejących). Otóż mam następujące pytania: 1) Jak można inaczej zapisać instrukcje PUSH i POP w asemblerze nie używając tychże instrukcji? Do dyspozycji mam rejestry:...
Próbuje wywołać ten podprogram ale najwyraźniej się nie da bo nie działa program. Poprawiłem tą literówkę jednak to nie pomogło. Już nie mam pomysłów jak to wywołać żeby zadziałało. Teraz możesz już wywołać ten podprogram, tylko nie wiem czemu tego nie robisz A czy to nie jest to wywołanie? Można też przenieść cały fragment obsługi klawiszy do pętli...
Witam ponownie. No tak ZUMEK dane oczywiście będą stracone jeśli się je w pore nie wychwyci, ale wracając do Twoich propozycji powiedzmy pierwszej to masz na myśli aby przerwanie wykonywało procedurę INKEY(#1) lub INPUT jak najczęściej?? Otórz układ ma być złożony z DS18B20+ATtinny13+MAX485 ma to byc poprostu termometr moduł sieci 485 (jeden z wielu...
Witam. Czasami komórka pamięci o adresie 0 może zostać nadpisana przy rozbudowie programu, lepiej używaj pierwszego adresu o nr.1 do eepromu. W sprawdzaniu stanu przycisku dałeś wait2 (2s), to nie za długi czas?, standardowo aby wyeliminować drgania zestyków wystarczy czas 20-30 mS. Jeszcze jedna uwaga, pisząc bardziej rozbudowane programy unikaj polecenia...
Jeśli jesteś lokatorem, o kody musisz pytać w administracji. Jeśli jesteś administratorem lub instalatorem, to tabele kodów możesz uzyskać u producenta (czyli u nas). Obowiązuje jednak pewien (poniższy) standard, jeżeli chodzi o kody: Osobom fizycznym (np. pojedynczym lokatorom, dozorcom, kurierom firm przesyłkowych) lub podmiotom niezwiązanym z montażem...
Kolega odłączał także fizycznie od portu danych ? Myślę że nie. Na szczęście mam Jtag-a i sprawdziłem to. Okazało się że kiedy port danych pracuje jako wyjście i pojawi się na nim choćby na jednym bicie wartość "1" cały układ z SED-em zaczyna pracować !!! Dziwne, prawda ? O ile dobrze pamiętam to na płycie od kasy był przy SED-dzie port chyba 74245...
acha, no i oczywiście najważniejsze, po wywołaniu przerwania wywoływana jest odpowednia procudura w odpowiedniej dla każdego przerwania części programu, i tak: --dla timer'a 0 jest to adres 0Bh --dla timer'a 1 jest to adres 1Bh --dla lini INT0 jest to adres 03h --dla lini INT1 jest to adres 013h --dla transmisji szeregowej jest to adres 03h (przerwanie...
Z takich sztuczek to jeszcze - po wywołaniu przerwania zdejmujemy ze stosu oryginalny adres powrotu i zapisujemy swój i procek po zakończeniu przerwania wraca tam gdzie chcemy, ale to raczej tylko w asemblerze.Podobny trik można zastosować do podprogramów ( call ret ). Bardzo przepraszam za określenie ale to nie żadne sztuczki czy triki tylko głupota...
Być może dlatego, że do wywołania "sabrutyny", z której chcesz powrócić do miejsca wywołania za pomocą instrukcji ret należy użyć instrukcji call. dobrze kolega podpowiada - tylko, nie być może - a na pewno dlatego ;) tylko proszę autora - używaj ludzkich nazw typu podporogram, procedura, funkcja itp a nie "subrutyna" ;) a skoro się przesiadasz na...
Dziękuję, pomogło :) Dopisz z przodu programu taką linię kodu: unsigned char czytaj (unsigned char adres); po prostu wywołanie jest wcześniej niż deklaracja i trzeba wykonać zapowidź. Póki co nie powinienem mieć więcej problemów bo reszta funkcji jest w miarę prosta a ewentuane komplikacje mogą pojawić się dopiero pod koniec jak będę dopisywał...
Po pierwsze to zależy na jakim procku to masz napisać, komendy trzeba sobie przejrzeć jakie są dostępne i na tej podstawie coś próbować zrobić. Nie wiadomo, jakie instrukcje są wykonywane więc ciężko ułożyć jakiś scenariusz. Wywołanie podprogramu zapisuje się na stosie, a to ile dokładnie zajmuje ten narzut (przynajmniej adres powrotu z podporgramu...
http://obrazki.elektroda.net/57_12088851... Pokrótce przedstawię pomysł na wykorzystanie przestarzałych komputerów PC, których jak podejrzewam, podobnie do mnie wielu maniaków elektroniki po prostu nie chce wyrzucić. Komputer pracujący pod DOS-em, umożliwia dostęp do pełnych zasobów sprzętowych bez żadnej kontroli systemu operacyjnego, toteż...
http://obrazki.elektroda.pl/7154876600_1... Boberov Unbelievable Boot Loader V0.1 2013 Na wstępie skrócone informacje na temat projektu którego szerszy opis znajduje się w dalszej części tekstu. Program bootloadera przeznaczony jest dla ATMEGA8 (po minimalnych zmianach każdy AVR z wystarczającą ilością pamięci), umożliwia programowanie...
W obsłudze przerwania T0 , cyklicznie zmieniasz stan bitu RS0 , co przy pierwszym wywołaniu przerwania ustawia bank rejestrów na 1 (08H-0Fh) ORG0BH MOVTH0,#0FDH MOVTL0,#00H PUSHACC ; save A,B i PSW PUSHB PUSH PSW CPLRS0 ;tu zmieniasz bank rejestrów z 0 na 1 Stos domyślnie ustawiony jest na 07H.Przerwanie odkłada na stosie (08H i 09H) adres powrotu ,...
Rdzeń to ARM7, w dokumentacji pisze, że ma VIC: Standard interrupt, IRQ, and non-maskable fast interrupt, FIQ, inputs are provided together with a VIC interrupt controller vector port. The GIC interrupt controller can also be used if more complex priority-based interrupt handling is required. The processor includes low-latency interrupt technology which...
hej robiw -> próbuję tę twoją procedurę powyżej ale za chiny nie chce mi się ani razu to przerwanie wywołać. Z drugiego procka próbuję do tego wysłać coś poprzez I2C w ten sposób: do I2cstart 'Start I2cwbyte 128 ' adres układu SLAVE I2cwbyte 65 ' dana do przesłania do Slave I2cstop 'Stop wait 1 loop na magistrali mam jeszcze PCF8583 i z niego odczyt...
Takie oto pytanie dla przykładu: Co zrobić jeżeli procedurę wywołujemy z procedury np. w wielostopniowym menu, które jest też procedurą. Mamy ograniczyć użytkownikowi ilość wywołań, trochę nie ładnie. Lepszym chyba rozwiązaniem jest rezygnacja z takiej sytuacji na rzecz skou do podprogramu i powrót bo w tym przypadku stos nie jest nadpisywany. Tym...
Wszystko da się zrobić, ale nie wszystko ma sens. Moduły będą miały strukturę płaską tzn wywołując moduł z modułu nie będzie się zmieniał stos moduły wiedzą który jest kolejny a który poprzedni moduł. I tu chyba nie rozumiesz, o czym piszesz. Jeśli jeden moduł woła drugi, to ten drugi musi wrócić do tego pierwszego, a takie wywołanie zajmuje miejsce...
Cytuję: "Ustawia się to w zależności od skomplikowania programu. (...)" O co tutaj chodzi i o jakie wartości tutaj chodzi? Dokładnie chodzi o ilość bajtów jaką początkowo zajmie każdy ze stosów. Stos jest elementem rozrastającym i kurczącym się dynamicznie. Może dojść do sytuacji gdzie jeden zajdzie na drugi - stack overleap - i kłopot gotowy. Dlatego...
Witam. Mam pewien problem, ze skomunikowaniem ATmegi z tym czujnikiem. Czytałem pokrewne posty, ale niczego one nie wnoszą do mojej sytuacji. Najpierw przedstawię mój program, a następnie disassemblację procedury obsługi pętli opóźniającej. Procedura zaczyna się na adresie 00000054 (podświetlone na zielono). Jest to kolejne 6 instrukcji, które trwają...
Kolego pawelec5 proszę zwrócić uwagę że w programie masz kilkanaście jednakowych bloków zaczynając od bloków takich jak ten : Select Case Ds_10 Case Ds_eeprom_solar ': Print #1 , " Ds_10 jako solar" Case Ds_eeprom_bojler ': Print #1 , " Ds_10 jako bojler" Case Ds_eeprom_salon_podl1 ': Print #1 , " Ds_10 jako salon_podlogowka"...
Ja mam coś takiego: #include "io.h" /* Ustawienie lini portów do komunikacji */ void Init_IO (void) { DDRC = 0x0f; } /* Procedura nadaje bajt do linijki */ void SendBajt (u08 bajt) {u08 j = 1; do { if (bajt & j) Q0 = 1; else Q0 = 0; CLK = 1; j <<= 1; CLK = 0; } while (j>0);...
Ok, a teraz jeszcze jedna sprawa: Zmodyfikowałem trochę program by wyświetlał na multipleksowanych wyświetlaczach LED 4x7 odebraną komendę. Jak zwykle trochę chodzi, ale nie do końca - założenie jest takie: odbiera komendę z rc5 i wyświetla ją na led, efekt jaki uzyskuję: odbiera komendę, wyświetla na ułamek sekundy, potem wyświetla 95, czasem się zdarzy,...
http://obrazki.elektroda.pl/8851662100_1... Witam wszystkich Chciałbym tu zaprezentować swoją konstrukcję sześciocyfrowego wyświetlacza LED z interfejsem 1wire. O tym że 1wire jest chronione patentem dowiedziałem się już po zlutowaniu płytki w trakcie pisanie program. Mam nadzieję, że zmiana protokołu komunikacji pozwoli uniknąć złamania...
Witam. O ile się orientuję to w momencie wywołania procedury obsługi przerwania SFR page jest sprzętowo przełączana na tą, w której znajdują się rejestry odpowiedzialne za konfigurację hardwar'u, który jest źródłem przerwania. To się chyba sprawdza bo, jak napisałem, przerwania od timera 3 przychodzą i to z oczekiwaną częstotliwością (wstawiłem w procedurę...
Witam mam taki problem, przesyłam adres stringa do procedury, string ma 8 znaków i później jest wykorzystywany do zapisania go treścią z polecenia Input. Gdy polecenia nie były realizowane w procedurze to wszystko dzialalo ok. A teraz wpisujac moge podac tylko jedna literke podczas gdy string powinien miec 8 znakow. Probowalem zmieniac cos w deklaracji,...
Idea polega na tym, że wskaźniki krążą po buforze w tym samym kierunku, tak jakby koniec bufora połączony był z początkiem, stąd nazwa "bufor cykliczny". Po dojściu do końca bufora wskaźnik przeskakuje na jego początek. Pierwszy zawsze jest wskaźnik zapisu, za nim podąża wskaźnik odczytu. Jeżeli oba wskazują na to samo miejsce to znaczy że bufor jest...
wklejam wycinek kodu. problem polega na tym że wywołania procedury SEN_RAM powoduje wyłczenie przerwania z T0, przerwanie z UARTA działa Sama procedura wykonuje swoje zadanie. Wina jest na pewno tej procedury, w przerwaniu od T0 robie CPL ledowi. Przestaje on migać w momencie powrotu z SEN_RAM (mam za CALL SEN_RAM postawione jmp $) ORG 0000H JMP MAIN...
czy to o to chodzilo? zeby wlasnie zapisac sobie adres powrotu? Już lepiej, przynajmniej ma duże szanse zadziałania. Problem jest taki co będzie jeśli zmiennych jest dużo bo zabraknie rejestrów. Takich operacji nie robi się przy pomocy pop i push tylko adresując określoną komórke w pamięci, a po zakonczeniu procedury w kawałku tam gdzie się wykonało...
Co to za kamera? Na to pytanie do tej pory nie odpowiedziałeś. W instrukcji mam aby wejść w ustawienia tras, lecz co nie kliknę czy tour czy scan to wyskakuje mi błąd preset ? Podejrzewam, ze instrukcja klawiatury Novus opisuje procedurę sterowania kamer PTZ Novus (nie używałem nigdy tej klawiatury - jednak zasada działania każdego sterownika jest...
Dynamiczna alokacja jest po to aby na sztywno nie rezerwować całego obszaru LCD tylko w zależności od potrzeb, jak ci się nie podoba rezerwacja dynamiczna powołaj tablice jako globalna i przekazuj funkcji. Ja nie narzekam na kod wszystko się fajnie analizuje. Dodano po 56 czyli jak dam +1 to też zadziała? Dodano po 15 A jeszcze jedna sprawa czy linia...
Notatki z prezentacji, którą teraz tworzę, może się przydadzą: Mikrokontrolery AVR stosowane są w przemyśle samochodowym, w systemach zabezpieczających, bezpieczeństwa oraz rozrywkowym. Stosują je np firmy BMW, Daimler Chrysler oraz TRW W X-Boxie, w padach zastosowano AVRy z interfejsem USB. Atmega48 pojawia się jako dodatkowy mikrokontroler w Lego...
Hmm...ciekawe. A swoją drogą to, wg w/w funkcji to na który mpinie uC 1-wire teraz działa ?? To zależy właśnie od makr , a tych wykorzystuję 5 w trybie SINGLE i 3 w trybie MULTI. Np. dla magistrali 1wire na porcie PORTD i bicie PD6 w trybie SINGLE: #ifdef SINGLE_OW #define bp (1<<PD6) #define bm ~(1<<PD6) #define owhi DDRD&=bm...
Z "internetu" wyczytałem , że przed modyfikacją zmiennej, która będzie użyta w procedurze obsługi przerwania trzeba wstrzymać globalne przerwania . Nie wiem czy dobrze zrobiłem - zmieniłem kod na : cli(); stan=1 sei(); Jest to skrajnie nieprawidłowe. Nie może to pomóc, tylko zaszkodzić. Kiedy występuje przerwanie dochodzi do zapisu PC na stosie i skok...
jak to nie ingerujesz w stos panie kolego??? przecież wiesz, że rcall ingeruje w stos? prawda? tu się zgadzasz? ..... ale nie wiesz właśnie chyba tego że samo wywołanie przerwania to tak jakbyś zrobił rcall do jego obsługi - tyle tylko że ten rcall za ciebie robi sam procek i on tak jak w przypadku rcall odkłada na stos adres powrotu z obsługi przerwania...
procedura adres zdalny wywołać procedura wywołać adres router
chrysler instrukcje chińskie testery akumulatorów sterownik ducati
Reset głowicy Canon PF-04 w ploterze iPF 750 Matryca LCD V236BJ1-P01: Specyfikacja i Zakup