Основные параметры
Разрядность
|
| Масочное ПЗУ
| 2048x14
| Flash
| нет
| EEPROM
|
| RAM
|
| Линий I/O
|
| АЦП
| 4/8
| Компаратор
| нет
| Встроенный генератор
| есть
| Интерфейсы
| нет
| Рабочая частота
| 4 МГц
| Корпус
| SO8
|
| | |
; сигнализатор влажности
#include <p12f629.inc>
__config _PWRTE_ON &_MCLRE_OFF &_WDT_ON &_INTRC_OSC_NOCLKOUT &_CP_ON &_CPD_OFF &_BODEN_OFF
org 0
goto start
; --------------------------- регистры
timer_delay equ 20
timer_sound_L equ 21
timer_sound_H equ 22
; --------------------------- константы
; GPIO
d_tris equ b'001000'
SOUND_1 equ 0
SOUND_2 equ 1
INPUT equ 3
d_gpio_init equ b'000000'
d_sound_1 equ b'000001'
d_sound_2 equ b'000010'
d_option equ b'00001111' ; WDT c задержкой 2.3 сек
time_sound equ .6 ; длительность звука (x 146 mc)
; ---------------------------
w equ 0
f equ 1
; ____________________________________
; _____________________________________
; задержки для формирования меандра выходной частоты
delay_1 goto $+1 безусловный переход
clrwdt очистить WDT
delay_2 movlw .92 переслать константу 92 в W
movwf timer_delay переслать W в timer_delay
ckl_delay decfsz timer_delay,f вычесть 1 из timer_delay и пропустить если 0
goto ckl_delay безусловный переход ckl_delay
return возврат из подпрограммы
; -------------------------------------
sound movlw time_sound переслать константу в time_sound
movwf timer_sound_H переслать W в timer_sound_H
clrf timer_sound_L очистить timer_sound_L
; меандр 3.5 кГц -> T/2 = 286 мкс
ckl_sound movlw d_sound_1 переслать константу d_sound_1 в W
movwf GPIO переслать W в GPIO
call delay_1 вызов подпрограммы delay_1
movlw d_sound_2 переслать константу d_sound_2
movwf GPIO переслать W в GPIO
call delay_2 вызов подпрограммы delay_2
decfsz timer_sound_L,f вычесть 1 из timer_sound_L и пропустить если 0
goto ckl_sound безусловный переход ckl_sound
decfsz timer_sound_H,f вычесть 1 из timer_sound_H и пропустить если 0
goto ckl_sound безусловный переход ckl_sound
clrf GPIO очистить GPIO
return возврат из подпрограммы
; _____________________________________
; инициализация регистров по включению питания
init clrf INTCON очистить INTCON
movlw d_option переслать константу d_option в W
option
movlw 7 переслать константу 7 в W
movwf CMCON переслать W в CMCON
movlw d_tris переслать константу d_tris в W
tris GPIO
movlw d_gpio_init переслать константу в d_gpio_init
movwf GPIO переслать W в GPIO
bsf STATUS,RP0 выбрать банк 1
call 3FF вызов подпрограммы 3FF
movwf OSCCAL переслать W в OSCCAL
clrf PIE1 очистить PIE1
clrf WPU очистить WPU
clrf IOC очистить IOC
bcf STATUS,RP0 выбрать банк 0
return возврат из подпрограммы
; ===============================================
start call init вызов подпрограммы init
; _____________________________________ 2.3 cek
main_ckl clrwdt очистить WDT
sleep перейти в режим sleep
nop пустой цикл
btfss GPIO,INPUT проверить бит INPUT в регистре GPIO
; датчик сработал - выдаем звук
call sound вызов подпрограммы sound
goto main_ckl безусловный переход main_ckl
end


