Регистрация | Вход

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: ivan_fd  
вопрос по таймеру
hopi Дата: Вт, 10.03.2009, 10:34  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Новенький
Сообщений: 12
Репутация: 0   ±
Замечания:   ±
На сайте с 09.12.2008

Статус: Offline

День добрый. Подскажите начинающему:
Затеял таймер. Мигает каждую секунду и по истечению минуты тоже. В протеусе всё как задумано. В реалии нет.Прошу не судить строго. Заранее спасибо.
s var word
s1 var word
init:
portb = %00000000
TRISB = %00000001
OPTION_REG = %11000011
INTCON = %10110000

start:
if intcon.2 = 1 then
s = s + 1
intcon.2 = 0
if s = 233 then
s = 0
high portb.1
pause 50
low portb.1
INTCON.1 = s1
s1 = s1 + 1
if s1=60 then
s1=0
high portb.5
pause 5000
low portb.5
INTCON.1 = 0
endif
endif
endif
goto start
end

Сообщение отредактировал hopi - Вт, 10.03.2009, 10:35
ЯНДЕКС Дата: 10.03.2009
ADMIN Дата: Вт, 10.03.2009, 12:46  |                                                                                                                Сообщение # 2
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1086
Репутация: 32   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

1) А зачем вы биту INTCON.1 присваиваете 16-битное значение.
2) Если не работает в реальности, то, возможно неправильно установлены биты конфигурации:
Например, включен WDT. Может, в схеме проблема: например нет резистора на MCLR. Проблем может быть много. Вы опишите задачу, приведите ваш вариант схемы, ничего не меняя, приведите, в конце концов тип процессора. А там и решать можно.
hopi Дата: Вт, 10.03.2009, 13:42  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг:  Новенький
Сообщений: 12
Репутация: 0   ±
Замечания:   ±
На сайте с 09.12.2008

Статус: Offline

Quote (basicpic)
А зачем вы биту INTCON.1 присваиваете 16-битное значение

с этим разобрался

резистор на MCLR подключен
схема сама по себе учебно-тренировочная
таким образом пытаюсь изучить работу TMR0
Если можно подскажите пож-та как должен в идеале выглядеть рабочий код
еще раз задача значит:ежесекундное мигание втечении 1-й минуты.
и каким образом WDT отключить так - wdt_off?
16f873a

Сообщение отредактировал hopi - Вт, 10.03.2009, 13:49
Yrok Дата: Ср, 11.03.2009, 10:36  |                                                                                                                Сообщение # 4
Группа: Проверенные
Ранг:  Продвинутый
Сообщений: 112
Репутация: 2   ±
Замечания:   ±
На сайте с 27.09.2007

Статус: Offline

Да батенька ну вы тут и наворотили!!!!!
Ну давайте попробуем разобраться :
1)Первый раз вижу чтоб прерывания обрабатывались в основной программе))))--обычно для этого используется отдельная подпрограмма.
2)я так понимаю s=233 подобрано экспериментально))--потому как если кварц 4Мгц то 4000000/256/16--TMR0 переполняется раз в 1мСек--так и не понял зачем тебе нужно такое частое срабатывание таймера wink --второе IF по идее должно сработать через 233*1=233мСек(к сожалению это не совсем так--но на этом пока не будем останавливаться)
3)Пока твой светодиод горит 50мСек--TMR0 переполняется 50 раз но ты к сожалению этого не замечаешь))--и того твой светодиод зажигается примерно(очень примерно так как время исполнения команд трудновато подсчитать-а у тебя она очень влияет на весь процесс) раз в 233+50=283мСек
4)Потом ты зажигаешь второй светодиод один раз в 0,283*60=16,98 Секунд ,а вот это меня вообще удивило pause 5000 --эт что тупо стоим и смотрим на светодиод 5 секунд --чет в условиях задачи у тебя нигде несказанно про это))
5)INTCON.1 = 0 --а это тебе вообще зачем--ты же вроде не используешь внешнее прервание?????
hopi Дата: Ср, 11.03.2009, 14:14  |                                                                                                                Сообщение # 5
Группа: Проверенные
Ранг:  Новенький
Сообщений: 12
Репутация: 0   ±
Замечания:   ±
На сайте с 09.12.2008

Статус: Offline

Quote (Yrok)
pause 5000

Yrok
pause 5000 пятисекундная остановка в конце минуты про которую я не упомянул в Т.З.
Вобщем и целом нагородил огород. Буду досконально разбираться.
Спасибо BasicPic и Yrok

  • Страница 1 из 1
  • 1
Поиск: