подключил кнопку, зумер и LED.
Код. Думаю надо будет просмотреть его на свежую голову может что упустил. Теперь надо поработать над внешними прерываниями и режимом сна, и начину разводить плату.
Код:
LIST P=PIC12F629
__CONFIG H'3F86
STATUS EQU H'03
CMCON EQU H'19
GPIO EQU H'05
OSCCAL EQU H'10
TRISIO EQU H'05
WPU EQU H'15
OPTION_REG EQU H'01
Reg_1 EQU H'20
Reg_2 EQU H'21
HOLD EQU H'22
org 0
; инициализация
bcf STATUS,5 ; банк 0
clrf GPIO ; очистка порта
movlw .7
movwf CMCON ; отключение компоратора
bsf STATUS,5 ; банк 1
call 3FFh ; загрузка калибровочной константы
movwf OSCCAL
; активная подтяжка
movlw b'11001100
movwf WPU
bcf OPTION_REG,7
; настроика выходов порта
movlw b'11100100
movwf TRISIO
bcf STATUS,5 ; банк 0
; кнолпка
; взрыв с трёх секундной задержкой
but1 movlw .100 ; трёх сек удерж кнгопки
movwf HOLD
but2 btfss GPIO,2
btfsc GPIO,2
goto but1 ; сброс счетчика если отпустили кнопку раньше трёх секунд
call Pause
decfsz HOLD, F
goto but2
call IndSig ;индикация
; при удержании более 10 секунд взрыв без задержки
movlw .250 ; шесть секунд удержание для включения режима без задержки
movwf HOLD
but3 btfss GPIO,2
btfsc GPIO,2
goto delay_boom ; если неудержали шесть секунд взрыв с задеожкой
call Pause
decfsz HOLD, F
goto but3
call IndSig ;индикация
but4 btfss GPIO,2 ; ожидание изменения на входе
goto but4
goto boom
delay_boom
movlw .125
movwf HOLD
d_b call Pause
decfsz HOLD, F
goto d_b
;ПЕРЕДАЧА СИГНАЛА
boom movlw .133 ; Заголовок 2400мкС
call BASESIGNAL
movlw .34 ; ID игрока bit 8
call BASESIGNAL
movlw .34 ; ID игрока bit 7
call BASESIGNAL
movlw .34 ; ID игрока bit 6
call BASESIGNAL
movlw .34 ; ID игрока bit 5
call BASESIGNAL
movlw .34 ; ID игрока bit 4
call BASESIGNAL
movlw .34 ; ID игрока bit 3
call BASESIGNAL
movlw .34 ; ID игрока bit 2
call BASESIGNAL
movlw .34 ; ID игрока bit 1
call BASESIGNAL
movlw .34 ; ID команды bit 2
call BASESIGNAL
movlw .34 ; ID команды bit 1
call BASESIGNAL
movlw .34 ; Урон bit 4
call BASESIGNAL
movlw .34 ; Урон bit 3
call BASESIGNAL
movlw .34 ; Урон bit 2
call BASESIGNAL
movlw .68 ; Урон bit 1
call BASESIGNAL
goto boom
;БАЗОВЫЙ ИМПУЛЬС 56kHZ, ДЛИТЕЛЬНОСТЬ ЗАВИСИТ ОТ Reg_1
BASESIGNAL movwf Reg_1
SIGNAL bsf GPIO,0
Pause1 movlw .2
movwf Reg_2
wr decfsz Reg_2, F
goto wr
nop
bcf GPIO,0
Pause2 movlw .1
movwf Reg_2
wr1 decfsz Reg_2, F
goto wr1
nop
decfsz Reg_1,F
goto SIGNAL
;ЗАДЕРЖКА МЕЖДУ ИМПУЛЬСАМИ delay = 582 machine cycles
Pause3 movlw .193
movwf Reg_2
wr2 decfsz Reg_2, F
goto wr2
nop
nop
return
;delay = 25'000 machine cycles
Pause movlw .118
movwf Reg_1
movlw .33
movwf Reg_2
wr3 decfsz Reg_1, F
goto wr3
decfsz Reg_2, F
goto wr3
nop
nop
return
;сигнал индикации
IndSig movlw b'11010010
movwf GPIO
movlw .20
movwf HOLD
d_b1 call Pause
decfsz HOLD, F
goto d_b1
clrf GPIO
return
end