А есть подробная инфа по TMR0? что-то никак не пойму как его использовать?Добавлено (08.09.2011, 20.38.10)
---------------------------------------------
ПИК 16F84A (кварц 4МГц) хочу сделать тахометр...
Вход генератора RB0(INT)
Define LCD_DREG PortB
Define LCD_DBIT 4
Define LCD_RSREG PortB
Define LCD_RSBIT 3
Define LCD_EREG PortB
Define LCD_EBIT 2
Define LCD_BIT 4
Define LCD_LINES 2
Define LCD_COMMANDUS 2000
Define LCD_DATAUS50
TrisA = %00000
PortA = %00000
TrisB = %00000001
PortB = %00000000
Time Var Word
Tcon Con 250
Time = Tcon
Imp Var Word
Imp = 0
RPM Var Word
RPM = 0
OPTION_REG = %10000111
TMR0=6
INTCON = %10110000
On Interrupt Goto myint
Main:
LCDOUT $FE,2,"RPM=",RPM
Goto Main:
Disable
Myint:
if intcon.1=1 then
Imp = Imp + 1
INTCON.1 = 0
endif
if intcon.2=1 then
Time = Time - 1
if Time = 0 then
Time = Tcon
RPM = Imp*60
Imp = 0
endif
TMR0=5
intcon.2=0
endif
Resume
Enable
Добавлено (09.09.2011, 17.37.39)
---------------------------------------------
Вот кое что получилось, но только не понятно вот что - скачал с сети следующее.
Общий алгоритм работы с TMR0 выглядит так.
1. Инициализируем TMR0 установкой его конфигурации (прескалер, источник тиков) в регистре OPTION_REG.
Не забываем, что этот регистр в первом банке!
2. Записываем в счетчик переполнений (тот что в обработчике декрементируется) целое количество
переполнений TMR0 плюс одно (это то, что неполное в начале).
3. Записываем в TMR0 ДОПОЛНЕНИЕ до числа 256 этого самого остатка, который мы нашли в начале при
расчете пересчетных установок.
4. Устанавливаем пин порта в который выводится интервал в 1.
5. Сбрасываем флаг переполнения TMR0 в регистре INTCON
6. Разрешаем глобальные прерывания (Прерывания от TMR0 можно разрешить в самом начале при инициализации).
7. Обработчик прерываний содержит сохранение контекста (аккумулятор и регистр статуса)
8. Далее следует семафор прерываний (это если у нас не только эта задача в обработчике)
9. Декремент счетчика (в примере счетчик однорегистровый, но можно и увеличить его разрядность)
10. Проверка этого счетчика на ноль и сброс пина порта на который выводится интервал.
Сделал все как написано, п.3 получился const=250 при TMR0=6, все бы ничего но с этими значениями обороты считаются не точно, а вот с const=150, все хорошо. КАК БЫТЬ и ПОЧЕМУ ТАК получается???