pavel1979 писал(а):может в цикле считать число нажатий?после выхода из цикла делаем условия...
Тоже об этом подумываю. Ща заведу еще одну переменную. Посмотрим, что выйдет
pavel1979 писал(а):может в цикле считать число нажатий?после выхода из цикла делаем условия...
Код: Выделить всё
Do
'knopka
Debounce Pinb.4 , 0 , Fmh , Sub
If Click = 4 Then
Set Portb.0 'включаем
Wait 2
Reset Portb.0 'выключаем
Click = 0
End If
Loop
Fmh:
Label1:
Waitms 10
If Pinb.4 = 0 Then Goto Label1
For Count = 0 To 200
Waitms 10
If Pinb.4 = 0 Then
Incr Click
Goto Ext
End If
'End If
Next Count
Reset Portb.0
Ext:
Return
pavel1979 писал(а):а если так
Do
'knopka
IF Pinb.4=0 THEN GOSUB Fmh
If Click = 4 Then
Set Portb.0 'включаем
Wait 2
Reset Portb.0 'выключаем
Click = 0
End If
Loop
Fmh:
Click = 0
Label1:
Waitms 1
If Pinb.4 = 0 Then Goto Label1
For Count = 0 To 200
Waitms 10
If Pinb.4 = 0 Then
Label2:
Waitms 1
If Pinb.4 = 0 Then Goto Label2
Incr Click
END IF
Next Count
Return
pavel1979 писал(а):Давай весь исходник и протеус,покумекаю... интересно стало
pavel1979 писал(а):вот пробуй
Код: Выделить всё
$regfile = "attiny13.dat"
$crystal = 9600000
$hwstack = 0 ' default use 32 for the hardware stack
$swstack = 0 ' default use 10 for the SW stack
$framesize = 0
Config Portb.3 = Output 'выход для подключения ноги Trigger
Trigger Alias Portb.3
Trigger = 0
Config Portb.4 = Input 'вход для импульса Echo
Config Portb.0 = Output 'конфигурация для подключения светодиода
Led Alias Portb.0
Led = 0
Config Portb.1 = Output 'output control pin
Control Alias Portb.1
Control = 0
Config Portb.2 = Input 'вход для button
Dim A As Word , A2 As Word 'сюда копируется значение длины сигнала
Dim M As Word , Em As Eram Word
Dim I As Byte , T As Word , Tled As Byte
Const Toff = 750 '250=1min '500 'TIME to OFF
Const Tmax = 50000
Enable Interrupts 'enable global ints
Enable Pcint0 'we enable pcint0 as this has pcint0-pcint7
On Pcint0 Btn 'we jump to this label when one of the pins is changed
Pcmsk = &B00000100 'enable pcint2 (portb.2)
Config Watchdog = 1024 '8192 '2048
M = Em : T = Tmax : Tled = 0 : Control = 0 : Led = 0
Start Watchdog
Do
Reset Watchdog
Gosub Test
A2 = A
Waitms 100
Reset Watchdog
Gosub Test
Waitms 100
If A < M And A2 < M And A > 0 And A2 > 0 Then
T = 0 ': Led = 1
Else
Incr T ' : Led = 0
If T > Tmax Then T = Tmax
End If
If T < Toff Then
Control = 1
Else
Control = 0
End If
If T = 0 Then
If Tled < 9 Then : Led = 1 : Else : Led = 0 : End If ' on
Else
If T < Toff Then
If Tled < 5 Then : Led = 1 : Else : Led = 0 : End If ' last minute
Else
If Tled < 1 Then : Led = 1 : Else : Led = 0 : End If ' off
End If
End If
Incr Tled : If Tled > 10 Then Tled = 0
Loop
End
'----------
Btn:
For I = 1 To 50
Toggle Led : Waitms 200 : Reset Watchdog
Next
Gosub Test
'Gifr = 0
M = A : Shift M , Right , 3 : M = A -m : Em = M : T = Tmax
'Tled = 0 : Control = 0
Set Led ': Waitms 2000 : Reset Led : Waitms 1000
Do : Loop
Return
'----------
Test:
Trigger = 1 'даем импульс на ногу Portd.4 длительностью 15 мкс
Waitus 15
Trigger = 0
Waitus 10
Pulsein A , Pinb , 4 , 1 'ловим импульс высокого уровня
Return
'----------
Shershnyov писал(а):...
появилось препятствие реле замкнулось, и после выхода препятствия из зоны датчика, реле определенное время еще замкнуто. Необходимо реализовать задержку перед включением реле. То есть препятствие появилось прошло определенное время, реле замкнулось, препятствие вышло из зоны датчика, реле определенное время еще замкнуто.
...
Код: Выделить всё
Wait 1 'ждем 2 секунды Код: Выделить всё
Dim Delay_off as Byte 'объявили переменную
'=============== НАСТРОЙКА ТАЙМЕРА ===============
Config Timer0 = Timer , Prescale = 1024
On Timer0 Delay_timer ' таймер задержки
Enable Interrupts
Enable Timer0
Start Timer0
'1024/9600000 * 255 = 0,0272мкс * 1000 = 27,2мс
Do
...
...
If Delay_off >= 73 Then 'задержка2 сек.
'1 сек. = 1000мс / 27,2 = 36,7 тактов * 2 сек = 73
' т.е. при определенном условии будет увеличиватся переменная Delay_off
'и по достижении 73 включится светик
Led = 1 'включаем условный светик
waitms 300
Led = 0 'выключаем условный светик
Delay_off = 0 'обнуляем переменную
End If 'конец условия
Loop
'/// ---> Delay_timer
Delay_timer: 'метка
If ... Then 'тут наше условие
Incr Delay_off 'инкрементируем переменную задержки выключения
End If 'конец условия
If Delay_off = 75 Then Delay_off = 0 'чтобы счетчик не считал много и долго, обнуляем значение Delay_off
Return
Код: Выделить всё
$regfile = "attiny13.dat"
$crystal = 9600000
$hwstack = 0 ' default use 32 for the hardware stack
$swstack = 0 ' default use 10 for the SW stack
$framesize = 0
Config Portb.3 = Output 'выход для подключения ноги Trigger
Trigger Alias Portb.3
Trigger = 0
Config Portb.4 = Input 'вход для импульса Echo
Config Portb.0 = Output 'конфигурация для подключения светодиода
Led Alias Portb.0
Led = 0
Config Portb.1 = Output 'output control pin
Control Alias Portb.1
Control = 0
Config Portb.2 = Input 'вход для button
Dim A As Word , A2 As Word 'сюда копируется значение длины сигнала
Dim M As Word , Em As Eram Word
Dim I As Byte , T As Word , Tled As Byte
Const Toff = 50 '250=1min '500 'TIME to OFF
Const Tmax = 50000
Const Ton = 50
Enable Interrupts 'enable global ints
Enable Pcint0 'we enable pcint0 as this has pcint0-pcint7
On Pcint0 Btn 'we jump to this label when one of the pins is changed
Pcmsk = &B00000100 'enable pcint2 (portb.2)
Config Watchdog = 1024 '8192 '2048
M = Em : T = Tmax : Tled = 0 : Control = 0 : Led = 0
Start Watchdog
Do
Reset Watchdog
Gosub Test
A2 = A
Waitms 100
Reset Watchdog
Gosub Test
Waitms 100
If A < M And A2 < M And A > 0 And A2 > 0 Then
T = 0 ': Led = 1
Else
Incr T ' : Led = 0
If T > Tmax Then T = Tmax
End If
If T > Ton Then
Control = 0
Else
Control = 1
End If
If T < Toff Then
Control = 1
Else
Control = 0
End If
If T > 50 Then
If Tled < 9 Then : Led = 1 : Else : Led = 0 : End If ' on
Else
If T < Toff Then
If Tled < 5 Then : Led = 1 : Else : Led = 0 : End If ' last minute
Else
If Tled < 1 Then : Led = 1 : Else : Led = 0 : End If ' off
End If
End If
Incr Tled : If Tled > 10 Then Tled = 0
Loop
End
'----------
Btn:
For I = 1 To 50
Toggle Led : Waitms 200 : Reset Watchdog
Next
Gosub Test
'Gifr = 0
M = A : Shift M , Right , 3 : M = A -m : Em = M : T = Tmax
'Tled = 0 : Control = 0
Set Led ': Waitms 2000 : Reset Led : Waitms 1000
Do : Loop
Return
'----------
Test:
Trigger = 1 'даем импульс на ногу Portd.4 длительностью 15 мкс
Waitus 15
Trigger = 0
Waitus 10
Pulsein A , Pinb , 4 , 1 'ловим импульс высокого уровня
Return
Shershnyov писал(а):У меня получилось вот так, но этот код не могу откомпилировать т.к. Вылазит ошибка Error 344 Programm will overwrite bootloader Т.к. я новичек то и сам точно сказать не могу все ли верно я написал.Код: Выделить всё
$regfile = "attiny13.dat"
$crystal = 9600000
$hwstack = 0 ' default use 32 for the hardware stack
$swstack = 0 ' default use 10 for the SW stack
$framesize = 0
Код: Выделить всё
$regfile = "attiny13.dat" 'specify the used micro
$crystal = 9600000 'used crystal frequency
$hwstack = 32 'default use 32 for the hardware stack
$swstack = 8 'default use 8 for the SW stack
$framesize = 16 'default use 40 for the frame spaceСделайте такКод: Выделить всё
$regfile = "attiny13.dat" 'specify the used micro
$crystal = 9600000 'used crystal frequency
$hwstack = 32 'default use 32 for the hardware stack
$swstack = 8 'default use 8 for the SW stack
$framesize = 16 'default use 40 for the frame space
Shershnyov писал(а):Так две ошибки22 Out of SRAM space и 36 Assigmet error
Код: Выделить всё
on ovf1 label
dim rasr as bit
do
if razr =1 then
razr=0
portb = &b11111111
end if
if tim0 >TIMER1 then portb.0 =0 ' переменные tim0-tim7 задают ширину ШИМ, на выходах порта B от 0 до 7 соответственно
if tim1 >TIMER1 then portb.1 =0
........
if tim7 >TIMER1 then portb.7 = 0
loop
label:
timer1 = 10000 ' настроить по-вкусу, определяет частоту ШИМ
razr=1
return