|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
27.11.2012, 22:09 | #1 |
Регистрация: 27.11.2012
Сообщений: 4
|
программа счетчика
Подскажите как составить алгоритм и разработать программу секундомера, фиксирующую время с момента запуска программы до
момента остановки. Результат поместить в ячейки h’20’ и h’21’ памяти данных, в 20 – секунды, в 21 – сотые секунды. Это для микроконтроллера.. |
28.11.2012, 10:18 | #2 |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
Микроконтроллеров масса самых разных.
Мы даже не знаем, есть ли в используемом Вами микроконтроллере собственный таймер или необходимо пользоваться внешним. |
28.11.2012, 16:14 | #3 |
Регистрация: 27.11.2012
Сообщений: 4
|
микроконтроллер PIC16F873A, с подключенными к нему периферийными устройствами, программатор-отладчик PICkit 2 и персональный компьютер с установленной программой MPLAB. MPLAB IDE включает в себя текстовый редактор, компилятор с языка Ассемблер MPASM, компановщик объектных файлов (линковщик) MPLINK, компановщик библиотек MPLIB, менеджер проектов, симулятор MPLAB-SIM и другие необходимые программы
|
28.11.2012, 16:24 | #4 |
Регистрация: 27.11.2012
Сообщений: 4
|
Микроконтроллер PIC16F873A имеет три таймера/счетчика TMR0,
TMR1 и TMR2 и сторожевой таймер WDT. Сторожевой таймер работает от внутреннего RC генератора. При переполнении сторожевого таймера проис- ходит сброс микроконтроллера, среднее время переполнения составляет 18 мс. К сторожевому таймеру можно подключить выходной делитель, в этом случае время переполнения можно увеличить. Таймер TMR0 представляет собой 8-ми разрядный счетчик, который увеличивается с частотой 1 МГц. При переполнении таймера TMR0 бит T0IF в регистре INTCON аппаратно устанавливается в 1 и если биты GIE и T0IE установлены в 1 процессор переходит к выполнению команды, размещенной по адресу 0004 в памяти программ. Чтобы настроить таймер необходимо: 1. выбрать источник тактового сигнала. Таймер может работать от внут- ренней тактовой частоты (1 МГц) или от внешнего тактового сигнала, посту- пающего на вывод T0CKI. Лабораторный макет предполагает использование только внутренней тактовой частоты. Для выбора внутренней тактовой ча- стоты следует сбросить бит T0CS регистра OPTION_REG: bcf*OPTION_REG,*T0CS**;использовать *внутреннюю*тактовую*частоту* 2. настроить предделитель частоты тактового сигнала. Предделитель позволяет делить тактовую частоту, в результате таймер может формировать более длительные временные задержки. Без подключения предделителя тай- мер может формировать временные задержки от 0,000001 с до 0,000256 с. Подключенный предделитель позволяет расширить диапазон задержек до 0,065536 с. Предделитель подключается к таймеру сбросом бита PSA реги- стра OPTION_REG, а коэффициент деления настраивается битами PS0, PS1 и PS2 регистра OPTION_REG. 3. задать начальное значение таймера. Для формирования временной за- держки таймер считает от заданного начального значения до максимально возможного значения h’FF’, следующее увеличение таймера приведет к гене- рации сигнала прерывания. Настройка начального значения выполняется пу- тем записи в регистр TMR0: movlw*h’100’* ;записать*в*WREG*h’100’*–*начальное *значение*для*TMR0* movwf*TMR0* ;записать*из*WREG*начальное*значени е*TMR0* * Задержка, формируемая таймером, рассчитывается по выражению: задержка = TMR0 / (коэффициент деления) Рассмотрим пример настройки таймера на формирование задержки в 0,01 секунду. Так как процессор на лабораторном макете PIC16F873A вы- полняет 1000000 операций в секунду, для получения задержки в 0,01 секунды требуется 10000 операций: TMR0 · (коэффициент деления) = 10000 Задавая различные коэффициенты деления из табл. 1 и проверяя усло- вие, что в TMR0 нельзя записать отрицательное число, подбираем значение коэффициента деления и начальное значение таймера: TMR0 = 255 - 10000/16, TMR0 = -370 – полученное значение не подходит. TMR0 = 255 - 10000/32, TMR0 = -58 – полученное значение не подходит. TMR0 = 255 - 10000/64, TMR0 = 99 = h’63’. Задав начальное значение 156 и коэффициент деления 1:64, определим задержку формируемую таймером по выражению: (156 · 64) / 1000000 = 0,009984 (секунды) На основе полученных значений разработаем подпрограмму на ассе блере для получения задержки в 0,01 секунды: timerConfig:* movlw*h’63’** * ;записать*в*WREG*h’63’*–*начальное* значение*для*TMR0* movwf*TMR0** * ;записать*из*WREG*начальное*значени е*TMR0* bcf*OPTION_REG,*T0CS*** ;использовать*внутреннюю*тактовую*ч астоту* bcf*OPTION_REG,*PSA** ;включить*предделитель* ;коэффициент*деления*1:64*(PS0*=*1, *PS1*=*0,*PS2*=*1)* bsf*OPTION_REG,*PS0** ;PS0*=*1* bcf*OPTION_REG,*PS1** ;PS1*=*0* bsf*OPTION_REG,*PS2** ;PS2*=*1 return* |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
накрутка счетчика | megostudent | Свободное общение | 13 | 15.04.2012 18:38 |
значение счетчика | dark_sergey | Паскаль, Turbo Pascal, PascalABC.NET | 6 | 16.12.2010 22:47 |
Установка счетчика | doober | Microsoft Office Access | 3 | 21.02.2010 23:15 |
обнуление счетчика в бд | Tanuska___:) | БД в Delphi | 2 | 22.01.2009 23:10 |
Сброс счетчика | vldand | Microsoft Office Access | 1 | 20.10.2008 18:40 |