Прерывание по захвату (CAPTURE)
Симуляция в Протеус 7.10 + исходник Bascom 2.0.7.1 + документация - скачать
'===============================================================================
'Настройка МК
'===============================================================================
$map ' Получаем карту распределения памяти компилятором Bascom
$regfile = "m8def.dat" ''Документация Atmel:
'Atmega8A - http://www.atmel.com/images/atmel-8159- … asheet.pdf
'Atmega8L - http://www.atmel.com/images/atmel-2486- … asheet.pdf
'Migration from ATmega8 to ATmega8A - http://www.atmel.com/images/doc2553.pdf$crystal = 1000000 ' 1 МГц
$framesize = 64 ' Размер области используемой и необходимой для преобразований
$hwstack = 64 ' Размер аппаратного стека
$swstack = 64 ' Размер программного стека
$baud = 38400 '!!! ВНИМАНИЕ, ЗАЛИТ BOOTLOADER, скорость трансляции 38400 бод'===============================================================================
'Настройка USART
'===============================================================================
$baud = 38400 '1200 '2400 '4800 '9600 '19200 '38400 '57600 '115000 '230400
Ucsra.1 = 1 ' Двойная скорость работы USART, скорость трансляции = $baud * 2Config Com1 = Baud , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
$timeout = 2000000 ' Время ожидания ввода значения перед выходом
'===============================================================================
'Настройка TIMER1_CAPTURE1 (прерывание по приходу импульса на вывод PB0(ICP))
'===============================================================================
Config Pinb.0 = Input : Reset Portb.0'TCCR1B – Timer/Counter1 Control Register B
'Bit 6 – ICES1: Input Capture Edge Select
Tccr1b.ices1 = 1 'Если 1 - Rising-нарастание, если 0 - Falling-спад (стр.135 http://www.atmel.com/images/atmel-8159- … asheet.pdf)
'Bit 7 – ICNC1: Input Capture Noise Canceler
Tccr1b.icnc1 = 0 'Если 1 - активируется шумоподавление (стр.135 http://www.atmel.com/images/atmel-8159- … asheet.pdf)On Capture1 Обработка_прерывания_capture1 Nosave
'===============================================================================
'Настройка вывода МК для осциллографа
'===============================================================================
Осциллограф Alias Portb.1 : Config Осциллограф = Output : Reset Portb.1'-------------- Разрешаем работу необходимых прерываний ----------------------
Tifr.icf1 = 1 'Сброс флага прерывания Capture1, вдруг оно уже случилось
Enable Capture1 'Разрешение прерываний Capture1
'------------- Разрешаем работу всех включенных прерываний -------------------
Enable Interrupts ' Разрешаем работу прерываний
'===============================================================================
' Г Л А В Н Ы Й Ц И К Л
Главный_цикл:
'===============================================================================Idle
'===============================================================================
Goto Главный_цикл
End
'==============================================================================='===============================================================================
Обработка_прерывания_capture1:
'-------------------------------------------------------------------------------
' !push R16
' !in R16 , sreg
' !push R16Pushall 'Сохраняем все регистры и SREG
Toggle Осциллограф
Popall 'Восстанавливаем все регистры и SREG
' !pop R16
' !out sreg , R16
' !pop R16!reti
'-------------------------------------------------------------------------------
Return
'===============================================================================
