Ik ben bezig om twee PICs met een soortement van I2C aan elkaar te knopen -- allemaal in assembly gebit-bangd.
Ik krijg serieel acht bits binnen, en die wil ik op volgorde in een enkele byte zetten. Ik kan wel een tellertje bijhouden, maar ik kan de inhoud van zo'n register niet gebruiken voor een BSF of BCF instructie als bit-index.

Ik heb me suf gezocht, en misschien is het gewoon helemaal niet mogelijk -- maar heeft iemand toevallig een macro oid liggen die dit makkelijk maakt? Een subroutine schrijven die telkens een decfsz van de teller doet kan ik wel bedenken, maar mooi of elegant is het niet.

Er zijn vast meer mensen die hier mee te maken hebben gehad, en wellicht dat iemand er een mooie oplossing voor heeft.

Hoi Fub,

in een PIC gebruik je voor dit soort dingen het roteren van een byte: RLF en RRF.

Deze instructies roteren een bit waarbij het carry bit (STATUS, C) wordt meegenomen als 9de bit. Het bitje dat je binnenkrijgt zet je in de carry, je roteert en dat herhaal je 8 keer.

Als je wilt kun je rondom de RLF of RRF instructie wel een macro schrijven dat volledig indirecte bit addressering implementeert, maar dat is minder efficient dan zo´n byte gewoon geheel naar binnen schuiven.

Groeten,
Frans

p.s. Dit geldt voor PIC 16f... De grotere PICs hebben wat meer verschillende rotate instructies, ook zonder carry. Dan moet je even kijken dat je de goede hebt. Maar aangezien je I2C in software implementeert neem ik aan dat het een kleintje is.

[Bericht gewijzigd door Frans77 op ]

Op 9 oktober 2006 21:58:34 schreef Frans77:in een PIC gebruik je voor dit soort dingen het roteren van een byte: RLF en RRF.

Juist. Ik wist dat er een slimmere manier was om dit te doen. Dankjewel!

En inderdaad, het zijn twee 16F628As. Als het allemaal werkt gaat de slave vervangen worden door de iets goedkopere 16F630.