Симуляция в Протеусе + исходник  -  скачать

Исходник

'===============================================================================
                            'Настройка МК
'===============================================================================
  $map       ' Получаем карту распределения памяти компилятором Bascom
  $regfile = "m328pdef.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 = 4800       '1200     '2400     '4800     '9600     '19200     '38400     '57600     '115000    '230400
  Ucsr0a.1 = 1       ' Двойная скорость работы USART, скорость трансляции = $baud * 2

  Config 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

  Config Timer1 = Timer , Prescale = 1 , Noise Cancel = 0 , Capture Edge = Falling

'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

  Dim Счетчик As Word

'--------------  Разрешаем работу необходимых прерываний  ----------------------
  Tifr1.icf1 = 1       'Сброс флага прерывания Capture1, вдруг оно уже случилось
  Enable Capture1       'Разрешение прерываний Capture1
'-------------  Разрешаем работу всех включенных прерываний  -------------------
  Enable Interrupts       ' Разрешаем работу прерываний
'===============================================================================
'                   Г Л А В Н Ы Й         Ц И К Л
  Главный_цикл:
'===============================================================================




   Idle
'===============================================================================
  Goto Главный_цикл
End
'===============================================================================

'===============================================================================
  Обработка_прерывания_capture1:
'-------------------------------------------------------------------------------
'    !push R16
'    !in R16 , sreg
'    !push R16

    Pushall       'Сохраняем все регистры и SREG

    Toggle Осциллограф

    Счетчик = Capture1

    Capture1 = 0
    Timer1 = 0

    Popall       'Восстанавливаем все регистры и SREG

'    !pop R16
'    !out sreg , R16
'    !pop R16

    !reti
'-------------------------------------------------------------------------------
  Return
'===============================================================================

http://s3.uploads.ru/t/zgZJW.jpg