А откуда расчет, что
Quote
1 тик = 0,25 мкс, 0,25*50=12,5 мкс, на выходе должны получиться импульсы длительностью 12,5 мкс. Подскажите где я не прав?
Есть такая программка - здесь. С помощью нее можно рассчитать время, через которое таймер вызовет прерывание.
Quote (sandro37)
В данном случае используется кварц на 4MHz, счетчик считает от 255(т.е. 1мкс), но в proteus на выходе получаются импульсы длиной 25мкc. Так и должно быть?
Дело здесь в том, что пока обрабатывается Context Restore - проходит 23 мкС. Кроме того, если написано Context Restore, то нет надобности писать после этого Retfie, так как Context Restore уже содержит эту инструкцию. Кроме того, опять же, в данной программе нет необходимости сохранять системные регистры, то есть инструкция Context Restore не нужна, достаточно просто написать Retfie. Это займет меньше времени.
Если написать еще
Declare FSR_Context_Save = Off
то компилятор не добавит автоматическое сохранение системных регистров и время обработки сократится еще.
Кроме этого, если рассматривать данную программу, как решение определенной задачи, то ее можно решить проще - просто не используем прерывания, а генерируем импульсы в основной программе.
Device = 16F628A
Xtal=4
TRISA = %00000000
PORTA = %00000000
goto main
main:
PORTA.2=~PORTA.2
GoTo main
Ну, в общем, информация к размышлению...