Здравствуйте дорогие форумчане! Меня интересуют следующие ворпросы по BASCOM-AVR: 6. Можно-ли в BASCOM сделать подключение AVR c PC по USB (без преобразователей)
Спасибо Dimon-790 и Секретному коту за ответ. Я как раз имел в виду вариант Секретного кота, чтобы обращаться к портам, как к переменным. Жаль, что так сделать нельзя, придется городить CASE-ми и IF-ами...
Всем привет, требуется помощь в коде bascom'a, mega8 такт 4 мега требуется создать три таймера с временными интервалами 10, 30 и 3 минут(ы) соответственно, запуск которых производится последовательно после отработки каждого, но запуск первого возможен только при получении высокого уровны по входу INT0
Знатоки BASCOM! Просмотрите, пожалуйста, мой ПЕРВЫЙ В ЖИЗНИ код на микроконтроллер (ATTINY2313) и укажите на принципиальные ошибки. Проект банальный: часы. Порт В - на сегменты индикатора, порт d - на включения общего на индикаторе (через КТ315) и опрос 2-х кнопок. С настройками таймера не заморачивался, хотел просто понять логику работы...
Код:
$regfile = "AtTiny2313.dat" $crystal = 1000000 Config Timer0 = Timer , Prescale = 1 Declare Sub My_led Dim H As Byte , M As Byte , S As Byte Dim T(4) As Byte Dim Ncount As Word Dim Q As Byte Dim Tmp As Byte
'************ Do Debounce Pind.0 , 0 , H_ed , Sub Debounce Pind.1 , 0 , M_ed , Sub T(1) = H \ 10 T(2) = H Mod 10 T(3) = M \ 10 T(4) = M Mod 10 Call My_led Loop End 'end program
'************************ Sub My_led
For Q = 1 To 4 Select Case T(q) Case 1 : Portb = &B11111001 Case 2 : Portb = &B10100100 Case 3 : Portb = &B10110000 Case 4 : Portb = &B10011001 Case 5 : Portb = &B10010010 Case 6 : Portb = &B10000010 Case 7 : Portb = &B11111000 Case 8 : Portb = &B10000000 Case 9 : Portb = &B10010000 Case 0 : Portb = &B11000000 End Select
Select Case Q Case 1 : If T(1) <> 0 Then Set Portd.2 Waitms 10 Reset Portd.2 End If
Case 2 : Tmp = S Mod 2 If Tmp = 0 Then Portb.7 = 0 Set Portd.3 Waitms 10 Reset Portd.3
Case 3 : Set Portd.4 Waitms 10 Reset Portd.4
Case 4 : Set Portd.5 Waitms 10 Reset Portd.5 End Select
Next Q End Sub '************************ Pulse: Ncount = Ncount + 1 If Ncount => 31250 Then Ncount = 0 S = S + 1 End If
If S > 59 Then S = 0 M = M + 1 End If
If M > 59 Then M = 0 H = H + 1 If H > 23 Then H = 0 End If
Return '************************ H_ed: Waitms 100 H = H + 1 If H > 23 Then H = 0 Return '************************ M_ed: Waitms 100 M = M + 1 If M > 59 Then M = 0 Return
Последний раз редактировалось dhouse Вт апр 20, 2010 13:56:02, всего редактировалось 1 раз.
Спасибо за ссылку. Но хочется написать самому, а не передрать чужое. Простые часы - неплохой проект для начала освоения МК (мигалки слишком просто). Если выйдет, попробую сделать простейший велоспидометр. Кстати, попутно вопрос знатокам: если на пин порта цепляется не кнопка, а питание +5 через геркон (подсчет замыканий) то: 1. Нужно установить на пине логический 0? 2. Подсчитывать количество появлений логической единицы за определенный интервал времени? 3. Пересчитать в скорость?
Да, это супер просто, НО, если не ошибаюсь при данном типе отсчета, все остальные действия по обработке будут выполняться только после окончания отсчета...
ВНН писал(а):
Если делать тупо то Обработка int Запретить прерывание for i=0 to 10 wait 60 next i чото делаеш ... разрешить прерывание
Но лучше все делать по таймеру
Тупо конечно тоже хорошо, но все-же большое желание сделать по таймеру, а то мало-ли...
Вопрос по оператору $crystal в BASCOM. Написал свою программу часов для Attiny2313 без кварца. Во фьюзах отключил деление частоты на 8 (внутренняя частота вышла 8 MGz). Переполнение таймера выставил именно на эту частоту. Но если в программе ставлю $crystal=8000000, то при динамической индикации четко заметно мигание индикаторов. При установке меньшей величины, вплоть до $crystal=1000000 мигание совершенно не заметно. При этом на ход часов этот параметр не повлиял. Так что же делает оператор $crystal?
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения