Арт писал(а):Вот код, но не работает в Протеусе.
Ну с чего это вдруг не работает-то? Все прекрасно работает.
Код: Выделить всё
$regfile = "m16def.dat"
$crystal = 4000000
' конфигурация дисплея
Config Lcdpin = Pin , Rs = Portb.1 , E = Portb.2 , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7
Config Lcd = 16 * 2
Config Timer1 = Timer , Prescale = 1024 , Capture Edge = Rising
On Capture1 Captmr
Dim Timercounter As Word
Timercounter = 0
Enable Interrupts
Enable Capture1
Cls
Cursor Off
Do
Locate 1 , 1
Lcd "KOTOB: " ; Timercounter ; " "
Loop
Captmr:
Timercounter = Capture1
Timer1 = 0
Return
End

Просто не забывайте, что Вы настроили прерывание по захвату счетного регистра. И если частота подаваемого сигнала высокая, то таймер даже пискнуть не успеет. И Протеус тут совершенно не при чем...
P.S. Кстати, измеряет верно. Между импульсами таймер насчитал 1149
котов тиков. С делителем 1024 и тактовой частотой 4 MHz один тик таймера равен 1024 / 4 000 000 = 0,000256 c. Умножаем и получаем период 1149 * 0,000256 = 0,294144 c. Ну и частота в итоге равна 1 / 0,294144 = 3,40 Hz Собственно, что на генераторе и установлено.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон