	list		p=18f4525	
	#include	<p18f4525.inc>

; Motorvezerlo a speci nyakkal
; mar a motort is meghajtja, 9.6V-os akkupack a furobol
; Pinnacle taviranyitoval jobb elore/hatra bal elore/hatra

szelesbitido = 1a	;egy idoszelet nagyjabol az infra varakozociklusban

peerketto = 80	;teljes periodus
szeles = 67	;a duty, minel kozelebb a peerkettohoz, annal lassubb

off_kodja 	= D'19266'
fel_kodja 	= D'5952'
le_kodja 	= D'40032'
put_kodja 	= D'54633'
full_kodja 	= D'24137'
felfeny_kodja	= D'25923'
kiter_kodja 	= D'34130'
szam1_kodja 	= D'1628'
szam2_kodja 	= D'17260'
szam3_kodja	= D'51276'                
szam4_kodja	= D'60020'                
szam5_kodja	= D'24916'                
szam6_kodja	= D'9316'                
szam7_kodja	= D'44868'                
szam8_kodja	= D'13688'                
szam9_kodja	= D'48728'                
szam0_kodja	= D'64360'
volplusz_kodja	= D'24137'
volminusz_kodja	= D'25923'
menu_kodja	= D'63313'
addig_kodja	= D'36953'
chanup_kodja	= D'33093'
chandown_kodja	= D'31857'
jobbra_kodja	= D'28744'
balra_kodja	= D'55632'
zoom_kodja	= D'45665'
mute_kodja	= D'21104'
chgchn_kodja	= D'15702'
p_kodja		= D'49250'
l_kodja		= D'14657'
i_kodja		= D'11338'
vissza_kodja	= D'2661'
rec_kodja	= D'62278'
pause_kodja	= D'20309'
elore_kodja	= D'58957'
rev_kodja	= D'61027'
play_kodja	= D'43859'
stop_kodja	= D'587'
ffw_kodja	= D'56647'
tv_kodja	= D'30822'
ttx_kodja	= D'57946'
radio_kodja	= D'42858'
epg_kodja	= D'7033'


hasonlitugrik MACRO kod,cim
local ugribug
	movlw kod
	cpfseq ideg
	bra ugribug
	bra cim
ugribug nop
ENDM

tablabeallitas MACRO bertek
	mov TBLPTRU,0
	mov TBLPTRH, high bertek
	mov TBLPTRL, low bertek
ENDM

;***** VALTOZOK

cblock 0x00
TEMP1
TEMP2
TEMP3
TEMPVK1
TEMPVK2
infrakodlo
infrakodhi
korbejar
ideg
ideg2
idegszam
kodfejto
hikod
lokod
endc

#define Infra		PORTB,1
#define utkozes		PORTB,2

#define PWMjobb	CCPR2L
#define PWMbal	CCPR1L

#define jobbled		PORTC,0
#define jobbmotorpwm	PORTC,1
#define balmotorpwm	PORTC,2
#define jobbmotorerr	PORTC,3
#define jobbmotoron	PORTC,4
#define balmotorerr	PORTC,5
#define balmotoron	PORTC,6
#define balled		PORTC,7


ORG 0xF000
betuk
de	2,4,0e,1,0f,11,0f,0     ;  = 8.char kod	
de	2,4,0e,11,1f,10,0e,0    ;  = 9.char
de	2,4,0,0c,4,4,0e,0       ;  = 10.char
de	2,4,0,0e,11,11,0e,0     ;  = 11   = 0efh
de	9,12,0,0e,11,11,0e,0    ;  = 12
de	2,4,11,11,11,13,0d,0    ;  = 13   = 0f5h
de	9,12,0,11,11,13,0d,0   	; hosszu  = 14
de	0,0,0,0,0,0,0,0

                            
;**********************************************************************
ORG 0x0000
	goto Start
org 0x0008
	retfie ;goto interup	;high priority interrupt, compatibility int.
org 0x0018
	retfie		;low priority interrupt

ORG 0x002A

ugrotabla
	movwf idegszam
	clc
	rlcf idegszam
	rlcf idegszam
	movf idegszam,W 
	nop
	addwf PCL
jmp dummy	;0
jmp dummy	;1
jmp dummy	;2
jmp dummy	;3
jmp dummy	;4
jmp dummy	;5
jmp dummy	;6
jmp dummy	;7
jmp dummy	;8
jmp dummy	;9
jmp dummy	;10	kiterjeszto
jmp dummy	;11	zoom
jmp torol	;12	off
jmp dummy	;13	p
jmp dummy	;14	l
jmp dummy	;15	i
jmp dummy	;16	volplusz
jmp dummy	;17	volminusz
jmp dummy	;18	mute
jmp dummy	;19	chcgn
jmp dummy	;20     chanup
jmp dummy	;21     chandown
jmp eloremegy	;22     fel
jmp hatramegy	;23     le
jmp felkor	;24  	put
jmp jobbrafordul;25     jobb
jmp balrafordul	;26     bal
jmp dummy	;27	menu
jmp dummy	;28  	addig, a menuvel szemben a masik oldalon
jmp visszabal	;29     vissza
jmp dummy	;30	rec
jmp dummy	;31     pause
jmp visszajobb	;32     elore
jmp dummy	;33	fast backward
jmp dummy	;34	play
jmp dummy	;35	stop
jmp dummy	;36	fast forward
jmp dummy	;37	TV
jmp dummy	;38	Teletext
jmp dummy	;39	radio
jmp dummy	;40	EPG

dummy
	ret
;------------------------------------

waitkicsi
	mov TEMPVK1,3
cimkey
	decfsz  TEMPVK1
	bra    cimkey
	ret

waitsokat
	mov TEMPVK1,80
  wk100
	mov TEMPVK2,0
  wk200
	nop
	nop
	nop
	nop
	decfsz TEMPVK2
	bra wk200
	decfsz TEMPVK1
	bra wk100
	ret



;-----------------------------------------------------------------------------
infrabe
	call varjjelre	;volt-e infrajel
	call initrevar
	call varjjelre	;beallitjuk az elso bithez
	clrf infrakodlo
	clrf infrakodhi
	call feletvar	; a kozvetkezo kozepere maszik
	call egeszetvar ; az elso ertekes bit kozepe

	mov korbejar,10
siftciklus
	carry1
	btfsc Infra
	carry0
	nop   	;a pontos idozitesekhez kell, 8MHz-en, ne valtoztass!
	nop
	nop
	nop
	nop
	nop
	rlcf infrakodlo,f
	rlcf infrakodhi,f
	call vesztegel
	call vesztegel
	call vesztegel
	call egeszetvar         ;kovetkezo bit idoszelete
	decfsz korbejar
	jmp siftciklus	

	call egeszetvar		;kicsi varakozas
	ret

;-----------------------------------------------------------

egeszetvar
	mov ideg,szelesbitido
egeszcik
	call vesztegel
	decfsz ideg
	jmp egeszcik
	ret

feletvar
	nop	;a pontos kozeprehangolas
	call vesztegel
	call vesztegel
	call vesztegel
	call vesztegel
	call vesztegel
	call vesztegel
	call vesztegel
	mov ideg,szelesbitido/2
felcik
	call vesztegel
	decfsz ideg
	jmp felcik
	ret

initrevar
	mov ideg,48	;nem dec!
inicik
	call vesztegel
	decfsz ideg
	jmp inicik
	ret

varjjelre       
     htest1
	btfsc Infra
	jmp htest1
	call vesztegel
     htest2
	btfsc Infra
	jmp htest1
	ret

vesztegel
	mov ideg2,10
    fefe
	decfsz ideg2
	jmp fefe
	ret

;-------------------------------------

torol
	bcf jobbled
	bcf balled
	mov CCPR1L,0	;a pwm1 kitolto resze
	mov CCPR2L,0	;a pwm2 kitolto resze
	bcf jobbmotoron
	bcf balmotoron
	ret

elorejobb
	bsf jobbmotoron
	mov PWMjobb,szeles	;a pwm1 kitolto resze
	ret
elorebal
	bsf balmotoron
	mov PWMbal,szeles	;a pwm2 kitolto resze
	ret

hatrajobb
	bcf jobbmotoron
	mov PWMjobb,peerketto-szeles	;a pwm1 kitolto resze
	ret
hatrabal
	bcf balmotoron
	mov PWMbal,peerketto-szeles	;a pwm2 kitolto resze
	ret


eloremegy
	bsf jobbled
	call elorebal
	call elorejobb
	call waitsokat
	ret
hatramegy
	bsf balled
	call hatrajobb
	call hatrabal
	call waitsokat
 	ret

jobbrafordul
	call elorebal
	call hatrajobb
	call waitsokat
	call waitsokat
	call elorejobb
	ret

felkor
	call elorebal
	call hatrajobb
	call waitsokat
	call waitsokat
	call waitsokat
	call waitsokat
	call waitsokat
	call waitsokat
	call waitsokat
	call waitsokat
	call waitsokat
	call waitsokat
	call waitsokat
	call waitsokat
	call waitsokat
	call torol
	ret

balrafordul
	call elorejobb
	call hatrabal
	call waitsokat
	call waitsokat
	call elorebal
	ret

visszabal
	call hatrajobb
	call hatrabal
	call waitsokat
	call waitsokat
	call waitsokat
	call waitsokat
	call waitsokat
	call waitsokat
	call balrafordul
	call elorebal
	call elorejobb
	ret

visszajobb
	call hatrajobb
	call hatrabal
	call waitsokat
	call waitsokat
	call waitsokat
	call waitsokat
	call waitsokat
	call waitsokat
	call jobbrafordul
	call elorebal
	call elorejobb
	ret


;------------------------------------------------------------------------------
Start
	clrf	PORTA
	clrf	PORTB
        clrf    PORTC	;minden port torlese
	clrf	PORTD
	clrf	PORTE

indulas
	mov OSCCON,B'11110010'	;sleep, 8MHz,primary osc.

        mov PR2,peerketto	;a teljes periodus ideje
	mov PWMjobb,0	;a kitolto resze
	mov PWMbal,0	;a kitolto resze
	mov TRISC, B'00101000'	;PortC kimenet, ket err bemenet
	mov T2CON,07		;timer2
	bsf T2CON,TMR2ON	;timer2 bekapcsolasa
	mov CCP1CON, B'00001100';pwm mod be az 1-esnel
	mov CCP2CON, B'00001100';pwm mod be a 2-esnel

	mov TRISB, B'11111111'	;portB bemenet
	mov ADCON1,0f

  utkozesdetekt
	btfss Infra
	jmp allithato
	btfss utkozes	;foldre huzos az utkozes!
	jmp elkerul
	jmp utkozesdetekt

allithato
	bsf balled
	bsf jobbled
;	call torol
	call infrabe
	call kodmegfejto
	skipc           
	call ugrotabla 
	bcf jobbled    
	bcf balled     
	jmp utkozesdetekt

elkerul
	bsf balled
	call hatrajobb
	call hatrabal
	call waitsokat
	call waitsokat
	call waitsokat
	call waitsokat

	call elorejobb
	call hatrabal
	call waitsokat
	call waitsokat

	call elorebal
	call elorejobb
	bcf balled
	jmp utkozesdetekt

hitabla
db high szam0_kodja, high szam1_kodja, high szam2_kodja, high szam3_kodja	;3
db high szam4_kodja, high szam5_kodja, high szam6_kodja, high szam7_kodja	;7
db high szam8_kodja, high szam9_kodja, high kiter_kodja, high zoom_kodja	;11
db high off_kodja,   high p_kodja,     high l_kodja,     high i_kodja		;15
db high volplusz_kodja, high volminusz_kodja, high mute_kodja, high chgchn_kodja	;19
db high chanup_kodja,   high chandown_kodja,  high fel_kodja,  high le_kodja	;23
db high put_kodja,   high jobbra_kodja,high balra_kodja, high menu_kodja	;27
db high addig_kodja, high vissza_kodja, high rec_kodja, high pause_kodja	;31
db high elore_kodja, high rev_kodja, high play_kodja, high stop_kodja	;35
db high ffw_kodja, high tv_kodja, high ttx_kodja, high radio_kodja	;39
db high epg_kodja, high epg_kodja
db 0

lotabla
db low szam0_kodja, low szam1_kodja, low szam2_kodja, low szam3_kodja	;3
db low szam4_kodja, low szam5_kodja, low szam6_kodja, low szam7_kodja	;7
db low szam8_kodja, low szam9_kodja, low kiter_kodja, low zoom_kodja	;11
db low off_kodja,   low p_kodja,     low l_kodja,     low i_kodja		;15
db low volplusz_kodja, low volminusz_kodja, low mute_kodja, low chgchn_kodja	;19
db low chanup_kodja,   low chandown_kodja,  low fel_kodja,  low le_kodja	;23
db low put_kodja,   low jobbra_kodja,low balra_kodja, low menu_kodja	;27
db low addig_kodja, low vissza_kodja, low rec_kodja, low pause_kodja	;31
db low elore_kodja, low rev_kodja, low play_kodja, low stop_kodja	;35
db low ffw_kodja, low tv_kodja, low ttx_kodja, low radio_kodja		;39
db low epg_kodja, low epg_kodja
db 0


kodmegfejto
	mov korbejar,0
kodfejlop
	tablabeallitas lotabla
	clc
	movf korbejar,w
	addwf TBLPTRL
	movlw 0
	addwfc TBLPTRH
	tblrd*+
	movbb lokod, TABLAT
	movlw 0
	cpfseq lokod
	jmp ertelmezd
	jmp nemjokod	;illetve vege
ertelmezd
	movf lokod,w
	cpfseq infrakodlo
	jmp kovkod
	tablabeallitas hitabla
	clc
	movf korbejar,w
	addwf TBLPTRL
	movlw 0
	addwfc TBLPTRH
	tblrd*+
	movbb hikod, TABLAT
	movf hikod,w
	cpfseq infrakodhi
	jmp nemjokod
jokod
	movf korbejar,w
	clc
	ret
nemjokod
	movlw 0ff
	stc
	ret
kovkod
	incf korbejar
	jmp kodfejlop

;-------------------------------------

              
END