Сб июн 17, 2017 15:38:01
Сб июн 17, 2017 17:10:04
Сб июн 17, 2017 17:18:18
$Regfile="attiny85.dat"
$Crystal=8000000
$hwstack=40
$swstack=16
$framesize=32
Config Portb.0 = Output 'R
config portb.1 = output 'G
config portb.4 = output 'B
Config PORTB.3 = output 'фонарик
Config PINB.2 = input 'кнопка
Config Int0 = Falling : On INT0 Button
Config Timer1 = Timer , Prescale = 1 : On Timer1 Pwm_prog : Enable Timer1 : Enable Interrupts : start timer1 : Enable Int0
Dim S As Byte , A as Byte , C(3) as byte , B as Byte , R as Byte
for A=0 to 63
C(1)=lookup(A , TAB_PWM)
waitms 20
next
Do
If R=0 then
PORTB.3 = 0
for A=0 to 63 'тут ШИМ, режим 1 (по умолчанию)
if R=0 then
C(2)=lookup(A , TAB_PWM)
waitms 20
else
goto 1
end if
next
for A=63 to 0 step -1 'óìåíüøàåì êðàñíûé
if R= 0 then
C(1)=lookup(A , TAB_PWM)
waitms 20
else
goto 1
end if
next
waitms 100
for A=0 to 63 'óâåëè÷èâàåì ñèíèé
if R=0 then
C(3)=lookup(A , TAB_PWM)
waitms 20
else
goto 1
end if
next
for A=63 to 0 step -1 'óìåíüøàåì çåëåíûé
if R=0 then
C(2)=lookup(A , TAB_PWM)
waitms 20
else
goto 1
end if
next
waitms 100
for A=0 to 63 'óâåëè÷èâàåì êðàñíûé
if R=0 then
C(1)=lookup(A , TAB_PWM)
waitms 20
else
goto 1
end if
next
for A=63 to 0 step -1 'óìåíüøàåì ñèíèé
if R=0 then
C(3)=lookup(A , TAB_PWM)
waitms 20
else
goto 1
end if
next
waitms 200
end if
1:
If R=1 Then
C(1) = 0 : C(2) = 0 : C(3) = 0 : PORTB.3 = 1 'тут фонарик (режим2)
End if
loop
end
Pwm_prog:
Incr S
if S=255 then S=0
If S<C(1) Then Set Portb.0 Else Reset Portb.0
If S<C(2) then Set Portb.1 Else Reset Portb.1
If S<C(3) then Set Portb.4 Else Reset Portb.4
Return
Button:
Incr R
waitms 75 'потому что кнопка плохая, вот и 75
if R>1 then R = 0
GIFR = 64
Return
TAB_PWM:
Data 0 , 0 , 0 , 0 , 1 , 2 , 3 , 3 , 5 , 6 , 7 , 8 , 10 , 12 , 14 , 15
Data 17 , 20 , 22 , 24 , 27 , 30 , 32 , 35 , 38 , 42 , 45 , 48 , 52 , 56 , 59 , 63
Data 67 , 71 , 76 , 80 , 85 , 89 , 94 , 99 , 104 , 109 , 115 , 120 , 126 , 131 , 137 , 143
Data 149 , 155 , 161 , 168 , 174 , 181 , 188 , 195 , 202 , 209 , 216 , 224 , 231 , 239 , 247 , 255
Вс июн 18, 2017 11:51:06
'объявление функций
DECLARE SUB фонарик
DECLARE SUB ШИМ
'здесь основная программа
do
select case B
case 0: call ШИМ
case 1: call фонарик
end select
loop
end
'здесь обработчик прерывания от кнопки
button:
Incr B
[s]waitms 10[/s] ' в обработчике прерываний нежелательно и вредно делать какие либо задержки
if B>2 then B = 0
return
Вс июн 18, 2017 12:15:46
Вс июн 18, 2017 12:34:17
IDok писал(а):задержка в прерывании - это антидребезг.
Вс июн 18, 2017 12:55:47
Пн июн 19, 2017 07:41:55
Пн июн 19, 2017 08:16:32
IDok писал(а):но я его не вижу
while условие
wend
return
Пн июн 19, 2017 08:31:28
Вс июн 25, 2017 00:22:27
Вс июл 02, 2017 11:22:13
Вс июл 02, 2017 11:52:17
Вс июл 02, 2017 12:02:37
Вс июл 02, 2017 12:23:47
Чт июл 06, 2017 19:43:29
Чт июл 06, 2017 20:04:31
Чт июл 06, 2017 20:05:46
Чт июл 06, 2017 20:18:50
Чт июл 06, 2017 20:25:00