Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Как запустить Getrc5 по прерыванию?


Как запустить Getrc5 по прерыванию?

Сообщений 1 страница 8 из 8

1

Не хочется  в цикле опрашивать TSOP, хочется по взрослому, т.е. по прерыванию, но вот такой не хочет работать...
входит один раз в прерывание и виснет
если заремить строчку    Getrc5(address , Command) , то всё ок.
если

Код:
Config Rc5 = Pind.3
Enable Interrupts
Enable Int1
Config Int1 = Falling
On Int1 Прием_rc5 Nosave
Dim Address As Byte , Command As Byte

Do
Loop

Прием_rc5:
Print "test"
   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

как дальше жить не знаю... :)

Отредактировано EdGull (2009-01-22 11:26:31)

0

2

Видимо функция Getrc5 неприменима для прерывания.
Тут наверное нужно велосипед изобретать или искать уже готовое решение, в котором будут данные приниматся по INT0 или INT1, а временные интервалы отсчитыватся одним из тайверов.

0

3

так для ее применения как раз и нужно прерывание

0

4

Все просто, RC5 уже висит в прерывании таймера, вот и все.

0

5

и чё делать?

0

6

вот что нашел у них на форуме
http://www.mcselec.com/index2.php?optio … hlight=rc5

You can use an interrupt pin for your IR receiver. The pin will then see the interrupt and obtain the RC5 data. The interrupt can set a flag that data has been received and you can proccess this within your main loop.

This has not been tested. I found better results when setting the NoSave option for the interrupt routine.

Код:
$crystal = 11059200 
$regfile = "m128def.dat" 

On Int0 Rc5isr Nosave 

Config Rc5 = Pind.0 

Dim Address As Byte , Command As Byte 
Dim Gotrc5 As Bit 
Gotrc5 = 0 


Do 

'''Your main code is running here 


If Gotrc5 = 1 Then 
''RC5 was received, proccess address and command 
Command = Command And &B01111111 
Print Address ; " " ; Command 
Gotrc5 = 0 
End If 

Loop 


Rc5isr: 
Disable Int0 
Getrc5(address , Command) 
Gotrc5 = 1 
Enable Int0 
Enable Interrupts 
Return

0

7

последний код, незахотел у меня работать :(
у меня Мега 32,  ногу для тсопа соответственно поменял на pind.2

Код:
$regfile = "m32def.dat"                                     'используем мк ATmega32
$crystal = 8000000                                          'частота кварцевого резонатора 8MHz

Config Pinb.0 = Output : Led1 Alias Portb.0                 'ногу сконфигурировали как выход и обозвали Led1
Config Pinb.2 = Output : Led2 Alias Portb.2                 'ногу сконфигурировали как выход и обозвали Led2
Config Pinb.1 = Output : Led3 Alias Portb.1                 'ногу сконфигурировали как выход и обозвали Led3
On Int0 Rc5isr Nosave

Config Rc5 = Pind.2

Dim Address As Byte , Command As Byte
Dim Gotrc5 As Bit
Gotrc5 = 0


Do

'''Your main code is running here


If Gotrc5 = 1 Then
''RC5 was received, proccess address and command
Command = Command And &B01111111
   If Command = 5 Then : Reset Led1
   Elseif Command = 2 Then : Set Led1
      Waitms 100
   End If
Gotrc5 = 0
End If

Loop


Rc5isr:
Disable Int0
Getrc5(address , Command)
Gotrc5 = 1
Enable Int0
Enable Interrupts
Return

Отредактировано pashteet (2009-10-21 12:45:50)

0

8

Для RC5 важно, чтобы датчик сидел только на Int0, или можно использовать любое другое прерывание?
Можно ли как-то в Атмеге задействовать прерывание для RC5, если датчик подключен туда, где прерывания нет?

0


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Как запустить Getrc5 по прерыванию?