Задание№1-4 — различия между версиями
EdGull (обсуждение | вклад) |
EdGull (обсуждение | вклад) |
||
Строка 59: | Строка 59: | ||
End If | End If | ||
Command = 255 | Command = 255 | ||
+ | </source> | ||
+ | 3. В итоге должен получиться вот такой код | ||
+ | <source lang="vb"> | ||
+ | $prog &HFF , &HE4 , &HD9 , &H00 'указываем какие фусибиты надо прошить | ||
+ | $regfile = "m32def.dat" ' файл спецификации Меги32 | ||
+ | $crystal = 8000000 ' указываем на какой частоте будем работать | ||
+ | $baud = 2400 | ||
+ | |||
+ | '---------------------------------------------------------------------------- | ||
+ | Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down | ||
+ | Config Pinc.2 = Output : Drl Alias Portc.2 'ногу сконфигурировали как выход и обозвали Drl | ||
+ | Config Pinc.3 = Output : Drr Alias Portc.3 'ногу сконфигурировали как выход и обозвали Drr | ||
+ | Config Pind.4 = Output 'ногу ШИМа левого движка сконфигурировали как выход | ||
+ | Config Pind.5 = Output 'ногу ШИМа правого движка сконфигурировали как выход | ||
+ | '---------------------------------------------------------------------------- | ||
+ | |||
+ | Dim Speed As Byte | ||
+ | Speed = 70 | ||
+ | |||
+ | Config Rc5 = Pind.2 | ||
+ | Enable Interrupts | ||
+ | Dim Address As Byte , Command As Byte | ||
+ | |||
+ | Print "Start MiniBot" | ||
+ | |||
+ | Do | ||
+ | Gosub Прием_rc5 | ||
+ | If Command = 255 Then | ||
+ | Gosub Стоп | ||
+ | Elseif Command = 32 Then | ||
+ | Gosub Прямо | ||
+ | Waitms 100 | ||
+ | Elseif Command = 33 Then | ||
+ | Gosub Назад | ||
+ | Waitms 100 | ||
+ | Elseif Command = 17 Then | ||
+ | Gosub Влево | ||
+ | Waitms 100 | ||
+ | Elseif Command = 16 Then | ||
+ | Gosub Вправо | ||
+ | Waitms 100 | ||
+ | End If | ||
+ | Command = 255 | ||
+ | Loop | ||
+ | |||
+ | Прием_rc5: | ||
+ | Getrc5(address , Command) | ||
+ | If Address <> 255 And Command <> 255 Then | ||
+ | Command = Command And &B01111111 | ||
+ | 'Print Chr(12); | ||
+ | 'Print "Address - " ; Address | ||
+ | 'Print "Command - " ; Command; | ||
+ | End If | ||
+ | Return | ||
+ | |||
+ | Влево: | ||
+ | Gosub Стоп : Waitms 10 | ||
+ | Drl = 1 : Drr = 0 : Pwm1b = Speed : Pwm1a = Speed: | ||
+ | Return | ||
+ | |||
+ | Вправо: | ||
+ | Gosub Стоп : Waitms 10 | ||
+ | Drl = 0 : Drr = 1 : Pwm1b = Speed : Pwm1a = Speed: | ||
+ | Return | ||
+ | |||
+ | Прямо: | ||
+ | Gosub Стоп : Waitms 10 | ||
+ | Drl = 0 : Drr = 0 : Pwm1b = Speed : Pwm1a = Speed: | ||
+ | Return | ||
+ | |||
+ | Назад: | ||
+ | Gosub Стоп : Waitms 10 | ||
+ | Drl = 1 : Drr = 1 : Pwm1b = Speed : Pwm1a = Speed: | ||
+ | Return | ||
+ | |||
+ | Стоп: | ||
+ | Drl = 0 : Drr = 0 : Pwm1b = 0 : Pwm1a = 0: | ||
+ | Return | ||
</source> | </source> |
Версия 15:24, 6 апреля 2008
-=Собираем все части кода в кучу=-
Собственно теперь отсалось только собрать всё в кучу. И оформить рюшечки чтоб эстеты не бурчали... :-)
1. Оформляем команды МиниБоту отдельными красявашными процедурами <source lang="vb"> Прием_rc5:
Getrc5(address , Command) If Address <> 255 And Command <> 255 Then Command = Command And &B01111111 'Print Chr(12); 'Print "Address - " ; Address 'Print "Command - " ; Command; End If
Return
Влево:
Gosub Стоп : Waitms 10 Drl = 1 : Drr = 0 : Pwm1b = Speed : Pwm1a = Speed:
Return
Вправо:
Gosub Стоп : Waitms 10 Drl = 0 : Drr = 1 : Pwm1b = Speed : Pwm1a = Speed:
Return
Прямо:
Gosub Стоп : Waitms 10 Drl = 0 : Drr = 0 : Pwm1b = Speed : Pwm1a = Speed:
Return
Назад:
Gosub Стоп : Waitms 10 Drl = 1 : Drr = 1 : Pwm1b = Speed : Pwm1a = Speed:
Return
Стоп:
Drl = 0 : Drr = 0 : Pwm1b = 0 : Pwm1a = 0:
Return </source> 2. Теперь опишем что нужно делать МиниБоту когда пришла та или иная комманда <source lang="vb">
Gosub Прием_rc5 If Command = 255 Then Gosub Стоп Elseif Command = 32 Then Gosub Прямо Waitms 100 Elseif Command = 33 Then Gosub Назад Waitms 100 Elseif Command = 17 Then Gosub Влево Waitms 100 Elseif Command = 16 Then Gosub Вправо Waitms 100 End If Command = 255
</source> 3. В итоге должен получиться вот такой код <source lang="vb"> $prog &HFF , &HE4 , &HD9 , &H00 'указываем какие фусибиты надо прошить $regfile = "m32def.dat" ' файл спецификации Меги32 $crystal = 8000000 ' указываем на какой частоте будем работать $baud = 2400
'---------------------------------------------------------------------------- Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down Config Pinc.2 = Output : Drl Alias Portc.2 'ногу сконфигурировали как выход и обозвали Drl Config Pinc.3 = Output : Drr Alias Portc.3 'ногу сконфигурировали как выход и обозвали Drr Config Pind.4 = Output 'ногу ШИМа левого движка сконфигурировали как выход Config Pind.5 = Output 'ногу ШИМа правого движка сконфигурировали как выход '----------------------------------------------------------------------------
Dim Speed As Byte Speed = 70
Config Rc5 = Pind.2 Enable Interrupts Dim Address As Byte , Command As Byte
Print "Start MiniBot"
Do
Gosub Прием_rc5 If Command = 255 Then Gosub Стоп Elseif Command = 32 Then Gosub Прямо Waitms 100 Elseif Command = 33 Then Gosub Назад Waitms 100 Elseif Command = 17 Then Gosub Влево Waitms 100 Elseif Command = 16 Then Gosub Вправо Waitms 100 End If Command = 255
Loop
Прием_rc5:
Getrc5(address , Command) If Address <> 255 And Command <> 255 Then Command = Command And &B01111111 'Print Chr(12); 'Print "Address - " ; Address 'Print "Command - " ; Command; End If
Return
Влево:
Gosub Стоп : Waitms 10 Drl = 1 : Drr = 0 : Pwm1b = Speed : Pwm1a = Speed:
Return
Вправо:
Gosub Стоп : Waitms 10 Drl = 0 : Drr = 1 : Pwm1b = Speed : Pwm1a = Speed:
Return
Прямо:
Gosub Стоп : Waitms 10 Drl = 0 : Drr = 0 : Pwm1b = Speed : Pwm1a = Speed:
Return
Назад:
Gosub Стоп : Waitms 10 Drl = 1 : Drr = 1 : Pwm1b = Speed : Pwm1a = Speed:
Return
Стоп:
Drl = 0 : Drr = 0 : Pwm1b = 0 : Pwm1a = 0:
Return </source>