Задача
Сформировать на выводе прямоугольный сигнал частотой около 1 кГц.
Микроконтроллер: PIC16F84A, кварц 4 МГц. Среда: MPLAB X + MPASM (или любой совместимый ассемблер). Как настроить среду и прошить контроллер — в статье программирование PIC.
Что понадобится
- PIC16F84A
- кварц 4 МГц + 2×22 пФ
- резистор 10 кОм
- осциллограф или пьезоизлучатель для проверки
Схема подключения
| Вывод | Подключение |
|---|---|
| RB0 | выход сигнала (на осциллограф или пьезоизлучатель) |
| MCLR | через 10 кОм на +5 В |
Алгоритм
- Установить высокий уровень на RB0.
- Выдержать паузу в половину периода — 500 мкс.
- Установить низкий уровень и выдержать такую же паузу.
- Повторять бесконечно.
Листинг на ассемблере
Код проверен ассемблером и собирается без ошибок. Скачать: p08.asm · p08.hex (готовая прошивка).
;=======================================================
; Проект 08. Генератор меандра ~1 кГц на RB0
; PIC16F84A, 4 МГц (1 команда = 1 мкс). Полупериод 500 мкс
;=======================================================
LIST p=16F84A
#include <p16f84a.inc>
__CONFIG _XT_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF
cblock 0x0C
cnt
endc
ORG 0x000
goto Start
Start
bsf STATUS,RP0
clrf TRISB
bcf STATUS,RP0
Main
bsf PORTB,0
call Half ; пауза 500 мкс
bcf PORTB,0
call Half
goto Main
;--- ~500 мкс: 165 витков по 3 такта ---
Half
movlw .165
movwf cnt
HL nop
decfsz cnt,f
goto HL
return
END
Пояснения
- При кварце 4 МГц машинный цикл равен 1 мкс: частота делится на 4, а большинство команд выполняется за один цикл.
- Тело цикла задержки занимает 3 цикла (
nop+decfsz+goto), поэтому 165 витков дают примерно 500 мкс. - Точную частоту удобно проверить осциллографом, а пересчитать период и частоту — в калькуляторе.
Что дальше
Разобравшись с этим проектом, переходите к следующему в разделе проекты на PIC. Справочник по архитектуре и периферии контроллеров — на странице микроконтроллеры PIC.