tutaj masz przykładowy kod http://mikrokontrolery.net/avr_asm_04.ht...
;sampel dla 10 s mov eax,10 call Delay_seconds extrn Seconds_today:proc Delay_seconds proc pusha mov ecx,eax call Seconds_today mov ebx,eax DLY1: call Seconds_today sub eax,ebx cmp eax,ecx jb DLY1 popa ret Delay_seconds endp uffff :idea: sampel z ksiazki Asembler dla procesorow intel
Zamiast robić tam opóźnienie można policzyć ile taktów zajmie uartowi wysłanie ostatniej ramki i robić sobie inne potrzebne operacje ,które zajmują czas a po odpowiedniej ich liczbie zmienić stan porty i tyle . Asembler daje wiele możliwości wykorzystania czegoś co się nazywa opóźnieniem . A jak masz wolny licznik to można na nim zrealizować opóźnienie...
A od kiedy bascom potrafi kompilować kod asemblera? Jeżeli pisałeś i testowałeś program w avr studio - to znaczy że musiałeś go skompilować. Plik .hex znajdziesz w folderze z projektem.
Witam !! Dopiero zaczynam się uczyć assemblera mikrokontrolerów rodziny 51. Chcę aby przysłowiowa diodka mrógała mi co 0,5 sekundy i nie wiem jak spowodować takowe opóźnienie w assemblerze, z tym że nie używając do tego celu timerów. załóżmy że procesor będzie taktowany z częstotliwością 12 MHz. Jak powinien wyglądać podprogram realizujący opóźnienie...
Witam. Mam do zrealizowania dwa zadania, są proste, ale jestem bardzo początkujący i asembler sprawia troche problemów :/ Bardzo proszę o sprawdzenie czy te programy są poprawne od strony programistycznej, ponieważ muszę je gdzieś wykorzystać a na chwilę obecną nie mam dostępu do wgrania ich na mikrokontroler 1. Napisz program, który zaświeci diody...
Witam. Będzie to wyglądało jakoś tak: MOV R2,#0FFH MOV R3,#0FFH LOOP: NOP NOP DJNZ R2,LOOP MOV R2,#0FFH DJNZ R3,LOOP Wprawdzie dawno nie pisałem w asm.. , ale raczej jest OK. Pozdr. Dodano po 59 sorki, wcieło spacje w kodzie.....
Darek4444 :arrow: a wczym właściwie piszesz?? dla znające asembler powinno być wszystko jasne ;)
w tym kawałku należy po jednokrotnym dodaniu sprawdzic czy przycisk wrócił do stanu wyjściowego main: sbis PIND, 0 rcall dodaj loop1: ;tu przydałoby się jeszcze opóźnienie eliminujące trochę drgania przycisku sbis PIND,0 rjmp loop1 rjmp main
Wszystko dobrze napisales tylko zapomniales o tym ze funkcje call itp. odkladaja adres powrotu na stos, a u ciebie nie masz ustawionego tego stosu Musisz na samym poczatku, zaraz pod etykieta RESET wstawic instrukcje inicjalizujace stos: ldi temp, LOW(RAMEND) out SPL, temp ldi temp, HIGH(RAMEND) out SPH, temp Musisz zawsze o tym pamietac. A jesli chodzi...
Uruchomiłem (z diodami :]) ale problem podstawowy to drgania styków po prostu jak wcisne raz np. 5 to mam cały wyświetlacz w piątkach. Czytałem że można zrobić opóźnienie i jeszcze raz sprawdzić. Faktycznie asembler obługuje rozkaz CALL i mogę go używać w RIDE-7 tam zanalazłem że jest MA51 assembler chociaż M to może oznacza że to makroasembler. ale...
Spróbuj w głównej pętli wrzucić opóźnienie (cały czas mam wrażenie, że to wszystko chodzi "za szybko" jak dla ludzkiego oka :) ). OPOZNIENIE1: mov R0,#0ffh mov R1,#0ffh mov R2,#05h petlas: djnz R0,petlas djnz R1,petlas1 djnz R2,petlas2 sjmp koniec_ops petlas1: mov R0,#0ffh sjmp petlas petlas2: mov R1,#0ffh sjmp petlas koniec_ops:...
AVR studio (asembler) to nie Bascom... tu nie ma czegoś takiego jak komendy do obsługi sprzętowych liczników, musisz używać rozkazów uP i konfigurować odpowiednie rejestry i przede wszystkim odpowiednio używać przerwań, bo one są chyba najważniejszym elementem, którego używa się przy pracy z licznikami. Musisz wziąć notkę katalogową tego atmelka i przejrzeć,...
kolego czy nie bądź niereformowalny ;) napisałeś: Nie mylę. Np. WinAVR przecież kompiluje i programuje. To programator oraz kompilator w formie jednej aplikacji (no może pakiet aplikacji no przecież (sorry) ale to bzdura co piszesz - już ci jeden kolega tłumaczył - ale jeszcze raz: WinAVR to aplikacja dzięki, która posiada interfejs użytkownika na komputerze...
Panowie mam pytanie co robię nie tak że mi nie obsługuje klawiszy. przyciski mam dołaczone do PA0...PA4. Do PA5 i PA6 mam dołączone przekaźniki (wyraźnie słychać czy się przełaczają), zamiast sterowania przekaźnikiem dawałem komendę zerowania LCD i nic. Tak jakby się gdzieś zawiesił albo coś. Wiem że całe życie się człowiek uczy i pewnie jest tu jakiś...
mirekk36 , obecnie szykują się poważne zmiany w BASCOMie. Powoli dodawane są układy XMEGA, tworzone jest nowe IDE (Wreszcie mają być projekty!). Chodzą też słuchy o BASCOM-ARM, choć osobiście sobie tego jakoś nie wyobrażam. Ja o tych "słuchach" szłyszę już od wielu miesięcy ;) .... i nadal nic. Przypomina mi to sytuację z próbą wyprodukowania przez...
czy jest jakas instrukcja w at90s1200 odpowiedzialna za wyczekanie ustalona ilosc sekund (cos jak odpowiednik pascalowego delay-a) albo chociaz jakis fragment kodu ktory by to realizowal. chodzi mi oczywiscie o asemblera na at90s1200, a nie o bascoma. prosze o pomoc i pozdrawiam :)
[syntax=asm] ; Opóźnienie STOP_05: MOV R4,#10 CZ2:MOV R3,#180 CZ1:MOV R2,#200 DJNZ R2,$ DJNZ R3,CZ1 DJNZ R4,CZ2 RET end [/syntax] Witam, mógłby mi ktoś matematycznie wytłumaczyć w jaki sposób to opóźnienie się tworzy, na kwarcu 11,0592 daje około 0,7s. Sprawdzałem w keil uvision ale doszedłem do samych bzdur. Oczywiście rozumiem co robi rozkaz DJNZ...
Jak napisać program w asemblerze który jest opóźnieniem np o 200ms dla 16F877 .Po tym czasie zmienia wartości pinu np RD.0 dalej 200ms opóźnienia i tak dalej (petla nieskończona ) .pisałem dotąd tyko w basicu .Proszę o pomoc
Chyba za ogolnie zadales temat. Zechciej doprecyzowac jak wielkie opoznienie, jaki zegar, czy na przerwaniach czy tez programowo i w jakim jezyku. Na poczatek podpowiem, ze z punktu widzenia celu czyli opoznienia 8086 nie rozni sie od innych procesorow, stad robi sie to tak samo jak w 68k czy w ARM. W mikrokontrolerach masz dodatkowo sprzetowe timery,...
W jaki sposób zrobiłeś wstawkę asemblera? Nie zapomniałeś użyć instrukcji 'volatile'? Jeśli zapomniałeś to najprawdopodobniej kompilator C podczas optymalizacji wyrzucił z kodu tą wstawkę asemblerowską bo "doszedł do wniosku" że niczego ciekawego ona nie wnosi.
Dzień dobry wszystkim użytkownikom. Jestem tutaj nowy i mam do was małe pytanie odnośnie asemblera. Zrobiłem napis OLA na wyświetlaczy i ma się on przesuwać w lewą stronę. Nie mam pojęcia jak dać do tego czasówkę aby OLA(cały napis) przesuwała się co jakaś 1s. Oto co do tej pory udało mi się napisać: ;*************4***************** ; Na Wyświetlaczu...
Witam Mam napisać w Aseblerze pętle opóźniającą (400us) dla 8051. f(xtal)=12MHz Tt=1us Napisałem coś takiego: ------------------------ START: MOV R0,#100 2takty DEL: NOP 1takt DJNZ R0,DEL 3takty ------------------------ N=2+(1+3)*100=402 Ta pętla opóźnia 400us ??? Jeśli nie to jak to trzeba liczyć?
Witam Zamieszczam program który może pomóc. Jest on napisany w programie Keil mVision. ;---------------------------------------... ; Definicje: ; LCD_D Port D do komunikacji z LCD ; LCD_RSLinia R/~S do podłączenia LCD ; LCD_ENLinia ENABLE do podłączenia LCD ; Linia R/~W wyświetlacza LCD powinna być na stałe w stanie niskim....
Witam!!! Częśc programu która cie interesuje to: TEMPLOOP: MOV ADCMODE, #12H ; INITIATE A SINGLE AUX CONV JNB RDY1,$ ; Wait for conversion results ; conversion result ready ; a value of 80h in AD1H=0degC MOV A, ADC1H ; 80h=0, FFh=+127, 00h=-128 CLR C SUBB A, #80H ; convert to 2's comp ; FFh=-1, 80h=-128, 00h=0, 7Fh=+127 W akumulatorze pozostaje temperatura...
Błądzisz. 0. Dlaczego wybrałeś muzealny mikrokontroler, dla którego informacji trzeba szukać w skanowanych artykułach z gazet wydawanych w latach 80-tych i 90-tych zeszłego wieku? 1. Dlaczego nie chcesz korzystać z timera? To jest najlepszy i najpewniejszy sposób odmierzania czasu. 2. Czy program w którym potrzebujesz opóźnienie 5ms nie robi nic innego...
Witam. W Bascomie istnieją funkcje takie jak waitms i waitus. Podobne funkcje są w CodeVison delay_ms i delay_us.Moje pytanie brzmi jak wygenerować opóźnienie mniejsze od 1us. Wiem że trzeba napisać coś w asemblerze którego ja zupełnie nie znam. Za pomoc dziękuje z góry.
Jestem początkujący. Czy ktoś mógłby mi opisać jak zrobić opóźnienie na liczniku T0 w asemblerze. Ważne są ustawienia TMOD i TCON ale co dalej. Chce uzyskać opóźnienie około 1s (jak wywołać przerwanie od licznika i jak je realizowac aby trwało 1s) ? Kwarc 20MHz, cykl maszynowy trwa 0,8us.
Generalnie port jest zatrzaskiem więc nie ma sensu się martwić czy dana informacja się zmieni czy nie do czasu kolejnego zapisu do portu :) To daje ci sytuację taką korzystną sytuację że nie musisz się martwić o to co rozbi procek w tym czasie. Pytanie jak bardzo zależy ci na dokładności odmierzenia czasu w przypadku zapalania diody na około 1s lub...
Tak na szybko : [syntax=asm] petla: ldi r20,250 ;opóźnienie czekaj na wciśnięcie (L) wait: sbic PIND,7 rjmp petla dec r20 brne wait .............. [/syntax] Analogicznie zrób zwolnienie przycisku [EDIT] Włąśnie zauważyłem że w twoim układzie jak jest wciśnięty to jest stan H na PIND,7, a ja zrobiłem odwrotnie, ale myślę że jak zrozumiesz zasadę to łatwo...
Witam! Mniej więcej tak: ORG 0BH LJMP PRZERWANIE_OD_T0 ORG 100H WARUNKI_POCZATKOWE: MOV IE,#82H MOV TCON,#10H MOV TMOD,#01H MOV TH0,#03CH MOV TL0,#0B0H MOV R2,#2 PETLA_GLOWNA: NOP SJMP PETLA_GLOWNA PRZERWANIE_OD_T0: DJNZ R2,EXIT ;----------------------- TU PISZESZ CO MA SIE WYKONYWAC PO 100ms MOV R2,#2 EXIT: MOV TH0,#03CH MOV TL0,#0B0H RETI END Program...
Skoro dopiero się zaczynasz uczyć, to ciężkiego kalibru używasz (mam na myśli assemblera) a ja uważam, że to najlepszy pomysł - zaczynać od poznania asemblera. Pomimo, że początki są trudne to poznanie podstaw przynajmniej asemblera daje już dużą wiedzę co i jak można robić z prockami. A do większych później projektów czy nawet małych można spokojnie...
Może zrób to inaczej. Podam sam pomysł bo osobiście nie programuję w C więc nie chcę głupot pisać, a podejrzewam że asembler Cię nie interesuje ;) Po naciśnięciu dowolnego przycisku wygeneruj opóźnienie. Po tym opóźnieniu sprawdź jakie przyciski są wciśnięte. Ale zwróć uwagę żeby przy każdej instrukcji if sprawdzać oba piny 1 i 2 portu B. Więc warunek...
Ale co tu trzeba wyjaśniać? Bierze kolega manual do 8051 i sprawdza co dany rozkaz robi i jak robi ... to jest bardzo przystępnie opisane, w końcu architektura wiekowa. A na zadanie domowe to proszę przeanalizować co robią te instrukcje pod etykietami DELAYx a jasne stanie się jak zadawane jest opóźnienie.
Program z pierwszego postu wyglądał całkiem przyzwoicie jeżeli chodzi o czasy. Może błąd tkwi w wait_us? Czy na pewno po wywołaniu ldi r16, 80 rcall wait_us występuje opóźnienie 80us? pokaż jak wygląda wait_us. Pozdrawiam
Pomysle nad tym, lubie pisać w Bascom bo jest to bardzo proste, ale widze że jednak muszę wrócić do asemblera.
Zrobilem maly test i wychodzi uuuuuhuhu :D Ale to i tak nic w porownaniu kompilatorem Pascala dla Picow ktory kod ktory w asemblerze zrobilem w 5 linijkach, w Pacalu w 3 on skompilowal do prawie 100 linijek kodu w asemblerze...
;* ;***************************************... ;*PROCEDURY OBSŁUGI MAGISTRALI 1-Wire DLA MIKROKONTROLERA AVR ;***************************************... ;* ;*Nazwa pliku :AVR_1Wire.asm ;* ;*Przeznaczenie :dowolny AVR, za wyjątkiem AT90S1200 ;*Kwarc :4MHz ;* ;*******************************OPIS****...
Co do reti zabardzo nie masz racji. Mi wszystko działa. Na innych moich przykładach wszystko grało. Co do tego impulsu enable próbowałem już takie kombinacje: -podciągnięcie na portach DB0..DB7, następnie E = 1, opóźnienie, E = 0 -podciągnięcie na portach DB0..DB7, następnie E = 1, E = 0, opóźnienie Czy jest może jakaś inna opcja. Jak byś popatrzył...
W pierwszym przypadku w celu jak największej dokładności czasu opóźnienia jest wyliczana liczba przebiegów wewnętrznej pętli (która wykonuje się w 3 lub 4 cyklach, zależnie od tego, czy licznik może mieć 1 bajt, czy musi mieć 2 bajty) - te obliczenia są wykonywane na liczbach zmiennoprzecinkowych. Co do drugiego kodu, nie jest on funkcjonalnie taki...
Nie analizowałem specjalnie programu ale już na pierwszy rzut oka wygląda że w programie nie bierzesz pod uwagę tzw. mikro odbić klawiszy które zostaną naciśnięte. Należy w programie uwzględnić pewne opóźnienie oraz po pewnym czasie sprawdzić czy było to zakłócenie czy też klawisz dalej pozostaje wciśnięty. Powodzenia
Wrzucam tu procedurki którymi ja odzczytuję DS18B20 w asemblerze '51 może się przydadzą :) ; /-----\ ; |-------| ; | | ; |DS12B20| ; |_______| ; | | | ; GND Vdd ; DQ ; PIN1WEQU P1.0 ;=======================================... ; procedura odczytu temperatury z DS18B20 ;---------------------------------------...
Witam. Mam krótkie pytanie odnośnie funkcji realizującej opóźnienie zawartej w pliku nagłówkowym delay.h w AVR GCC. /** \ingroup util_delay Delay loop using an 8-bit counter \c __count, so up to 256 iterations are possible. (The value 256 would have to be passed as 0.) The loop executes three CPU cycles per iteration, not including the overhead...
(at)khoam Sprawdzałem z Os ale tylko na GCC dołączone do Microchip Studio. Szczerze mówiąc jak już wspomniano najlepiej zrobić to na __builtin_avr_delay_cycles() i od razu widzimy ile cykli trwa opóźnienie, nie trzeba liczyć NOPów. A jeżeli o czas to już wspomniane _delay_us(): SET; _delay_us(0.5); CLR; _delay_us(0.5); Przynajmniej jak zmienimy zegar...
Witam wszystkich, to moje pierwsze pytanie na Elektrodzie, mam nadzieję, że nie zostanę na wstępie wyśmiany za niewiedzę ;) Mam następujący problem: Potrzebuję napisać pewien program w asemblerze dla µC ATmega128 (oczywiscie pod symulator avrstudio4), w którym, korzystając z przerwań wewnętrznego timera powinienem otrzymać opóźnienie 1Hz. Całą...
Nigdy nie korzystałem i nie śledzę rozwoju AI, więc mam pytanie. Czy i ewentualnie jak dobrze, modele językowe radzą sobie z pisaniem programów w asemblerze, Zapytałem Claude o wygenerowanie szkieletu programu dla koprocesora ULP w ESP32. Nie informowałem AI, że musi być w asemblerze, ale sobie poradził całkiem dobrze: Może jednak C++ ? Niestety, Claude...
Czyli licząc opóźnienie wnoszone przez delay3 powinno wyjść tak: delay3: ldi R18, 0 ;1 cykl del3: rcall delay2 ;3+264707 cykli - jak rozumiem 3 to ilość cykli rcall ? inc R18 ;1 cykl brne del3 ;2 cykle (1 gdy nie ma skoku) ret ;4 cykle ;razem (1+264710+1+2)*256-1+4=67766787 cykli 67766787*(16MHz)^-1=4,24s Czy tak ?
Witam ja bym zmienił kwarc na 12Mhz to będzie rozdzielczość co 1us i wtedy timer ustaw na 50ms (50000) i masz równy czas . Nie wiem jak jest w bascomie ale asemblerze instrukcją ORL THL,#wartość można skorygować wartość licznika żeby odmierzał równy czas.
Ale zawsze masz stałe opóźnienie, czyli wykonanie inkrementowania sekund byłoby stale po prostu przesunięte względem impulsu z zegara. No niekoniecznie ten czas będzie stały. Licznik trzeba odpowiednio sterować, po 60s inkrementować już minuty, potem godziny. Konieczne jest też zerowanie odpowiednich wartości. Zatem ten czas będzie się zmieniał. Jednak...
Witam, piszę z prośba o wytłumaczenie mi jak liczy się opóźnienie w sekundach. Procesor to at89s4051 z zegarem 24Mhz. kod opóźnienia: lcall delay delay: mov R0,#0xff mov R1,#0xff mov R2,#0xff petla: djnz R0,petla djnz R1,petla djnz R2,petla ret i teraz tak wiem że lcall 2 cykle, mov 1 cykl, ret 2cykle, djnz 2 cykle, jak policzyć czas opóźnienia wywołany...
To duże opóźnienie w procedurze inicjalizującej jest po to by zobaczyć mignięcie diody. Wskazuje mi to, że coś się dzieje i że impuls obecności się pojawił. Nie ma to nic wspólnego z 1-wire. No chyba, że to coś przeszkadza. Jednak inicjalizacja działa dobrze. Impuls obecności się pojawia. Po dodaniu # pojawiła się jakaś sensowna wymiana. Widać, że '51...
diody asembler dodawanie asembler asembler kwadrat
remotronix pilota dewalt elektronarzędzia zdalne sterowanie radiem
pilot cosmo generator sygnałów alarmowych
Lenovo ThinkCentre M920t 10SGS1EDOS – schemat rozmieszczenia podzespołów płyty głównej Schemat zasilacza UPS APC Back-UPS ES 550 – poszukiwanie diagramu, typowe usterki, diagnostyka