Задача
Подсчитать число импульсов на входе за одну секунду.
Микроконтроллер: PIC16F84A, кварц 4 МГц. Среда: MPLAB X + MPASM (или любой совместимый ассемблер). Как настроить среду и прошить контроллер — в статье программирование PIC.
Что понадобится
- PIC16F84A
- кварц 4 МГц + 2×22 пФ
- 8 светодиодов + 8×330 Ом
- источник импульсов
- резистор 10 кОм
Схема подключения
| Вывод | Подключение |
|---|---|
| RA4 / T0CKI | вход импульсов (открытый сток — нужна подтяжка 10 кОм на +5 В) |
| RB0…RB7 | индикация результата |
| MCLR | через 10 кОм на +5 В |
Алгоритм
- Настроить
OPTION_REG: источник TMR0 — вход T0CKI, счёт по спаду. - Обнулить TMR0 — открыть окно измерения.
- Выдержать ровно одну секунду.
- Прочитать TMR0 — это число импульсов, то есть частота в герцах.
Листинг на ассемблере
Код проверен ассемблером и собирается без ошибок. Скачать: p23.asm · p23.hex (готовая прошивка).
;=======================================================
; Проект 23. Счётчик импульсов (основа частотомера)
; PIC16F84A, 4 МГц. Вход импульсов — RA4/T0CKI
; TMR0 работает счётчиком внешних импульсов,
; результат за 1 секунду выводится на светодиоды RB0..RB7
;=======================================================
LIST p=16F84A
#include <p16f84a.inc>
__CONFIG _XT_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF
cblock 0x0C
d1, d2, d3
endc
ORG 0x000
goto Start
Start
bsf STATUS,RP0
clrf TRISB ; индикация — выходы
movlw b'00110000' ; RA4 — вход
movwf TRISA
movlw b'00101000' ; TMR0 от RA4/T0CKI, по спаду, без предделителя
movwf OPTION_REG
bcf STATUS,RP0
Main
clrf TMR0 ; открываем окно счёта
call Delay1s ; измерительный интервал 1 секунда
movf TMR0,w ; сколько импульсов насчитали
movwf PORTB ; выводим код на светодиоды
goto Main
;--- измерительное окно ровно 1 секунда ---
Delay1s
movlw .5
movwf d3
S1 movlw .255
movwf d1
S2 movlw .255
movwf d2
S3 nop
nop
decfsz d2,f
goto S3
decfsz d1,f
goto S2
decfsz d3,f
goto S1
return
END
Пояснения
- Вывод RA4 имеет открытый сток, поэтому подтягивающий резистор обязателен, иначе счёт не пойдёт.
- Восьмиразрядный TMR0 считает до 255; для больших частот подключают предделитель или наращивают разрядность программным счётчиком переполнений.
- Точность измерения целиком зависит от точности секундного окна — здесь напрямую работает стабильность кварца.
Что дальше
Разобравшись с этим проектом, переходите к следующему в разделе проекты на PIC. Справочник по архитектуре и периферии контроллеров — на странице микроконтроллеры PIC.