;**************************************************************************
;*                                  PIC16F628                             *
;*                             --------\/--------                         *
;*                            -|RA2          RA1|-                        *
;*                            -|RA3          RA0|-                        *
;*                            -|RA4ck       osc1|-  \ Krystal 4,00MHz     *
;*                       +5V  -|MCLR        osc2|-  /                     *
;*                        0V  -|Vss          Vdd|-  +5V                   *
;*                            -|RB0/INT  PGD/RB7|-                        *
;*                            -|RB1/Rx   PGC/RB6|-                        *
;*                            -|RB2/Tx       RB5|-                        *
;*                            -|RB3      PGM/RB4|-                        *
;*                             ------------------                         *
;**************************************************************************
	list	p=16f628A, R=DEC
	include	"p16f628A.inc"
	ERRORLEVEL      -302    	; VYNECH HLASENI C.302 V BUILD RESULTS - BANK WARNING

	cblock	0x20
; prvni adresa pameti RAM pro PIC16F628 - 224bajtu (20h-7Fh)
TMP_PCL	
TMP_W	
TMP_S	

;pom	
;cykl		

cislo
	endc

jedhod		equ		70h
deshod		equ		71h
jedmin		equ		72h
desmin		equ		73h
dati2c		equ		74h
adresal		equ		75h
adresah		equ		76h
mode		equ		77h
mode1		equ		78h
TMP0		equ		79h
TMP1		equ		7Ah
TMP2		equ		7Bh
jedsec		equ		7Ch

status		equ	03h

#define	inte	stav,0
#define	manu	stav,1
#define	nzv	stav,2
#define	zv	stav,3


#define	enca	PORTB,0
#define	b2	PORTB,3
#define	b1	PORTB,1
;#define	b2	PORTB,2

#define	k1	PORTB,4
#define	k2	PORTB,5
#define	k3	PORTB,6
#define	k4	PORTB,7


;#define	led	PORTA,0
#define	dout	PORTA,1
#define	din	PORTA,0
#define	sda	PORTA,3
#define	scl	PORTA,2
#define	ds	PORTA,4
#define	ok	PORTA,7
#define	c	PORTA,6
;--------------------------------------------------------------------------
	org	0x2007		; adresa nastaveni pojistek pro PIC16F627 a PIC16F628
	dw _BODEN_OFF & _CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLRE_ON & _HS_OSC

; typ oscilatoru
;	_LP_OSC                      EQU     H'3FEC'
;	_XT_OSC                      EQU     H'3FED'
;	_HS_OSC                      EQU     H'3FEE'

;	_ER_OSC_CLKOUT               EQU     H'3FFF'
;	_ER_OSC_NOCLKOUT             EQU     H'3FFE'
;	_INTRC_OSC_CLKOUT            EQU     H'3FFD'
;	_INTRC_OSC_NOCLKOUT          EQU     H'3FFC'
;	_EXTCLK_OSC                  EQU     H'3FEF'

; Code Protect (ochrana proti precteni)
;	_CP_ALL                      EQU     H'03FF'
;	_CP_75                       EQU     H'17FF'
;	_CP_50                       EQU     H'2BFF'
;	_CP_OFF                      EQU     H'3FFF'

; Power Up Timer (casovac pro nabeh napeti 72ms)
;	_PWRTE_ON                    EQU     H'3FF7'
;	_PWRTE_OFF                   EQU     H'3FFF'

; WatchDog (hlidaci pes)
;	_WDT_ON                      EQU     H'3FFF'
;	_WDT_OFF                     EQU     H'3FFB'


;	_BODEN_ON                    EQU     H'3FFF'
;	_BODEN_OFF                   EQU     H'3FBF'

;	_LVP_ON                      EQU     H'3FFF'
;	_LVP_OFF                     EQU     H'3F7F'

;	_MCLRE_ON                    EQU     H'3FFF'
;	_MCLRE_OFF                   EQU     H'3FDF'

;************************ Nastavení dat v EEPROM **************************
	org	0x2100		; tabulka v pameti EEPROM (128 bytu)
	de	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
	de	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
	de	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
	de	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
	de	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
	de	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
	de	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
	de	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF

	de	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
	de	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
	de	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
	de	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
	de	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
	de	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
	de	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
	de	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF

;************************     Reset procesoru     *************************
	org	0x0000		; zacatek programu
	goto	INIT		; skok na pocatecni inicializaci

	org	0x0004		; vektor preruseni
	goto	PRERUS
;**************************************************************************
;*                      preruseni kazdych 16,92ms (58Hz)                 *
;**************************************************************************
PRERUS
	movwf	TMP_W		; (ulozeni hodnot registru W a STATUS)
	movf	STATUS,W	; prohodi nibble STATUS a ulozi do W
	clrf	STATUS		; nastaveni banky 0
	movwf	TMP_S		; ulozit STATUS

	movf	PCLATH,W
	movwf	TMP_PCL
	clrf	PCLATH		; nastaveni banky 0
;       ------------------------
	nop
	nop
	nop
	movlw	57;168
	movwf	TMR0
;	clrf	TMR0
;-------------------------------
	
;	!!! zde napiste co ma preruseni vykonat !!!

	incf	cislo,1

	movf	cislo,0
	sublw	61			
	btfsc	status,0
	goto	PREVOD
	clrf	cislo
	goto	PREVOD

PREVOD	movf	cislo,W		; číslo do W
	call	KOREKCE
	movwf	CCPR1L		; výsledek do pwm
	goto	in

KOREKCE	addwf	PCL,F		; převede CISLO na ASCII
	retlw	128
	retlw	140
	retlw	153
	retlw	165
	retlw	177
	retlw	188
	retlw	199
	retlw	218
	retlw	227
	retlw	234
	retlw	240
	retlw	246
	retlw	250
	retlw	253
	retlw	255
	retlw	255	;
	retlw	255
	retlw	253
	retlw	250
	retlw	246
	retlw	241
	retlw	234
	retlw	227
	retlw	218
	retlw	209
	retlw	199
	retlw	188
	retlw	177
	retlw	165	;28
	retlw	153
	retlw	141
	retlw	128	;32	
	
	retlw	116;126120
	retlw	103;116
	retlw	91;106
	retlw	79
	retlw	68
	retlw	57
	retlw	47
	retlw	38
	retlw	30
	retlw	22
	retlw	16
	retlw	10
	retlw	6
	retlw	3
	retlw	1
	retlw	1
	retlw	1
	retlw	6
	retlw	10
	retlw	15
	retlw	22
	retlw	29
	retlw	38
	retlw	47
	retlw	57
	retlw	68	;56
	retlw	79
	retlw	91
	retlw	103
	retlw	115
	retlw	128



in	bcf	INTCON,T0IF
;	bcf	INTCON,INTF	; nulovanie priznaku prerusenia RB0

;------------------------------- (obnovení hodnot registru W a STATUS)
INT_END
	movf	TMP_PCL,W
	movwf	PCLATH		; obnova PCLATH

	movf	TMP_S,W		; prohodi nibble TMP_S a ulozi do W
	movwf	STATUS		; obnova STATUS

	swapf	TMP_W,F		; prohodi nibble TMP_W a ulozi do W
	swapf	TMP_W,W		; obnova W
	retfie
;************************ Inicializace procesoru  *************************
INIT
	movlw	b'00011110'
	movwf	PORTA
	movlw	b'00000000'
	movwf	PORTB
	movlw	b'00000111'	; digitalni vstupy na PORTu A (PIC16F627 a 628)
	movwf	CMCON 

	CLRWDT
	movlw	63
	movwf	TMR0
;       ------------------------
	bsf	STATUS,RP0	; banka registru 1
	movlw	b'11111111'	; portA 4-0, 5*vstupy
	movwf	TRISA
	movlw	b'11110101'	; portB 7-0, 7*vstupy, 1*vystupy
	movwf	TRISB

	movlw	b'00010010'	; PULL-UPy on, preddelic=1:32 pripojen k TMR0
	movwf	OPTION_REG	; f:4  :32  :256 = 122,1Hz (8,192ms)

;---------------------------- PWM --------------
	movlw	255;63;25
	movwf	PR2		;Set PWM for approximately 78KHz
	clrf	VRCON 		;A/D Voltage reference disabled
	bcf	STATUS,RP0	; banka registru 0
;       ------------------------
	movlw	128;32;13
	movwf	CCPR1L			;Set PWM Duty-Cycle to 50%
	movlw	b'00001100'
	movwf	CCP1CON			;Mode select = PWM
	movlw	b'00000100'
	movwf	T2CON			;Timer2 ON + 1:1 prescale

	movlw	b'10000000'	; povolena všechna přerušení a od přetečení TMR0
	movwf	INTCON

	bsf	INTCON,T0IE	; 1=povoleno přerušení při přetečení TMR0
;	bsf	INTCON,INTE	; 1=povoleno přerušení z portu RB0/INT
;	bsf	INTCON,GIE	; 1=povolena všechna nemaskovaná přerušení

;************************    INICIALIZACIA    ******************
	clrf	TMP_PCL	
	clrf	TMP_W		
	clrf	TMP_S

	clrf	cislo

;************************     Hlavní program      *************************		
;--------------------------------------------------------------------------
main;	btfsc	b2
;	goto	log0
;	bsf	b1
;log0	goto	main
;	bcf	b1
	goto	main
;************************      Konec programu     *************************
		end
