105 lines
2.0 KiB
Plaintext
105 lines
2.0 KiB
Plaintext
' ########### start ###########
|
|
' pic:PIC10F200
|
|
' ########### end ###########
|
|
'
|
|
' ******************************************************************
|
|
' Scacciazanzare with a PIC10F200
|
|
' 2016-08-11 (c) Paolo Iocco
|
|
' ******************************************************************
|
|
'
|
|
' Circuit diagram
|
|
' ---------------
|
|
' +--\/--+
|
|
' LED <----------|1° 6|<--------|50K|---+5V
|
|
' GND ---------->|2 5|<------- +5V
|
|
' BUZ1 <---------|3 4|-------> BUZ2
|
|
' +------+
|
|
'
|
|
' ******************************************************************
|
|
|
|
#include "pic6_pin.h"
|
|
'Chip model
|
|
#chip 10f200, 4
|
|
#Config WDT = ON, MCLRE=OFF, CP = OFF ', PWRTE = ON
|
|
|
|
#define LED D0
|
|
#define BUZ1 D1
|
|
#define BUZ2 D2
|
|
|
|
dir D0 out
|
|
dir D1 out
|
|
dir D2 out
|
|
dim ciclo as byte
|
|
dim ciclo_h as byte
|
|
dim dummy as byte
|
|
dim periodo as byte
|
|
dim dormi as byte
|
|
|
|
Startup:
|
|
set LED off
|
|
set BUZ1 off
|
|
set BUZ2 off
|
|
OPTION_REG=0b11001111 ' PSA + Prescaler 111 (1:128)
|
|
|
|
Loop:
|
|
do
|
|
' ** emette i suoni da ca. 63KHz a 15KHz
|
|
'for periodo=1 to 10 ' us del semiciclo (ciclo: 1=63,3KHz, 10=15,7KHz)
|
|
movlw 10
|
|
movwf periodo
|
|
|
|
step3:
|
|
movlw 160 ' 160*256 periodi per frequenza
|
|
movwf ciclo_h
|
|
step2:
|
|
movlw 255 ' ciclo interno
|
|
movwf ciclo
|
|
step1:
|
|
' primo emiciclo
|
|
set BUZ1 on 'bsf GPIO,1 'set BUZ1 on
|
|
set BUZ2 OFF 'bcf GPIO,0 'set BUZ2 off
|
|
movf periodo,w
|
|
movwf dummy
|
|
half1:
|
|
decfsz dummy,f
|
|
goto half1
|
|
clrwdt
|
|
'secondo emiciclo
|
|
set BUZ1 off 'bcf GPIO,1 'set BUZ1 off
|
|
set BUZ2 on 'bsf GPIO,0 'set BUZ2 on
|
|
movf periodo,w
|
|
movwf dummy
|
|
half2:
|
|
decfsz dummy,f
|
|
goto half2
|
|
|
|
decfsz ciclo,f
|
|
goto step1
|
|
|
|
decfsz ciclo_h,f
|
|
goto step2
|
|
|
|
decfsz periodo,f
|
|
goto step3
|
|
|
|
' ** lampeggio
|
|
set LED on
|
|
wait 125 ms
|
|
|
|
' ** reset delle uscite
|
|
set LED off
|
|
set BUZ1 off
|
|
set BUZ2 off
|
|
|
|
' ** dorme per 20 cicli di watchdog
|
|
movlw 20
|
|
movwf dormi
|
|
step4:
|
|
clrwdt
|
|
sleep
|
|
nop
|
|
decfsz dormi,f
|
|
goto step4
|
|
|
|
loop
|