mnov píše:
To jyrry: tak vyzkoušej ten bascom.
proc? Zatim mi to na moje blbinky staci ... :-)
treba servotester:
; 12F675
EEPROM 0,[$85] ; zero = 1,0 ms
eeprom 1,[$47] ; half = 1,5 ms
EEPROM 2,[$09] ; full = 2,0 ms
eeprom 14,[$10]; verze 1.0
EEPROM 32,[$B2] ; konstanta pro 20ms
EEPROM 33,[$FF]
define OSCCAL_1K 1
CMCON = 7
OPTION_REG = %01000010
TRISIO = %000011 ; GP4 a GP5 jako vstupy
WPU = %000010 ; pull-up odpory
INTCON = %11000000
PIE1 = 0
ADCON0 = %10000001
ANSEL = %00010001
tim20 var word
ms20 var byte
zero var byte
half var byte
full var byte
potak var word
plyn var byte
tlac var gpio.1
led var gpio.4
servo var gpio.5
mood var byte
prep var bit
READ 0, zero
READ 1, half
READ 2, full
READ 32, tim20.byte1 ; predvolba 20ms
READ 33, tim20.byte0
goto start
impuls: ; servoimpulz
if plyn > half - 1 and plyn < half + 1 then
led = 1
else
led = 0
endif
TMR0 = plyn
INTCON.2 = 0
servo = 1
repeat
until INTCON.2 = 1
servo = 0
return
ctipotak:
ADCON0.1 = 1
repeat
until ADCON0.1 =0
potak.byte1 = ADRESH
potak.byte0 = ADRESL
potak = potak / 8
plyn = full + potak.byte0
if plyn > zero then plyn = zero
return
settimer:
T1CON.0 = 0 ; zastaveni tmr1
PIR1.0 = 0 ; nulovani priznaku preruseni od tmr1
TMR1L = tim20.byte0 ; nastaveni registru tmr1
TMR1H = tim20.byte1
T1CON.0 = 1 ; rozbeh tmr1
return
mode:
repeat
until tlac
mood = mood + 1
if mood = 4 then mood = 0
return
horedole:
if prep and plyn < zero then plyn = plyn + 1
if not prep and plyn > full then plyn = plyn - 1
if plyn = zero then prep = 0
if plyn = full then prep = 1
return
on interrupt goto prerus
start:
led = 0
mood = 0
prep = 1
gosub settimer
PIE1.0 = 1 ; povoleni preruseni od tmr1
loop:
goto loop
end
disable ; obsluha preruseni
prerus:
gosub settimer
gosub impuls ; servoimpuls
if not tlac then gosub mode
if mood = 0 then gosub ctipotak
if mood = 1 then plyn = half
if mood = 2 and ms20.1 then gosub horedole
if mood = 3 then
gosub horedole
gosub horedole
endif
ms20 = ms20 + 1
if ms20 = 200 then ms20 = 0
resume
enable