[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Модератор форума: RD3AVJ 
Форум » форумы » Общие вопросы по Bascom-AVR » Error 124
Error 124
301992Дата: Понедельник, 15.07.2013, 21:33 | Сообщение # 1
Группа: Проверенные
Сообщений: 47

Статус: Offline
Что означает Error: 124 Line : 0 LOOP Expected, in File:

 
301992Дата: Понедельник, 15.07.2013, 21:51 | Сообщение # 2
Группа: Проверенные
Сообщений: 47

Статус: Offline
Вопрос снят. Разобрался. 
Есть другой вопрос. Вот код.

Код
$regfile = "m48def.dat"
$crystal = 8000000
$hwstack = 40
$swstack = 16
$framesize = 32
'$sim
  'Sim:
'  $sim
'-------------------------------------------------------------------------------
'*******************************************************************************
'-------------------------------------------------------------------------------
   $lib "mcsbyte.lbx"
   '$lib "mcsbyteint.lib"

Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 , E = Portc.1 , Rs = Portc.0
Config Lcd = 16 * 2                    ' тип используемого дисплея

'-------------------------------------------------------------------------------

Const Колесо = 2

Pcmsk0 = &B00000111                    ' В данном случае выставлено:  разрешить PCINT0, PCINT1, PCINT2
Eicra = &B00000011                    ' В данном случае выставлено:  INT1=Falling, INT0=Rising

'-------------------------------------------------------------------------------
On Int0 Обработка_прерывания_int0 Nosave                    ' Подпрограмма обработки прерывания INT0
'On Int1 Обработка_прерывания_int1 Nosave                    ' Подпрограмма обработки прерывания INT1
On Pcint0 Обработка_прерывания_pcint0                       ' Nosave       ' Подпрограмма обработки прерывания PCINT0
'-------------------------------------------------------------------------------
Config Pind.2 = Input : Set Pind.2                          ' Настройка вывода МК на вход с подтяжкой к плюсовой шине питания, для прерывания INT0
Config Pind.3 = Input : Set Pind.3                          ' Настройка вывода МК на вход с подтяжкой к плюсовой шине питания, для прерывания INT1
Config Pinb.0 = Input : Set Pinb.0                          ' Настройка вывода МК на вход с подтяжкой к плюсовой шине питания, для прерывания PCINT0
Config Pinb.1 = Input : Set Pinb.1                          ' Настройка вывода МК на вход с подтяжкой к плюсовой шине питания, для прерывания PCINT1
Config Pinb.2 = Input : Set Pinb.2                          ' Настройка вывода МК на вход с подтяжкой к плюсовой шине питания, для прерывания PCINT2
'-------------------------------------------------------------------------------
'*******************************************************************************
'-------------------------------------------------------------------------------
'------------------------     Заводим переменные     ---------------------------
'-------------------------------------------------------------------------------
Dim Кнопка As Byte
Dim Флаг_есть_прерывание_int0 As Byte

Dim Флаг_есть_прерывание_pinb_0 As Byte
Dim Флаг_есть_прерывание_pinb_1 As Byte
Dim Флаг_есть_прерывание_pinb_2 As Byte
'-------------------------------------------------------------------------------
'*******************************************************************************
'-------------------------------------------------------------------------------
'-------------------     Локально разрешаем прерывания     ---------------------
'-------------------------------------------------------------------------------
Enable Int0                    ' Разрешаем прерывание INT0
'-------------------------------------------------------------------------------
Enable Pcint0                    ' Разрешаем прерывание на PORTB.0 - PORTB.7
    'Или так
   'Pcicr = &B00000001                    ' Разрешаем прерывание на PORTB.0 - PORTB.7
'-------------------------------------------------------------------------------
'-------------------     Глобально разрешаем прерывания     ---------------------
'-------------------------------------------------------------------------------
Enable Interrupts
      'Или так
      'Sreg.7 = 1
      'Или так
      'SEI
'-------------------------------------------------------------------------------
'*******************************************************************************

Dim Temptotal As Byte
Dim Total As Long
Dim Итого As Long
Dim Скорость As Word
'Dim Flag As Bit
Dim Contdata As Eram Long

Enable Timer2
Config Timer2 = Timer , Prescale = 64
On Timer2 Скорость_:
Start Timer2

Итого = Contdata

Cls
Cursor Off

Do
'-------------------------------------------------------------------------------
   Главный_цикл:

nop

'*******************************************************************************
'-------------------------------------------------------------------------------
'--------------   Реакция на прерывание с вывода PIND.2 (INT0)   ---------------
'-------------------------------------------------------------------------------
     If Флаг_есть_прерывание_int0 <> 0 Then
'-------------------------------------------------------------------------------
'-----   Сбрасываем флаг, что было прерывание  ---------------------------------
'-------------------------------------------------------------------------------
         Флаг_есть_прерывание_int0 = 0
         Total = Total + Колесо
         Итого = Итого + Колесо
         Temptotal = Temptotal + Колесо
     End If
'-------------------------------------------------------------------------------
'-----   Запрещаем прерывание INT0   -------------------------------------------
'-------------------------------------------------------------------------------
         Disable Interrupts
          'Или так
          'Eimsk.0 = 0
'-------------------------------------------------------------------------------
'-------- Тут делаем все, что нужно --------------------------------------------
'-------------------------------------------------------------------------------
           'Toggle Portd.5
           Locate 2 , 5
           Lcd "km/h"
           Locate 2 , 3
           If Скорость < 10 Then Lcd Скорость ; " "
           If Скорость > 9 Then Lcd Скорость
           Locate 1 , 1
           Lcd Total ; "m"
'-------------------------------------------------------------------------------
'-----   Разрешаем прерывание INT0   -------------------------------------------
'-------------------------------------------------------------------------------
         Enable Interrupts
          'Или так
         'Eimsk.0 = 1
'-------------------------------------------------------------------------------
'-------   Переходим на метку, для проверки возможного нажатия   ---------------
'-------------------------------------------------------------------------------
         Goto Главный_цикл

'*******************************************************************************
'-------------------------------------------------------------------------------
'----------------   Реакция на прерывание с вывода PINB.0   --------------------
'-------------------------------------------------------------------------------
     If Флаг_есть_прерывание_pinb_0 <> 0 Then
'-------------------------------------------------------------------------------
'-----   Сбрасываем флаг, что было прерывание  ---------------------------------
'-------------------------------------------------------------------------------
         Флаг_есть_прерывание_pinb_0 = 0
'-------------------------------------------------------------------------------
'-----   Запрещаем прерывание PCINT0   -----------------------------------------
'-------------------------------------------------------------------------------
         Disable Interrupts
          'Или так
          'Pcicr.0 = 0
'-------------------------------------------------------------------------------
'-------- Тут делаем все, что нужно --------------------------------------------
'-------------------------------------------------------------------------------

           Cls
           Lcd "All:" ; Итого ; "m"
           Sound Portd.5 , 150 , 90
           Waitms 100
           Sound Portd.5 , 150 , 90
           Waitms 100
           Sound Portd.5 , 150 , 90
           Waitms 2
           Cls
'-------------------------------------------------------------------------------
'-----   Разрешаем прерывание PCINT0   -----------------------------------------
'-------------------------------------------------------------------------------
         Enable Interrupts
          'Или так
          'Pcicr.0 = 1
'-------------------------------------------------------------------------------
'-------   Переходим на метку, для проверки возможного нажатия   ---------------
'-------------------------------------------------------------------------------
         Goto Главный_цикл
     End If
'-------------------------------------------------------------------------------
'*******************************************************************************

'*******************************************************************************
'-------------------------------------------------------------------------------
'----------------   Реакция на прерывание с вывода PINB.1   --------------------
'-------------------------------------------------------------------------------
     If Флаг_есть_прерывание_pinb_1 <> 0 Then
'-------------------------------------------------------------------------------
'-----   Сбрасываем флаг, что было прерывание  ---------------------------------
'-------------------------------------------------------------------------------
         Флаг_есть_прерывание_pinb_1 = 0
'-------------------------------------------------------------------------------
'-----   Запрещаем прерывание PCINT0   -----------------------------------------
'-------------------------------------------------------------------------------
         Disable Interrupts
          'Или так
          'Pcicr.0 = 0
'-------------------------------------------------------------------------------
'-------- Тут делаем все, что нужно --------------------------------------------
'-------------------------------------------------------------------------------
           Cls
           Lcd "All:" ; Итого ; "m Saved!"
           Sound Portd.5 , 500 , 100
           Contdata = Итого
           Waitms 2
           Cls
'-------------------------------------------------------------------------------
'-----   Разрешаем прерывание PCINT0   -----------------------------------------
'-------------------------------------------------------------------------------
         Enable Interrupts
          'Или так
          'Pcicr.0 = 1
'-------------------------------------------------------------------------------
'-------   Переходим на метку, для проверки возможного нажатия   ---------------
'-------------------------------------------------------------------------------
         Goto Главный_цикл
     End If
'-------------------------------------------------------------------------------
'*******************************************************************************

'*******************************************************************************
'-------------------------------------------------------------------------------
'----------------   Реакция на прерывание с вывода PINB.2   --------------------
'-------------------------------------------------------------------------------
     If Флаг_есть_прерывание_pinb_2 <> 0 Then
'-------------------------------------------------------------------------------
'-----   Сбрасываем флаг, что было прерывание  ---------------------------------
'-------------------------------------------------------------------------------
         Флаг_есть_прерывание_pinb_2 = 0
'-------------------------------------------------------------------------------
'-----   Запрещаем прерывание PCINT0   -----------------------------------------
'-------------------------------------------------------------------------------
         Disable Interrupts
          'Или так
          'Pcicr.0 = 0
'-------------------------------------------------------------------------------
'-------- Тут делаем все, что нужно --------------------------------------------
'-------------------------------------------------------------------------------
           Cls
           Lcd "Total clear!"
           Sound Portd.5 , 500 , 250
           Waitms 1
           Total = 0
           Cls
'-------------------------------------------------------------------------------
'-----   Разрешаем прерывание PCINT0   -----------------------------------------
'-------------------------------------------------------------------------------
         Enable Interrupts
          'Или так
          'Pcicr.0 = 1
'-------------------------------------------------------------------------------
'-------   Переходим на метку, для проверки возможного нажатия   ---------------
'-------------------------------------------------------------------------------
         Goto Главный_цикл
     End If
'-------------------------------------------------------------------------------
'*******************************************************************************
  Goto Главный_цикл
'-------------------------------------------------------------------------------
   Loop : End
'-------------------------------------------------------------------------------
'*******************************************************************************
'*******************************************************************************
'*******************************************************************************
'*******************************************************************************
'*******************************************************************************

'*******************************************************************************

Скорость_:
Скорость = 0
Скорость = Temptotal
Temptotal = 0
Скорость = Скорость * 7.2
Return

Обработка_прерывания_int0:
nop
     push r24
     Флаг_есть_прерывание_int0 = 1
     pop r24
nop

Return
'*******************************************************************************
'-------------------------------------------------------------------------------
Обработка_прерывания_pcint0:
' Время обработки нажатия 43 мкс до 139 мкс
' Время обработки отпускания от 67 мкс до 163 мкс
'-------------------------------------------------------------------------------
nop

     Do
     Кнопка = 0
'-------------------------------------------------------------------------------
'-----------------   Обработка нажатия кнопки с вывода PINB.0   ----------------
'-------------------------------------------------------------------------------
       If Pinb.0 = 0 Then                    ' Время обработки 22 мкс    ' Если есть нажатие кнопки PINB.0, и было отпускание кнопки PINB.0
           Флаг_есть_прерывание_pinb_0 = 1                   ' Время обработки 3 мкс    ' Ставим флаг, что есть необработанное прерывание PINB.0       ' Время обработки нажатия 43 мкс
           Кнопка = 1
           Goto Выход_прерывание_pcint0                      ' Время обработки 3 мкс       ' Переход на метку выхода из прерывания      ' Время обработки нажатия 43 мкс

       End If
'-------------------------------------------------------------------------------
'-----------------   Обработка нажатия кнопки с вывода PINB.1   ----------------
'-------------------------------------------------------------------------------
       If Pinb.1 = 0 Then                    ' Если есть нажатие кнопки PINB.1, и было отпускание кнопки PINB.1
           Флаг_есть_прерывание_pinb_1 = 1                   ' Ставим флаг, что есть необработанное прерывание PINB.1
           Кнопка = 2
           Goto Выход_прерывание_pcint0                      ' Переход на метку выхода из прерывания

       End If
'-------------------------------------------------------------------------------
'-----------------   Обработка нажатия кнопки с вывода PINB.2   ----------------
'-------------------------------------------------------------------------------
       If Pinb.2 = 0 Then                    ' Если есть нажатие кнопки PINB.2, и было отпускание кнопки PINB.2
           Флаг_есть_прерывание_pinb_2 = 1                   ' Ставим флаг, что есть необработанное прерывание PINB.2
           Кнопка = 3
           Goto Выход_прерывание_pcint0                      ' Переход на метку выхода из прерывания

       End If
'-------------------------------------------------------------------------------
'-----------------   Выходим если что-то нажато, или отпущено   ----------------
'-------------------------------------------------------------------------------
     Loop Until Кнопка <> 0                    ' Если дребезг помешал определить состояние кнопки, повторяем
'-------------------------------------------------------------------------------
'--------------------   Выходим из обработки прерывания   ----------------------
'-------------------------------------------------------------------------------
   Выход_прерывание_pcint0:
'-------------------------------------------------------------------------------
'------   Cброс флага "Есть необработаное прерывание" прерывания PCINT0   ------
'-------------------------------------------------------------------------------
   Pcifr = 1                    ' Время обработки 2 мкс
'-------------------------------------------------------------------------------
'------------------   Возвращаемся на место, где прервались   ------------------
'-------------------------------------------------------------------------------
nop                    ' Время обработки 1 мкс

Return


Не комплируется, выдает ошибку.


 
AlekSДата: Понедельник, 15.07.2013, 22:30 | Сообщение # 3
Группа: Проверенные
Сообщений: 248

Статус: Offline
301992,
ОН, баском, выдает ошибку 61.
Смотри: Главный_цикл!!на лсди нечего выводить.
стр.71 DimСкорость As Word     ????

Опиши, что хотел сделать, хоть коменты добавь, непонятно.

 Dim Temptotal As Byte
Dim Total As Long
Dim Итого As Long
Dim Скорость As String
'Dim Flag As Bit
Dim Contdata As Eram Long

Enable Timer2
Config Timer2 = Timer , Prescale = 64
On Timer2 Скорость_
Start Timer2




Сообщение отредактировал AlekS - Понедельник, 15.07.2013, 22:54
 
301992Дата: Вторник, 16.07.2013, 05:57 | Сообщение # 4
Группа: Проверенные
Сообщений: 47

Статус: Offline
Цитата (AlekS)
Смотри: Главный_цикл!!на лсди нечего выводить.
Выводить по умолчанию должен вот этот код
Код
Disable Interrupts
          'Или так
          'Eimsk.0 = 0
'-------------------------------------------------------------------------------
'-------- Выводи скорость и путь --------------------------------------------
'-------------------------------------------------------------------------------
           'Toggle Portd.5
           Locate 2 , 5
           Lcd "km/h"
           Locate 2 , 3
           If Скорость < 10 Then Lcd Скорость ; " "
           If Скорость > 9 Then Lcd Скорость
           Locate 1 , 1
           Lcd Путь ; "m"
'-------------------------------------------------------------------------------
'-----   Разрешаем прерывание INT0   -------------------------------------------
'-------------------------------------------------------------------------------
         Enable Interrupts


 
301992Дата: Вторник, 16.07.2013, 06:06 | Сообщение # 5
Группа: Проверенные
Сообщений: 47

Статус: Offline
Выделил это кусок как отдельную подпрограмму, а проблемы остались





Сообщение отредактировал 301992 - Среда, 17.07.2013, 20:38
 
301992Дата: Вторник, 16.07.2013, 06:14 | Сообщение # 6
Группа: Проверенные
Сообщений: 47

Статус: Offline
Цитата (AlekS)
Опиши, что хотел сделать, хоть коменты добавь, непонятно.
это простой велокомп. просто на  нем тестирую прерывания PCINT.

на int0 висит геркон. при срабатывании этого прерывания ставим флаг, что прерывание есть, и в главнном цыкле считаем прйденный путь и выводим информацию на экран.

от таймера расчитывается скорость и тоже выводится на экран.

на pcint висят кнопки меню.

Хочу обкатать этот код с обычным индикатором, а потом впихать его в другой велокомп и экраном от сименса.


 
301992Дата: Вторник, 16.07.2013, 06:44 | Сообщение # 7
Группа: Проверенные
Сообщений: 47

Статус: Offline
Убрал все лишнее и все равно неидёть





Сообщение отредактировал 301992 - Вторник, 16.07.2013, 06:45
 
pchela5Дата: Среда, 17.07.2013, 14:10 | Сообщение # 8
Группа: Проверенные
Сообщений: 56

Статус: Offline
Цитата (301992)
Убрал все лишнее и все равно неидёть
А я что-то пропустил - баском русский понимает?


 
301992Дата: Среда, 17.07.2013, 14:26 | Сообщение # 9
Группа: Проверенные
Сообщений: 47

Статус: Offline
Раньше понимал. 
Проблему решил, но много вопросов. Раньше выводилось на LCD значение и Byte, long, word и другие. То сейчас приходиться писать лишние строки, для перевода значений в значение String и только потом выводить. Как это решается, аедь раньше что сунеш, то и выведет на экран.


 
maxДата: Среда, 17.07.2013, 15:11 | Сообщение # 10
Группа: Друзья
Сообщений: 170

Статус: Offline
Цитата (301992)
То сейчас приходиться писать лишние строки, для перевода значений в значение String и только потом выводить.
А зачем переводить? Так не проще:

Код
Dim Perem As Word
Lcd Str(perem)




Сообщение отредактировал max - Среда, 17.07.2013, 15:16
 
301992Дата: Среда, 17.07.2013, 20:37 | Сообщение # 11
Группа: Проверенные
Сообщений: 47

Статус: Offline
спасибо попробую

 
AlekSДата: Среда, 17.07.2013, 22:56 | Сообщение # 12
Группа: Проверенные
Сообщений: 248

Статус: Offline
301992,
Так как то, но вывод на экран мерцает.
Длинна обода равна 2 ?

хекс и вася

Прикрепления: variant2.hex(5Kb) · variant2.bas(4Kb)




Сообщение отредактировал AlekS - Четверг, 18.07.2013, 19:18
 
AlekSДата: Воскресенье, 21.07.2013, 23:01 | Сообщение # 13
Группа: Проверенные
Сообщений: 248

Статус: Offline
301992
Как дела?
Разобрался?


 
301992Дата: Понедельник, 22.07.2013, 10:59 | Сообщение # 14
Группа: Проверенные
Сообщений: 47

Статус: Offline
Цитата (AlekS)
Как дела? Разобрался?
Дела нормально. Вроде разобрался, но экран исрользую от нокии 3510i. Сейчас делаю плату, только как-то неочень выходит.


 
Форум » форумы » Общие вопросы по Bascom-AVR » Error 124
Страница 1 из 11
Поиск: