Gefunden für adiw - Zum Elektronik Forum |
| 1 - AVR-Assemblercode von Atmega88 auf -8 umstricken -- AVR-Assemblercode von Atmega88 auf -8 umstricken | |||
| |||
| 2 - Platinen für Selbstbau-Projekte -- Platinen für Selbstbau-Projekte | |||
| Hier die Assemblerfile und Schaltbild, sowie HEX.
Code : .nolist .include"tn26def.inc" .list .def ar0 = r16 init: ldi ar0, RAMEND out SP, ar0 ldi ar0, 0xFF out DDRA, ar0 ldi ar0, 0x00 out DDRB, ar0 ldi ar0, 0xAA out PORTA, ar0 loop: ldi zh, high(AMPEL*2) ldi zl, low(AMPEL*2) in ar0, PINB cpi ar0, 0b00000000 breq ledout ldi zh, high(PAUSE*2) ldi zl, low(PAUSE*2) cpi ar0, 0b00000001 b... | |||
3 - Rechteckgenerator mit ATmega8 \"verschluckt sich\" -- Rechteckgenerator mit ATmega8 \verschluckt sich\ | |||
|
Zitat : Das ist nicht grade resourcenschonend Scheint zu stimmen.
Hab mal das Hex-File durch den Disassembler gejagt, raus kommt eine ganze Menge Code... Zitat : Evtl. schaltet der Basic-Compiler für solche Teile, in der eben mit viel Aufwand gerechnet wird, die Interrupts global ab (cli). +00000092: 94F8 CLI Global Interrupt Disable Ob das jetzt der Fehler ist weiss ich nicht, dazu müsste man den Code mal genauer betrachten.
| |||
| 4 - delay mit C bei AVR-Programmierung -- delay mit C bei AVR-Programmierung | |||
| Der Compiler erzeugt mir aus dem Teil
for(i=0; i<=100; i++) {} das hier: +0000006D: 91800100 LDS R24,0x0100 Load direct from data space +0000006F: 91900101 LDS R25,0x0101 Load direct from data space +00000071: 3685 CPI R24,0x65 Compare with immediate +00000072: 0591 CPC R25,R1 Compare with carry +00000073: F450 BRCC PC+0x0B Branch if carry cleared +00000074: 91800100 LDS R24,0x0100 Load direct from data space +00000076: 91900101 LDS R25,0x0101 Load direct from data space +00000078: 9601 ADIW R24,0x01 Add immediate to word +00000079: 93900101 STS 0x0101,R25 Store direct to data space +0000007B: 93800100 STS 0x0100,R24 Store direct to data space +0000007D: CFEF RJMP PC-0x0010 Relative jump Du kannst also jetzt, wenn du Lust dazu hast genau rausfinden, wie lange die CPU diesen Teil wiederholt. Dann kannst du die Formel oben auch hier anwenden, um deine Variable i mit dem richtigen Wert zu laden.
PS: Sry, ich bin grad etwas neben mir, meine Formulierunge... | |||
| 5 - Mein Lauflicht :) -- Mein Lauflicht :) | |||
start: ldi r17, 12 ldi r16, 0 .def lpm_reg = r0 Matrix: .db 0b10000001 .db 0b01000010 .db 0b00100100 .db 0b00011000 .db 0b00100100 .db 0b01000010 .db 0b10000001 ldi r16, 0xFF ; Port B auf out DDRB, r16 ; Ausgang setzen ldi ZH,high(2*Matrix) ldi ZL,low(2*Matrix) weiter: lpm out PORTB, r0 ; auf Port ausgeben adiw ZL,1 inc r16 cp r16,r17 brne weiter ldi ZH,high(2*Matrix) ldi ZL,low(2*Matrix) ldi r16,0 rjmp weiter ; dann zum Hauptprogramm zurückspringen ... | |||
| 6 - welcher Atmel für Torzähler? -- welcher Atmel für Torzähler? | |||
| ok so einfach ist das drucken an sich wohl doch nicht...
was fehlt diesem Code noch, damit der drucker druckt? weil bisher macht er genau nix Code : .include "4433def.inc" .def temp = R16 ldi R16, RAMEND out SPL, R16 ; Stackpointer initialisieren sbi UCSRB,TXEN ; UART TX aktivieren ldi temp,4000000/(9600*16)-1 ; Baudrate 9600 einstellen out UBRR,temp start: ldi ZL, LOW(text*2) ; Adresse des ... | |||
| 7 - ATmega8515 und Watchdog -- ATmega8515 und Watchdog | |||
| Ich habe eben noch einmal den Beispielcode von AVR-Beginners angepasst und ausprobiert.
..dasselbe Problem... (die LED bleibt an, anstatt zu blinken) Code : .include "C:\Programme\Atmel\AVR Tools\AvrAssembler\Appnotes\m8515def.inc" .org 0x0000 rjmp reset reset: ldi r16, low(RAMEND) out SPL, r16 ldi r16, high (RAMEND) out SPH, r16 sbi DDRE, 1 ldi r16, 0b00001110 out WDTCR, r16 rcall delay_05 sbi PortE, 1 loop: rjmp loop delay_05: ldi r16, 8 ... | |||
| 8 - Timer im Atmel - wie benutzen? -- Timer im Atmel - wie benutzen? | |||
|
.include m8def.inc ;Pfad zur Include-Datei ggf. anpassen .def temp = r16 ;braucht man immer .org 0000 rjmp reset ;RESET RETI ; External Interrupt0 Vector Address RETI ; External Interrupt1 Vector Address RETI ; Output Compare2 Interrupt Vector Address RETI ; Overflow2 Interrupt Vector Address RETI ; Input Capture1 Interrupt Vector Address RETI ; Output Compare1A Interrupt Vector Address RETI ; Output Compare1B Interrupt Vector Address rjmp check ; Overflow1 Interrupt Vector Address RETI ; Overflow0 Interrupt Vector Address RETI ; SPI Interrupt Vector Address RETI ; USART Receive Complete Interrupt Vector Address RETI ; USART Data Register Empty Interrupt Vector Address RETI ; USART Transmit Complete Interrupt Vector Address RETI ; ADC Interrupt Vector Address RETI ; EEPROM Interrupt Vector Address RETI ; Analog Comparator Interrupt Vector Address RETI ; Irq. vector address for Two-Wire Interface RETI ; SPM complete Interrupt Vector Address RETI ; SPM complete Interrupt Vector Address reset: ;Stackpointer initialisieren ldi temp,low(RAMEND) out SPL, temp ldi temp,high(RAMEND) out S... |
|
Zum Ersatzteileshop Bezeichnungen von Produkten, Abbildungen und Logos , die in diesem Forum oder im Shop verwendet werden, sind Eigentum des entsprechenden Herstellers oder Besitzers. Diese dienen lediglich zur Identifikation! gerechnet auf die letzten 30 Tage haben wir 7 Beiträge im Durchschnitt pro Tag heute wurden bisher 0 Beiträge verfasst 26 Besucher in den letzten 60 Sekunden alle 2.31 Sekunden ein neuer Besucher ---- logout ----su ---- logout ---- |