;_device  p16f628a
include	p16F628a.inc

__CONFIG  0x3FED

;-----------------------------
; Директрории
;-----------------------------
#define	w_temp	0x20
#define	s_temp	0x21
#define	BCD_1	0x22		; Левая цифра
#define	BCD_2	0x23		;
#define	BCD_3	0x24		;
#define	BCD_4	0x25		;
#define	BCD_5	0x26		; Правая цифра
#define	timer	0x27		; счетчик для
; динамической индикации
;#define	mn_temp	0x2A
#define	mnojl	0x28
#define	mnojh	0x29
#define	suml	0x2B
#define	sumh	0x2C
#define	mn_2ll	0x2D
#define	mn_2l	0x2E
;#define	mn_2h	0x2F

;-----------------------------
; Константы
;-----------------------------
#define	C_TRISA		b'00000000'
#define	C_TRISB		b'00000000'
#define	C_OPTION	b'00000101'
#define	C_TMR0		.150


;-----------------------------
; Начало
;-----------------------------
org		0x0000
goto	Main_loop


;-----------------------------
; Прерывания
;-----------------------------
org		0x004

movwf	w_temp
swapf	STATUS,W
movwf	s_temp

bcf		INTCON,T0IF
movlw	C_TMR0
movwf	TMR0
clrwdt






swapf	s_temp,W
movfw	STATUS
movfw	w_temp
retfie
;-----------------------------
; Цикл
;-----------------------------
Main_loop
clrf	PORTA
clrf	PORTB
banksel	TRISA
movlw	C_TRISA
movwf	TRISA
movlw	C_TRISB
movwf	TRISB
movlw	C_OPTION
movwf	OPTION_REG
clrf	INTCON
banksel	CMCON			; Выбор банка 0
movlw	.7
movwf	CMCON

;--------------------------
; Инициализация закончена, очистим регистры
;--------------------------

MOVLW   0x5F         ; Число регистров минус 1
MOVWF   w_temp
addlw	0x20
MOVWF   FSR
_CLR_
CLRF    INDF
DECF    FSR,F
DECFSZ  w_temp
GOTO    _CLR_



clrf		INTCON,T0IF	; Очистим регистр прерываний
bsf		INTCON,GIE		; Разрешим глобальные прерывания
bsf		INTCON,T0IE	; Прерывания от TMR0
movlw	C_TMR0
movwf	TMR0
clrwdt

loop
goto	loop

end