Test Nuke
New Member
48 Posts |
Posted - 04-07-2006 : 16:47:28
|
;**************************************** ;*Naam :IO controller voor het * ;* Trein Controller systeem * ;* * ;*Auteur :Arjan Vuik * ;* * ;*Platform :Atmel AT90S2313 * ;* * ;*IDE :AVR Studio 4 * ;* * ;*Taal :Assembler * ;*======================================* ;*opm: * ;*Deze code heeft een klok van minimaal * ;*10Mhz nodig om de 1Mb/s te halen. * ;*indien er een snellere kloksnelheid * ;*word gebruikt dan is het het slimst om* ;*meerdere nop commando's toe te voegen * ;*aan het begin en aan het eind van * ;*iedere communicatie cyclus, dit om de * ;*Communicatie synchroon te houden * ;****************************************
.device AT90S2313 .include "2313def.inc"
;definities .def id =r1 ;chip id .def wreg =r16 .def temp =r17 .def nibble1 =r19 .def nibble2 =r20 .def nibble3 =r21 .def teller =r22
;equals .equ COMM =pd0
.cseg .org 0x00 rjmp main
;main programma main: rcall init
loop: sbis PORTD,COMM ;wachten op een init bit rjmp comminit ;is ie er? Haal nibbles binnen rjmp loop ;is ie er niet? Ga verder met wachten.
comminit: ;Routine voor het wachten tot de init bit down wordt. sbic PORTD,COMM rjmp comminit
cnibble1: ;het binnen halen van de eerste nibble nop ;1Cl dec teller ;1Cl
sbr nibble1, 0 ;Maak bit 0 van nibble1 hoog sbis PORTD,COMM ;Sla volgende commando over als comm poort hoog is cbr nibble1, 0 ;Maak bit 0 van nibble 1 laag ;5Cl rol nibble1 ;1Cl
brne cnibble1 ;1/2Cl ldi teller, 7 ;1Cl: Als de BRNE niet springt word het met deze toch 10Cl
cnibble2: ;het binnen halen van het tweede nibble nop dec teller
sbr nibble2, 0 sbis PORTD,COMM cbr nibble2, 0
rol nibble2
brne cnibble2 ldi teller, 7
cnibble3: ;het binnen halen van het derde nibble nop dec teller
sbr nibble3, 0 sbis PORTD,COMM cbr nibble3, 0
rol nibble3
brne cnibble3 ldi teller, 7
cpse nibble1, id ;is het mijn id? rjmp loop ;nee? ga (terug) naar de main loop
Verw: out PORTB, nibble2
in nibble3, PORTD
ldi nibble1, 1
ldi wreg, 0b00000001 ;communicatie poort op output zetten out DDRD, wreg
sbi PORTD,COMM ;COMM init versturen nop nop nop nop nop ldi teller,8 cbi PORTD,COMM
cnibble01: ;het wegsturen van de eerste nibble cbi PORTD,COMM ;Maak COMM poort laag sbrc nibble1,7 ;Sla volgende commando over als bit 7 van nibble1 hoog is sbi PORTD,COMM ;Maak COMM poort hoog ;5Cl rol nibble1 ;1Cl nop ;1Cl dec teller ;1Cl brne cnibble01 ;1/2Cl ldi teller,8 ;1Cl: Als de BRNE niet springt word het met deze toch 10Cl
cnibble02: ;het wegsturen van het tweede nibble cbi PORTD,COMM sbrc nibble2,7 sbi PORTD,COMM
rol nibble2 nop dec teller brne cnibble02 ldi teller, 8
cnibble03: ;het wegsturen van het derde nibble cbi PORTD,COMM sbrc nibble3,7 sbi PORTD,COMM
rol nibble3 nop dec teller brne cnibble03 ldi teller, 8
ldi wreg, 0 ;de communicatie poort weer op input zetten. out DDRD, wreg
rjmp loop ;klaar, dus we gaan (terug) naar de luister loop
init: ldi wreg, 255 ;B poort is output out DDRB, wreg ldi wreg, 0 ;D poort is input out DDRD, wreg
ldi wreg, 7 ;ID's 7 tot 17 zijn voor IO controllers mov id, wreg
projectje van me stond ge CTRL+C -ed omdat ik deze code ga vebouwen voor een ander projectje. |
Drome 9 seat:Wee'k niet meer Drome 10 seat:0539 Drome 11 seat:0588 Drome 12 seat:0356 Drome 13 seat:1009
quote: Originally posted by Drome 4 Ontvangen betalingen, +/- 5,99 persons
LOL
|
Edited by - Test Nuke on 04-07-2006 16:49:46 |
|
|