Fórum témák

» Több friss téma
Fórum » Assembly program
 
Témaindító: PiTy85, idő: Dec 14, 2008
Témakörök:
Lapozás: OK   1 / 2
(#) PiTy85 hozzászólása Dec 14, 2008 /
 
"Készítsen szorzót, ami bekér a billentyűzetről két számjegyet és összeszorozza őket. A jelzőlámpát, mint egy dobókocka egyik oldalát felhasználva írassa ki a végeredményt."
Ezt sms32v50 nevű Asm simulatorban kéne megoldani.
Sajnos nem sokat értek az assemblyhez, remélem tud valaki vmi egyszerű megoldást. Mert gondolom nem valami nehéz a feladat, csak 0 tudással elég nehéz nekem.

Előre is köszönöm a segítséget!

--------------
István
(#) potyo válasza PiTy85 hozzászólására (») Dec 14, 2008 /
 
Ez valami házi feladat akar lenni?
(#) MPi-c válasza PiTy85 hozzászólására (») Dec 14, 2008 / 4
 
Én erről a bigyóról még nem hallottam, de rákerestem :google: és ezt a magyar nyelvű leírást találtam. Ahogy nézegetem ebben több példa is van és fokozatosan veszi át az egyes utasításokat. Szerintem ezt kellene átnézned. Azt ne nagyon várd, hogy helyetted valaki megírja, ez a te feladatod!
(#) icserny válasza PiTy85 hozzászólására (») Dec 14, 2008 / 4
 
Ez kell neked:
SMS32v50 -A Microprocessor Simulator For Beginners

Idézet:
„Sajnos nem sokat értek az assemblyhez”

Nem baj, vedd úgy, hogy én meg elfelejtettem...
A belinkelt honlapon van Tutorial, csak olvasgasd szorgalmasan, ha ez a házi feladat!
(#) PiTy85 válasza icserny hozzászólására (») Dec 14, 2008 /
 
Szia!

Köszönöm, ezt az oldalt nem találtam. :-S
És igen ez egy Házi feladat lenne.

--------------
István
(#) kendre256 válasza PiTy85 hozzászólására (») Dec 14, 2008 /
 
Amit MPi-c belinkelt neked az előbb, az ugyanennek a manualnak a tartalom szerinti magyar fordítása.
(Bár gyanítom, hogy ezt a főiskolán is ajánlották már nektek.)
(#) punkkazy hozzászólása Dec 23, 2008 /
 
üdv!
Szeretnék egy kicsit belemerülni a programozásba és nem tudom mivel kezdjem. Tudnátok valami irományt ajánlani, amiből tanulhatok? Jó lenne, ha a netről letölthető lenne. Az assembly-al már egy nagyon pic-it foglalkoztam.
(#) slimtomi hozzászólása Dec 26, 2008 /
 
Szeva!
Ha programozásra adod a fejed, ne ugorj a közepébe!
Amúgy is az assembly-ben szerintem azok tudnak csak tökéleten programozni, akik létrehozták magát a nyelvet ...
De talán ha C vel kezdesz az jó lesz. Bár jómagam annak idején C64-en kezdtem basic-kel, majd PC-én TurboPascal-lal folytattam, de ezek természetesen már a múlté. Mondjuk a Pascal sokban hasonlít a C re, de csak DOS alá tudsz programokat írni vele.
Szakirodalmat pedig nézek majd a neten és belinkelem, mivel sajnos én nem rendelkezem digitális formában vele.
Addig is üdvözletem!

Tamás
(#) potyo válasza slimtomi hozzászólására (») Dec 26, 2008 /
 
1. Assemblyben nem csak azok tudnak programozni, akik a nyelvet létrehozták, hanem azok is, akik egy kicsit foglalkoztak azzal, hogy hogyan működik a processzor, hogyan történik egy utasítás végrehajtása, mi mire hat ki a processzoron belül, stb.

2. Ne keverjük a dos-t a parancssorral. Pascallal parancssori programokat lehet írni

3. A Delphi a Pascal utódja grafikus kezelőfelülethez.
(#) punkkazy válasza slimtomi hozzászólására (») Dec 26, 2008 /
 
kösz előre is a linkekért
(#) slimtomi válasza punkkazy hozzászólására (») Dec 28, 2008 /
 
Köszi a javítást, és részben igazad is van.
Én fogalmaztam rosszul, valóban a pascallal parancssori programokat lehet írni. Igazából a DOS kifejezést a program jellegére értettem.
Azt pedig én is nagyon jól tudom, hogy a Delphi a Pascal utódja. Én a TurboPascal névre hallgató fejlesztő környezetre értettem a megállapításomat.
Az assmebly-ről pedig beláthatod, hogy nem sokan tudnak benne igazán jól programozni.

(#) slimtomi hozzászólása Dec 28, 2008 /
 
Tehát a megígért szakirodalom. Találtam, nem a saját feltöltésem! Bár jómagam egy elég korrekt C könyvvel rendelkezem, nem akarom beszkennelni

Programozási eBookok többek között Assembly, C/C++, Delphi, PHP, ASP, Java, HTML és CSS témakörben.

http://rapidshare.com/files/102001337/prog.part1.rar
http://rapidshare.com/files/102001416/prog.part2.rar
http://rapidshare.com/files/102000983/prog.part3.rar
Pass: Squito


Pár új könyv. A témakörök többek között: Office, PHP, C++, Flash 5, Linux, Internet gyerekeknek, Novell és még néhány érdekesség.

http://rapidshare.com/files/105544644/EBSz.rar
Pass: Squito
(#) punkkazy válasza slimtomi hozzászólására (») Dec 28, 2008 /
 
Örök hálám üldözni fog
Tényleg kösz a linkekért!
(#) jocking hozzászólása Okt 22, 2011 /
 
Egy kis segítséget szeretnék kérni Assembly programozásban.
A feladat a következő:
10 elemű szavas tömb elemeinek 8-cal oszthatóvá tétele.
A megoldás:
A tömbelemek alsó 3 bitjének nullázása. Én ezt az SHL paranccsal oldottam meg.

A probléma:
Írtam rá egy programot, de a fordító folyamatosan hibát ír az "SHL BX, 3" sorra. Mindig azt a hibaüzenetet kapom, hogy "62.ASM(24): error A2052: Improper operand type". Pedig többször is utánanéztem, és SHL parancsnál igenis lehet azokat az operandusokat használni, amiket én is használtam.
Csatoltam a példaprogramot is, ha valaki hasznát venné.

Előre is köszönöm a segítséget.

62.ASM
    
(#) bbalazs_ válasza jocking hozzászólására (») Okt 22, 2011 /
 
Szerintem sokkal egyszerubb lenne egy AND, de te tudod.

Nalam sem forditotta le, csak akkor, ha cl szerepel szamlalokent, tehat a CX also byte-ja.

Van valami kulonos oka annak, hogy 16 bites modban dolgozol?
(#) Hp41C válasza jocking hozzászólására (») Okt 22, 2011 /
 
Szia!

  1. shl Bitwise left shift (same as sal)
  2.   Syntax:shlop, 1
  3.   shlop, CL
  4.   op: register or memory
  5.   Action: If operand is 1, op = op << 1
  6.           If operand is CL, op = op << CL
  7.   Flags Affected: OF, SF, ZF, AF=?, PF, CF

Az SHL a 8086 -on a regiszter megadása után csak az "1" konstans értékkel lehet paraméterezni. Legalább 80286 kell az shl reg,immed8 formához. Rá kell beszélni a fordítót, hogy 80286 utasításokat fordítson...
(#) bbalazs_ válasza Hp41C hozzászólására (») Okt 22, 2011 /
 
Jee es tenyleg!

Oda kell pottyinteni a progi legelejere, hogy
.386p

es tadaaaam!
(#) jocking válasza bbalazs_ hozzászólására (») Okt 22, 2011 /
 
Nekem úgy is jó lenne, csak arra nem sikerült rájönnöm, hogy kell AND-del alsó 3 byteot nullázni. De ha a belinkelt progimat a te elképzelésed szerint módosítanád, azzal sokat segítenél.
(#) DJ Tacki válasza jocking hozzászólására (») Okt 23, 2011 /
 
Ha az alsó 3 bitre gondoltál, akkor ezt a módszert Maszkolásnak hívják. AND műveletet hajtasz végre, egyik operandus a forrás érték, másik a "maszk". A maszk egy ugyanannyi digitből álló szám, mint az eredeti forrásoperadnus. Ahol ki szeretnéd nullázni az eredeti értéket, oda 0-t raksz a maszkban, a többi helyre 1-et, így ahol 1 van, az érték változatlan marad, a többi helyiértéken 0 lesz. PL:
forrás:10111101 & maszk:11111000 = 10111000.
Nagyon gyors, mert a logikai műveleteket minden processzor 1 ciklus alatt végrehajtja.

A programod pedig annyi, hogy végigmész a tömb minden elemén, és az adott maszkkal (11111000) AND kapcsolatba hozod az elemeket.
(#) bbalazs_ válasza jocking hozzászólására (») Okt 23, 2011 /
 
Ugy, hogy AND AX,0FFF8h

vagy regiszter nelkul AND tabla[SI],0FFF8h

Ha meg a cim is realtiv AND [SI][BX],0fff8h

De a feladatot hulyen fogalmaztak meg neked (valoszinuleg ez valami hazi feladat, amit velunk akarsz megoldatni). De hogy ezeket ki talalja ki?

Hogy lehet egy nyolccal nem oszthato szamot nyolccal oszthatova tenni??? Ugyanis barmilyen modszer eseten mar nem az eredeti szam lesz belole. Talan a 3-al felshifteles jar hozza a legkozelebb, ugyanis akkor (13 bitbe belefero szam eseten) kesobb visszaaallithato az eredeti szam, mig az also harom bit nullazasanal elvesznek ertekes jegyek.
(#) jocking válasza bbalazs_ hozzászólására (») Okt 23, 2011 /
 
Köszi a segítséget, közben reggelre én is rájöttem.
(#) Kovabe hozzászólása Szept 18, 2012 /
 
Sziasztok látom hogy halott a topic de nem találok olyat ahol kifejezetten az én problémámmal foglalkoznak. Sajna tudás hiányában belefutottam egy olyan cuccba amibe assembly nyelven megvan a program de nem teljesen tudom értelmezni. Esetleg ha valaki lenne aki tud nekem segiteni átnézni illetve ami hibát én véltem észrevenni azt kijavitaná nekem akkor azt megköszönném. Egy RC szabályzorol van szó ahol a bejövö jelet kis intervallumban értelmezi és ezt az intervallumot kéne kitágitani.
(#) Tardief hozzászólása Máj 1, 2016 /
 
Sziasztok!
Házi feladatban 8085-öt kell programoznunk és a feladat szerint eredményként a Zero flaget kell állítani.
Maga feladat már megvan,de nem tudom, hogy hogyan állíthatnám be a zero flaget tetszés szerint.
Előre is köszönöm a segítséget.
(#) bbalazs_ válasza Tardief hozzászólására (») Máj 1, 2016 /
 
Ha lehet a statusregisztert kozvetlenul irni, akkor ugy.
Ha nem lehet, akkor egy nulla eredmenyu muvelettel. Mondjuk 1-bol kivonsz egyet.
(#) Tardief válasza bbalazs_ hozzászólására (») Máj 1, 2016 /
 
SUB A paranccsal működhet?
Ha jól értem akkor ez kivonja az akkumulátorból önmagát, de nem vagyok benne biztos, hogy ez a parancs helyes.
(#) bbalazs_ válasza Tardief hozzászólására (») Máj 1, 2016 /
 
Tehat csupan elmeleti a kerdes?
Akkor adatlapot, procileirast elo es benne lesz.
De minden olyan utasitas jo, ami allitja a Z flaget 0 eseten.
(#) Tardief válasza bbalazs_ hozzászólására (») Máj 1, 2016 /
 
Köszönöm!
Úgy tűnik sikerült.
Még a végén egyszer megtanulom a nyelvet.
(#) Szabi1 hozzászólása Aug 17, 2016 /
 
Sziasztok! Annyira nem értek az assembly-hez, szeretném ha segítene valaki módosítani egy kódot. Szóval adott egy Atmega8515 ami UART-on fogad adatokat, pontosabban egy fényvezérő jeleit fogadja DMX szabvány szerint. A jelfogadás és visszajelzés ledekkel szuperűl működik, csak nekem a következő kódot úgy kéne módosítani, hogy legyen két független PWM generálva, egyik volna állandóan 50% kitöltéssel, 1Hz-től 16 Hz-ig állítható kellene legyen, másik PWM nagy frekvenciás kellene legyen, és állítható kitöltéssel, mert led fényerőt kellene szabályozzon. A kódban a "DMX_FIELD" értéke 0-255 lehet, ez adja meg hogy az első PWM frekvenciáját (jó volna ha pl 0-tól 16-ig OFF-on volna az első PWM).
A "(DMX_FIELD+1)" adná meg a második PWM kitöltési tényezőjét, ugyancsak 0-255 értéket kaphat UART-ból.
  1. /**** A P P L I C A T I O N   N O T E   ************************************
  2. *
  3. * Title                 : 9ch DMX LED PWM-Dimmer
  4. * Last updated          : 2016.Aug.15
  5. * Target                : Transceiver Rev.3.02 [ATmega8515]
  6. *
  7. * written by hendrik hoelscher, www.hoelscher-hi.de
  8. ***************************************************************************
  9.  This program is free software; you can redistribute it and/or
  10.  modify it under the terms of the GNU General Public License
  11.  as published by the Free Software Foundation; either version2 of
  12.  the License, or (at your option) any later version.
  13.  
  14.  This program is distributed in the hope that it will be useful,
  15.  but WITHOUT ANY WARRANTY; without even the implied warranty of
  16.  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  17.  General Public License for more details.
  18.  
  19.  If you have no copy of the GNU General Public License, write to the
  20.  Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  21.  
  22.  For other license models, please contact the author.
  23.  
  24. ;***************************************************************************/
  25.  
  26. .include "m8515def.inc"
  27.  
  28. ;Register and Pin definitions
  29.  
  30. .def tempL                              = r16
  31. .def tempH                              = r17
  32. .def Flags                              = r18
  33. .def DMXstate                   = r19
  34. .def null                               = r2
  35. .def status                             = r21
  36. .def ind_count                  = r3
  37. .def blink                              = r4
  38. .def PwmCnt                             = r20
  39. .def SREGbuf                    = r5
  40. .def ChaseFine                  = r6
  41. .def ChaseRes                   = r7
  42.  
  43. .equ StrobeFreqH                = 0x80
  44. .equ StrobeFreqL                = 0x81
  45. .equ StrobeBuf                  = 0x82
  46.  
  47. .equ OldStepH                   = 0x83
  48. .equ OldStepL                   = 0x84
  49. .equ NewStepH                   = 0x85
  50. .equ NewStepL                   = 0x86
  51. .equ StepCnt                    = 0x87
  52. .equ ChaseCnt                   = 0x88
  53. .equ ChaseSeed                  = 0x89
  54.  
  55. .equ LED1= PD7
  56. .equ LED2= PE0
  57. .equ BIT9= PE2
  58.  
  59. .equ DMX_FIELD=      0x60               ;SRAM-Beginn
  60. .equ DMX_CHANNELS=   3
  61. .equ PWM_FIELD=      0x70              
  62. .equ F_OSC=          8000
  63. .equ FLASH_DURATION= 400
  64. .equ IND_OFFSET=     12         ;Offset für indicator-Timer (14Hz)
  65.  
  66. #define CHS_SPD          (0x600)
  67. #define RATE         (0x500)
  68. ;#define PAT0            (0x400)
  69. ;#define PAT1         (PAT0 +0xA)
  70. ;#define PAT2            (PAT1 +0xA)
  71. ;#define PAT3            (PAT2 +0xA)
  72. ;#define PAT4            (PAT3 +0xA)
  73. ;#define PAT5         (PAT4 +0xA)
  74. ;#define PAT6         (PAT5 +0xA)
  75. ;#define PAT7         (PAT6 +0xA)
  76.  
  77.  
  78. ;***** special Flags
  79.  
  80. #define  VALID_DMX          (0)
  81. #define  SIGNAL_COMING  (1)
  82.  
  83. #define  doIND                  (5)
  84. #define  BLACK_OUT              (6)
  85. #define  DATA_REFRESHED (7)
  86.  
  87.  
  88. ;interrupt vectors
  89. .org 0 
  90.         rjmp init               ;reset vector address
  91.         reti                    ;External Interrupt0 Vector Address
  92.         reti                    ;External Interrupt1 Vector Address
  93.         reti                    ;Input Capture1 Interrupt Vector Address
  94.         rjmp strobe             ;Output Compare1A Interrupt Vector Address
  95.         reti                    ;Output Compare1B Interrupt Vector Address
  96.         reti                    ;Overflow1 Interrupt Vector Address
  97.         rjmp pwm                ;Overflow0 Interrupt Vector Address
  98.         reti                    ;SPI Interrupt Vector Address
  99.         rjmp get_byte   ;UART Receive Complete Interrupt Vector Address
  100.         reti                    ;UART Data Register Empty Interrupt Vector Address
  101.         reti                    ;UART Transmit Complete Interrupt Vector Address
  102.         reti                    ;Analog Comparator Interrupt Vector Address
  103.         reti                    ;External Interrupt2 Vector Address
  104.         reti                    ;Output Compare0 Interrupt Vector Address
  105.         reti                    ; EEPROM Interrupt Vector Address
  106.         reti                    ; SPM complete Interrupt Vector Address
  107.         reti                    ; SPM complete Interrupt Vector Address
  108.  
  109. ; INIT
  110.  
  111. init:
  112.  
  113. ; Stack
  114.         ldi             tempH,high(RAMEND)
  115.         ldi             tempL,low(RAMEND)
  116.         out             SPH,tempH
  117.         out             SPL,tempL
  118.  
  119. ; WATCHDOG
  120.         wdr
  121.         ldi     tempL, (1<<WDE)|(1<<WDCE)
  122.         out     WDTCR, tempL
  123.         ldi     tempL, (1<<WDE)|(1<<WDCE)|(1<<WDP2)|(1<<WDP1)
  124.         out     WDTCR, tempL
  125.         wdr                                                                                             ;set prescaler @0,5s
  126.  
  127. ; PortA
  128.         ser     tempL
  129.         out     DDRA, tempL
  130.         clr     tempL
  131.         out     PortA, tempL                                                    ;low Outputs
  132.  
  133. ; PortB
  134.         ldi             tempL, 0b00000011
  135.         out             DDRB, tempL
  136.         ldi             tempL, 0b11110100
  137.         out             PortB, tempL
  138.  
  139. ; PortD
  140.         ldi     tempL, 0b10000100
  141.         out     DDRD, tempL
  142.         ldi     tempL, 0b01111000
  143.         out     PortD, tempL                                                    ;DMX & Spare , LED1 on
  144.  
  145. ; PortE
  146.         ldi     tempL, 0b00000001
  147.         out     DDRE, tempL
  148.         ser             tempL
  149.         out     PortE, tempL                                                    ;LED2 off, BIT9 & OPTION Pullup
  150.  
  151. ; Timers
  152.         ldi     tempL, (1<<CS01)                                                ;set counter0 @clock/8 frequency
  153.         out     TCCR0, tempL
  154.         clr             tempL
  155.         out             TCCR1A, tempL
  156.         ldi     tempL, (1<<CS12)|(1<<WGM12)                     ;set counter1 @clock/256 frequency, CTCmode
  157.         out     TCCR1B, tempL
  158.         ldi     tempL,  (1<<TOIE0)                                              ;aktivate overflow interrupt
  159.         out     TIMSK, tempL
  160.                
  161.         rcall   init_dmx
  162.        
  163.        
  164. ; set Register
  165.         clr null
  166.         clr blink
  167.         com blink
  168.         mov     ChaseFine, blink
  169.         ldi tempL, IND_OFFSET
  170.         mov ind_count, tempL
  171.         ldi PwmCnt, 0xFF
  172.         ldi     Flags, 0                                                                        ;clear Flags
  173.        
  174.         sts StepCnt, null
  175.         sts     NewStepH, null
  176.         sts NewStepL, null
  177.         ldi     tempL, 1
  178.         sts ChaseCnt, tempL
  179.         sts ChaseSeed, tempL
  180.         mov     ChaseRes, tempL        
  181.  
  182.         wdr
  183.         sei
  184.  
  185. ; a kommentet innen vedd kii!
  186. main:   sbrc    Flags, doIND
  187.                 rcall   indicate
  188.  
  189.                 rcall   eval_strobe_freq
  190. ;rcall chase
  191.                 rjmp    main
  192.  
  193.  
  194.  
  195. ;****************************** LED INDICATOR ***********************************
  196. indicate:
  197.                 cbr             Flags, (1<<doIND)       ;clear flag
  198.                 rcall   chase
  199.                 dec             ind_count
  200.                 breq    ind_a
  201.                 ret
  202.      
  203.           ind_a:
  204.                 wdr                                                     ;reset Watchdog
  205. ;working LED
  206.                 sbrc    Flags, DATA_REFRESHED   ;should flash?
  207.                 rjmp    data_flash     
  208.                 sbi             PortE, LED2                     ; LED off
  209.  
  210. Error_LED:
  211.                 sbrc    blink, 0                        ;wenn erstes bit HI
  212.                 rjmp    on
  213.                 sbi     PortD, LED1
  214.                 rjmp    ind_tst
  215.          on:
  216.                 cbi     PortD, LED1
  217.  
  218.      ind_tst:
  219.             lsr         blink
  220.                 ldi             tempL, 1
  221.                 cp              blink, tempL
  222.                 brne    no_ind
  223.                                
  224. ;wenn durchrotiert (blink = 0)
  225.                 ldi             tempL, 0b10000000              
  226.                 sbrs    Flags, VALID_DMX
  227.                 ldi             tempL, 0b10001010
  228.                 sbrs    Flags, SIGNAL_COMING
  229.                 ldi             tempL, 0b10000010
  230.                 mov     blink, tempL
  231.  
  232.                 cbr     Flags, (1<<VALID_DMX)|(1<<SIGNAL_COMING)
  233.        
  234.         no_ind:
  235.                 ldi             tempL, IND_OFFSET
  236.                 mov             ind_count, tempL                ;plant prescaler
  237.                 ret
  238.         data_flash:
  239.                 cbr             Flags, (1<<DATA_REFRESHED)
  240.             sbis        PortE,LED2                              ;blinken grün
  241.                 rjmp    off
  242.                 cbi             PortE,LED2
  243.                 rjmp    Error_LED
  244.                 off:
  245.                 sbi     PortE,LED2
  246.                 rjmp    Error_LED
  247.  
  248.  
  249.  
  250.  
  251. ;****************************** strobe frequency ***********************************
  252. eval_strobe_freq:
  253.                 lds             tempL, DMX_FIELD                                        ;get 1st DMX ch
  254.  
  255.                 rjmp    esf_2
  256.  
  257.  
  258.                 ret
  259.         esf_2:
  260.                 sts             StrobeBuf, tempL
  261.                 cpi             tempL, 32
  262.                 brlo    esf_no_strobe
  263.                 ;cpi            tempL, 245
  264.                 ;brsh   esf_sync
  265.  
  266.                 subi    tempL, 45                                                       ;0-200 allowed
  267.                 ldi             ZL, low(RATE*2)                                         ;get freq from table
  268.                 ldi             ZH, high(RATE*2)
  269.                 add             ZL, tempL                       ;add low byte
  270.                 adc             ZH, null                        ;add with carry high byte
  271.                 add             ZL, tempL                       ;add low byte
  272.                 adc             ZH, null                        ;add with carry low byte
  273.                 lpm             tempL, Z+
  274.                 lpm             tempH, Z
  275.                 cli                     ; clear global interrupt flag
  276.                 sts             StrobeFreqL, tempL                                      ;atomic store
  277.                 sts             StrobeFreqH, tempH
  278.                
  279.                 in              tempL, TIMSK
  280.                 sbr             tempL, (1<<OCIE1A)                                      ;enable irq
  281.                 out             TIMSK, tempL
  282.                 in              tempL, TIFR
  283.                 sbr             tempL, (1<<OCF1A)                                       ;enable irq
  284.                 out             TIFR, tempL
  285.                 reti   
  286.  
  287.  
  288.         esf_no_strobe:
  289.                 in              tempL, TIMSK
  290.                 cbr             tempL, (1<<OCIE1A)                                      ;disable irq
  291.                 out             TIMSK, tempL
  292.                 ;cbr            Flags, (1<<BLACK_OUT)                           ;enable pwm
  293.                 ;// black out on
  294.                 ret
  295.  
  296. ;****************************** manual chaser mode ***********************************
  297. chase:                                                                                          ;called by indicator
  298. ;               sbis    PinE, PE1                                       ;DMX / hulye mod
  299. ;               rjmp    chs_a                                                   ;pattern mode
  300.                
  301.                 sbic    UCSRB,RXEN
  302.                 ret                                                                                     ;enable DMX reception
  303.                 sbi             UCSRB, RXEN
  304.                 clr             DMXstate
  305.                 ret
  306.                
  307.                        
  308.  
  309. ; ***************************9ch 8bitpwm-Ausgabe ****************************************
  310. pwm:                                           
  311.                 in      SREGbuf, SREG
  312.                 push    tempL
  313.  
  314.                 sbrc    Flags, BLACK_OUT                                        ;blanked by strobe?
  315.                 rjmp    pwm_bo_exit
  316.                        
  317.                 lds             tempL, PWM_FIELD
  318.                 cp              tempL, PwmCnt
  319.                 ror             status
  320.          
  321.                 lds             tempL, (PWM_FIELD+1)
  322.                 cp              tempL, PwmCnt
  323.                 ror             status
  324.  
  325.                 lds             tempL, (PWM_FIELD+2)
  326.                 cp              tempL, PwmCnt
  327.                 ror             status
  328.                        
  329.                 lds             tempL, (PWM_FIELD+3)
  330.                 cp              tempL, PwmCnt
  331.                 ror             status
  332.  
  333.                 lds             tempL, (PWM_FIELD+4)
  334.                 cp              tempL, PwmCnt
  335.                 ror             status
  336.  
  337.                 lds             tempL, (PWM_FIELD+5)
  338.                 cp              tempL, PwmCnt
  339.                 ror             status
  340.                
  341.                 lds             tempL, (PWM_FIELD+6)
  342.                 cp              tempL, PwmCnt
  343.                 ror             status
  344.  
  345.                 lds             tempL, (PWM_FIELD+7)
  346.                 cp              tempL, PwmCnt
  347.                 ror             status
  348.                                                                                                     ;9th bit
  349.                 sbis    PinD, PD4                                                       ;invert option
  350.                 rjmp    pwm9_pos                                                        ; no invert
  351.                
  352.                 lds             tempL, (PWM_FIELD+8)
  353.                 sbi             PortB, 0
  354.                 cp              tempL, PwmCnt
  355.                 brlo    pwm_exit
  356.                 cbi             PortB, 0
  357.                 rjmp    pwm_exit
  358.  
  359.            pwm9_pos:
  360.             com         status
  361.                 lds             tempL, (PWM_FIELD+8)
  362.                 cbi             PortB, 0
  363.                 cp              tempL, PwmCnt
  364.                 brlo    pwm_exit
  365.                 sbi             PortB, 0
  366.                 rjmp    pwm_exit
  367.  
  368.         pwm_bo_exit:
  369.                 sbis    PinD, PD4                                                       ;invert option
  370.                 rjmp    pwm_bo_pos                                                      ; no invert
  371.                 ser             status                                                          ;all ch off (inverted)
  372.                 sbi             PortB, 0
  373.                 rjmp    pwm_exit
  374.            pwm_bo_pos:
  375.                 clr             status                                                          ;all ch off
  376.                 cbi             PortB, 0       
  377.  
  378.         pwm_exit:
  379.                 out             PortA, status                                           ;output
  380.                 mov             tempL, PwmCnt                                           ;set next compare time
  381.                 lsr             tempL
  382.                 lsr             tempL
  383.                 lsr             tempL
  384.                 ldi             status, 250
  385.                 sub             status, tempL
  386.                 out             TCNT0, status
  387.  
  388.                 inc             PwmCnt
  389.                 tst             PwmCnt
  390.                 brne    pwm_no_reload
  391.                
  392.                 sbr             Flags, (1<<BLACK_OUT)
  393.                
  394. ;               lds             tempL, (DMX_FIELD+1)                            ;refresh channels
  395. ;               sts             (PWM_FIELD+8), tempL
  396.                
  397.                 ;ldi    tempL, 255;
  398.                 lds             tempL, (DMX_FIELD+1)
  399.                 sts             PWM_FIELD, tempL
  400.                
  401.                 ;ldi tempL,255;
  402.                 lds             tempL, (DMX_FIELD+2)
  403.                 sts             (PWM_FIELD+1), tempL
  404.                
  405.                 ;ds             tempL, (DMX_FIELD+1)
  406.                 sts             (PWM_FIELD+2), tempL
  407.                
  408.                 ;lds            tempL, (DMX_FIELD+1)
  409.                 sts             (PWM_FIELD+3), tempL
  410.                
  411.                 ;lds            tempL, (DMX_FIELD+1)
  412.                 sts             (PWM_FIELD+4), tempL
  413.                
  414.                 ;lds            tempL, (DMX_FIELD+1)
  415.                 sts             (PWM_FIELD+5), tempL
  416.                
  417.                 ;lds            tempL, (DMX_FIELD+1)
  418.                 sts             (PWM_FIELD+6), tempL
  419.                
  420.  
  421. ;       lds             tempL, (DMX_FIELD+9)
  422.                
  423.                 ; !!!!!!!!!! STROBO out
  424.                 ldi             tempL,255
  425.                 sts             (PWM_FIELD+8), tempL
  426.                
  427.                
  428.                 ldi             PwmCnt, 1                                                       ;reseed counter
  429.                 sbr             Flags, (1<<doIND)                                       ;indicate in main
  430.          
  431.           pwm_no_reload:
  432.                 pop             tempL
  433.                 out     SREG, SREGbuf
  434.                 reti
  435.  
  436.  
  437.  
  438.  
  439.  
  440.  
  441. ; ***************************Strobo function ****************************************
  442. strobe:
  443.                 in      SREGbuf, SREG
  444.                 push    tempL
  445.                 push    tempH
  446.  
  447.                 sbrs    Flags, BLACK_OUT
  448.                 rjmp    str_blank
  449.                 cbr             Flags, (1<<BLACK_OUT)                           ;enable pwm
  450.                 ldi             tempL,  low(FLASH_DURATION)                     ;load flash time
  451.                 ldi             tempH, high(FLASH_DURATION)
  452.                 rjmp    str_exit
  453.  
  454.         str_blank:
  455.                 sbr             Flags, (1<<BLACK_OUT)
  456.                 lds             tempL, StrobeFreqL
  457.                 lds             tempH, StrobeFreqH
  458.  
  459.         str_exit:
  460.                 out             OCR1AH, tempH
  461.                 out             OCR1AL, tempL
  462.                 pop             tempH
  463.                 pop             tempL
  464.                 out     SREG, SREGbuf
  465.                 reti   
  466.  
  467.  
  468. .include "lib_dmx_in.asm"
  469.  
  470. nix: rjmp nix
  471.  
  472. // Strobo frequency table (damped logarithmic)
  473. .org RATE
  474. .dw 65532, 60407, 56368, 53017, 50170, 47708, 45546, 43626, 41904, 40345, 38925, 37623, 36423, 35311, 34277, 33311
  475. .dw 32406, 31555, 30753, 29996, 29278, 28596, 27948, 27331, 26741, 26177, 25637, 25120, 24623, 24145, 23685, 23242
  476. .dw 22814, 22402, 22003, 21617, 21244, 20882, 20531, 20191, 19861, 19540, 19228, 18924, 18629, 18341, 18061, 17788
  477. .dw 17521, 17261, 17007, 16760, 16517, 16281, 16049, 15823, 15601, 15384, 15172, 14964, 14760, 14560, 14364, 14172
  478. .dw 13983, 13798, 13617, 13438, 13263, 13091, 12922, 12756, 12593, 12432, 12274, 12119, 11966, 11815, 11667, 11522
  479. .dw 11378, 11237, 11098, 10960, 10825, 10692, 10561, 10431, 10304, 10178, 10054, 9931,  9811,  9691,  9574,  9458
  480. .dw 9343,  9230,  9119,  9008,  8899,  8792,  8686,  8581,  8477,  8375,  8273,  8173,  8074,  7976,  7880,  7784
  481. .dw 7690,  7596,  7504,  7412,  7322,  7232,  7144,  7056,  6969,  6884,  6799,  6715,  6631,  6549,  6467,  6387
  482. .dw 6307,  6227,  6149,  6071,  5994,  5918,  5843,  5768,  5694,  5620,  5548,  5475,  5404,  5333,  5263,  5193
  483. .dw 5125,  5056,  4988,  4921,  4855,  4789,  4723,  4658,  4594,  4530,  4466,  4404,  4341,  4279,  4218,  4157
  484. .dw 4097,  4037,  3978,  3919,  3860,  3802,  3744,  3687,  3631,  3574,  3518,  3463,  3408,  3353,  3299,  3245
  485. .dw 3191,  3138,  3085,  3033,  2981,  2929,  2878,  2827,  2777,  2726,  2677,  2627,  2578,  2529,  2480,  2432
  486. .dw 2384,  2337,  2289,  2242,  2196,  2149,  2103,  2057,  2012,  1967,  1922,  1877,  1833,  1789,  1745,  1701
  487. .dw 1658,  1615,  1572,  1530,  1488,  1446,  1350,  1250,  1100,  1050,  1000,  950,   900,   850,   800,   750
  488. .dw 700,   650,   600,   550,   500,   450,   400,   350,   300,   250,   200,   150
  489.  
  490.  
  491. ;.org PAT0                                      ;on
  492. ;.dw 0b0111111111
  493. ;.dw 0b1111111111
  494.  
  495. ;.org PAT1                                      ;Lauflicht
  496. ;.dw 0b0000000001
  497. ;.dw 0b0000000010
  498. ;.dw 0b0000000100
  499. ;.dw 0b0000001000
  500. ;.dw 0b0000010000
  501. ;.dw 0b0000100000
  502. ;.dw 0b0001000000
  503. ;.dw 0b0010000000
  504. ;.dw 0b1100000000;
  505.  
  506. ;.org PAT2                                      ;ping pong
  507. ;.dw 0b0000010000
  508. ;.dw 0b0000100000
  509. ;.dw 0b0000001000
  510. ;.dw 0b0001000000
  511. ;.dw 0b0000000100
  512. ;.dw 0b0010000000
  513. ;.dw 0b0000000010
  514. ;.dw 0b0100000000
  515. ;.dw 0b1000000001
  516.  
  517. ;.org PAT3                                      ;ping pong
  518. ;.dw 0b0000011000
  519. ;.dw 0b0000100100
  520. ;.dw 0b0001000010
  521. ;.dw 0b1010000001
  522.  
  523. ;.org PAT4                                      ;pfeil
  524. ;.dw 0b0000011000
  525. ;.dw 0b0000111100
  526. ;.dw 0b0001111110
  527. ;.dw 0b0011111111
  528. ;.dw 0b0011100111
  529. ;.dw 0b0011000011
  530. ;.dw 0b1010000001
  531.  
  532. ;.org PAT5                                      ;RGB
  533. ;.dw 0b0001001001
  534. ;.dw 0b0011011011
  535. ;.dw 0b0010010010
  536. ;.dw 0b0110110110
  537. ;.dw 0b0100100100
  538. ;.dw 0b1101101101
  539.  
  540. ;.org PAT6                                      ;RGB spread
  541. ;.dw 0b0100010001
  542. ;.dw 0b0101110011
  543. ;.dw 0b0001100010
  544. ;.dw 0b0011101110
  545. ;.dw 0b0010001100
  546. ;.dw 0b1110011101
  547.  
  548. ;.org PAT7
  549. ;.dw 0b0001001001                       ;RGB single change
  550. ;.dw 0b0001001011
  551. ;.dw 0b0001011011
  552. ;.dw 0b0011011011
  553. ;.dw 0b0011011010
  554. ;.dw 0b0011010010
  555. ;.dw 0b0010010010
  556. ;.dw 0b0010010110
  557. ;.dw 0b0010110110
  558. ;.dw 0b0110110110
  559. ;.dw 0b0110110100
  560. ;.dw 0b0110100100
  561. ;.dw 0b0100100100
  562. ;.dw 0b0100100101
  563. ;.dw 0b0100101101
  564. ;.dw 0b0101101101
  565. ;.dw 0b0101101001
  566. ;.dw 0b1101001001
  567.  
  568.  
  569. .org CHS_SPD
  570. .db 25, 10, 3, 2, 1, 2, 3, 5, 8, 12, 17, 22, 27, 35, 40, 48
(#) eudoxia007 hozzászólása Márc 1, 2018 /
 
Sziasztok! Azt szeretném kérdezni ki milyen írott irodalmat ajánl az assembly nyelv tanulására teljesen az alapoktól. Nekem jelenleg Rodek Lajos és Diós Gábor által írt kb 120 oldalas Assembly programozás témájú könyv áll rendelkezésre, azért kérdem mielőtt belemélyednék hogy van-e esetleg jobb ennél az írásnál.
(#) proba válasza eudoxia007 hozzászólására (») Márc 1, 2018 / 1
 
Az általános részből csak maga az elv érthető meg, számábrázolás, processzor felépítése, működése, memória használat, címzés. Processzor témakörben szerintem Madarász Lászlónak is voltak jó jegyzetei a GANF-on. Igaz nagyon régen de az ő könyvei/jegyzetein keresztül értettem meg a processzorok lelki világát. Ha meg akarod tanulni akkor szinte biztos, hogy leglátványosabb egy mikrovezérlőt választani hozzá. PC-n is lehet, de ott szerintem már kevés látványos sikerrel kecsegtet eleinte, és gondolom az újabb processzorok már elég bonyolultak kezdőként.
Következő: »»   1 / 2
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem