Een poort (proton-picbasic) binair definiëren met een variabele

Beste lezers,

Momenteel breek ik mij het hoofd over het makkelijk definiëren van een hele poort in èèn keer.

Dat is op zich niet zo spannend, in picbasic gaat dat onder andere op de volgende manier ;

PORTB = %01101100

Maar nu komt de grap, ik wil met een decimaal getal de status van de poort ineens definieren.
Nu heb ik geprobeerd of de compiler dit slikt;

Getal in variabele stoppen, bijvoorbeeld;

duty = 120
PORTB = %duty

Achtergrond, ik laat een 16F887 een 16F628 een waarde doorgeven door poort-op-poort een binaire waarde uit te geven en weer in te lezen.

Voordeel is dat het totaal niet tijdkritisch is en geen protocol nodig is, bovendien heb ik toch "pinnen genoeg".

De variabele gaat van 1-140, binair ook zat ruimte dus om dit over een poort ineens te communiceren.

Ben benieuwd of iemand een creatief idee heeft om met zo weinig mogelijk code dit varkentje te wassen.

Aan de ontvangende zijde heb ik het decoderen al in orde, gewoon de poorten bij langs en de 1,2,4,8,16,32,64,128 (indien aanwezig) bij elkaar optellen.
Enige toevoeging is trouwens een "lees-startcommando" waarna de gevende poort een delay garandeert waarbinnen de waarde zonder wijziging kan worden ingelezen.

Arco

Special Member

code:


duty = 120
PORTB = %duty

Procent teken weglaten. Dat begrijpt de compiler niet erg... ;)

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Lucky Luke

Golden Member

Je bent de parallelle databus aan het heruitvinden...

En waarschijnlijk wordt het makkelijker met een kloklijntje erbij:

code:


dim tx as byte
tx = 123 #als test. Oh wacht, hoe gaan comments in Picbasic ook alweer? Hekjes?


PORTC.4 = LOW; // of een andere pin, maar dit is je klok
PORTB = tx
PORTC.4 = HIGH; // of een andere pin, maar dit is je klok

Ontvangstkant:

code:


dim rx as byte
dim prevclk as bit #of bool, of hoe het mag heten in Picbasic
prevclk = LOW;

if PORTC.4 =! prevclk then
rx = PORTB
prevclk = PORTC.4
end if

Zoiets? Mijn picbasic is wat roestig.

(Dat procentteken zal wel aangeven dat het ernavolgende als binair getal opgevat moet worden... In C zou het "rest na deling" zijn... en geef je binaire getallen als 0b10101010 (hex als 0xAB, en decimaal gewoon 123. Maar door het dus voor een variabele te zetten raakt de compiler in de war, want die zijn gewoon "een getal", waarbij je niet hoeft op te geven hoe het opgeslagen moet worden - of die chip intern nu binair, BCD, of hoe ook* werkt, doet er niet toe.)

*) Analoog, op luchtdruk, memristors, MLC-flash, pen-en-papier maar dan in het Chinees... Het blijft een getal.

Eluke.nl | De mens onderscheid zich van (andere) dieren door o.a. complexe gereedschappen en bouwwerken te maken. Mens zijn is nerd zijn. Blijf Maken. (Of wordt, bijvoorbeeld, cultuurhistoricus)

Dankjulliewel mannen!

Arco's tip is gelijk een schot in de roos, de compiler pikt het in elk geval, ik ga straks even testen.

Lucky luke, haha, klopt daar moest ik ook aan denken.
Bedankt voor jouw voorbeeld, daar ga ik ook nog even naar kijken want ziet er wel lekker compact uit.

EDIT; Ik heb het getest en kan bevestigen dat het werkt zoals bedoelt.

Nogmaals bedankt!

[Bericht gewijzigd door 240diesel op donderdag 14 maart 2019 22:46:28 (14%)