omdat ik het in m'n vorige topic in picbasic deed en nu in mikrobasic, hier ff een nieuw topic om verwarring te voorkomen.
ik heb nu de volgende code:
program interrupt_v2
dim pcwaarde as char[20]
dim teller as byte
' TMR0 = 255 - 60
sub procedure interrupt
teller = teller + 1 'teller steeds 1tje ophogen
if teller < pcwaarde then 'zolang de teller kleiner is dan de pcwaarde
portb.4 = 1 'doe de led aan
end if 'anders...
if teller >= pcwaarde then
portb.4 = 0 'doe de led uit
end if
INTCON = $A0 'interrupt flag weer klaarzetten voor de volgende keer
end sub
main:
TRISB = %11101111 '0 is output, 1 is input
option_reg = %00001000
INTCON = %10100000
''''''''''''Rs232''''''''''''''''''''''''
'Read text until the sequence "ok" is received, and send back what's been received:
pcwaarde = "0"
Usart_Init(9600)
while TRUE
if Usart_Data_Ready() = 1
then Usart_Read_Text(pcwaarde, "ok")
Usart_Write_Text(pcwaarde)
Delay_ms(1000) ' 1 seconde pause
end if
wend
''''''''''''''''''''''''''''''''''
end. ik kan nu via rs232 een waarde opgeven, en krijg die dan ook netjes terug in de terminal, de led werkt ook met pwm.
probleem: ik kan allerlei waardes sturen, maar de led blijft op 1 bepaalde stand dimmen, ipv feller of zwakker te gaan branden.
als ik goed kijk zie de led heel snel knipperen, dus interrupt is goed?
Danny
free_electron
Silicon Member
Professioneel ElectronenTemmer - siliconvalleygarage.com - De voltooid verleden tijd van 'halfgeleider' is 'zand' ... US 8,032,693 / US 7,714,746 / US 7,355,303 / US 7,098,557 / US 6,762,632 / EP 1804159 - Real programmers write Hex into ROM
en waar converteer je de pcwaarde tekststring naar een getal ?
ene getal vergelijken met een string komt niet goed.
dim pctext as char[20]
dim pcwaarde as byte
....
Usart_Read_Text(pctext, "ok")
pcwaarde= val(pctext)
enzovoort..
Videomodulator
AKA Naftebakje @Tweakers.net --- Zonder dwarsliggers geen spoor
Er zit (nog) geen library voor het omzetten van een string naar een getal in mikrobasic, hier staat er een voorbeeldje om een string naar een integer om te zetten.
Moet het maar naar byte zijn, kan je het heel simpel zelf schrijven (ik doe geen controle's of alles geldig is, dat kan je zelf eventueel toevoegen):
'ASCII-48 = cijfertje
getal = (tekst[2]-48)+((tekst[1]-48)*10)+((tekst[0]-48)*100)
end sub
Je moet dus de 3 karakters waarin je getal zit selecteren, zie daarvoor de help over de string library.
free_electron
Silicon Member
Professioneel ElectronenTemmer - siliconvalleygarage.com - De voltooid verleden tijd van 'halfgeleider' is 'zand' ... US 8,032,693 / US 7,714,746 / US 7,355,303 / US 7,098,557 / US 6,762,632 / EP 1804159 - Real programmers write Hex into ROM
dim i,j
i=0
j=0
while getal >47 and getal <58
i=i+1
j = j * 10
j = j+getal-48
wend
voila deze kan ene string omzetten naar getal het eerste niet cijfer stopt de conversie . et wel dit ding kan geen weg met comma getallen.
inderdaad mikrobasi heeft gene code om de conversie te doen. nogal stom ... das een van de basis dingen
bedankt! het werkt nu!
het stukje van videomodulator heb ik met een paar kleine aanpassingen in m'n programma gezet. en ik heb TMR0 = 255 - 60 ingesteld
op naar het (visualbasic?) programma!