;PICD2_A.ASM   1.0.0                                      2006.05.30.
;********************************************************************
 
;Szerző:  Szabó István  test@t-es-t.hu
;Cég:     Tudomány és Technika
 
;********************************************************************
 
;PICD-2 demonstrációs és fejlesztő áramkör bemutató program
;az áramkör bemutatása: http://www.t-es-t.hu/elokep/pic/picd02.htm
 
;a program egy komplex ütemvezérlést mutat be, egy nyomógombbal lehet
;választani a lehetséges kilenc 5-bites, 10-szavas kimenő jelsorozat
;közül
;a program bemutatása: http://www.t-es-t.hu/elokep/pic/picd02a.htm
 
;********************************************************************
 
;kapcsolási rajz: http://www.t-es-t.hu/elokep/pic/picd02.htm
;mikrovezérlő: PIC12F508
;oszcillátor típusa: belső RC oszcillátor
;órajel: 4MHz
;utasítás ciklus: 1000ns
;programmemória: 234 sor
;adatmemória: 6 bájt
;WDT müködése: tiltva
;MCLR kivezetés: I/O
;kódvédelem: nincs
 
;Kivezetések kiosztása:
;GP0 - kimenet: LED1;
;GP1 - kimenet: LED2;
;GP2 - kimenet: LED3;
;GP3 - bemenet: nyomógomb;
;GP4 - kimenet: LED4;
;GP5 - kimenet: LED5;
 
;Módosítás-történet:
;2006.05.30. 1.0.0 - első verzió;
 
;********************************************************************
;FORDÍTÁSI ADATOK
;********************************************************************
   
  processor 12f508 ;a mikrovezérlő típusa 
 
;********************************************************************
;PROGRAMOZÁSI ADATOK
;********************************************************************
   
  __config H'000A' ;konfigurációs szó: B'0000 0000 1010'  
 
;********************************************************************
;DEKLARÁCIÓK
;********************************************************************
 
;I/O kivezetések azonosítása-----------------------------------------
   
PCL 		equ 	0x02 	;Programszámláló alsó 8-bites rész
STATUS 		equ 	0x03 	;Állapotregiszter
GPIO 		equ 	0x06 	;Kimeneti regiszter
SELECTOR 	equ 	0x07 	;Számláló/címző regiszter
COUNTER 	equ 	0x08 	;Számláló/címző regiszter
ADDRESS 	equ 	0x09 	;Címző regiszter
S1 		equ 	0x0A 	;Késleltető/számláló regiszter
S2 		equ 	0x0B 	;Késleltető/számláló regiszter

;********************************************************************
;PROGRAM
;********************************************************************

;Alapbeállítások-----------------------------------------------------

	movlw 	B'10000000' 	;A 80h érték betöltése a W munkaregiszterbe 
  	option   		;A W tartalmának betöltése az OPTION regiszterbe 
  	movlw 	B'00001000' 	;A 08h érték betöltése a W munkaregiszterbe 
  	tris 	H'6' 		;A W tartalmának betöltése a TRISGPIO regiszterbe 
  	clrf 	SELECTOR 	;A SELECTOR regiszter nullázása 
  	clrf 	COUNTER 	;A COUNTER regiszter nullázása 

;Főprogram-----------------------------------------------------------

A1	btfsc 	GPIO,3 		;A GP3 bemenet tesztelése 
	goto 	C2 		;ugrás, ha GP3=1 (nincs megnyomva) 
A2 	movlw 	H'8' 		;A 08h érték betöltése a W munkaregiszterbe 
	subwf 	SELECTOR,0 	;W = SELECTOR-8, a SELECTOR nem változik 
	btfsc 	STATUS,2 	;A zérusjelző bit tesztelése 
	goto 	CLEAR 		;ugrik, ha SELECTOR=8 
	incf 	SELECTOR 	;A SELECTOR növelése 1-gyel 
	goto 	C1 		;Folytatás a C1-től 
CLEAR 	clrf 	SELECTOR 	;A SELECTOR nullázása 
C1	call 	WAIT 		;0,2s késleltetés 
	call 	WAIT 		;0,2s késleltetés 
	btfss 	GPIO,3 		;A GP3 bemenet tesztelése 
	goto 	A2 		;ugrás, ha GP3=0 (megnyomva) 
	clrf 	COUNTER 	;A COUNTER nullázása 
C2	call	WAIT		;0,2s késleltetés
	movlw 	H'9' 		;A 09h érték betöltése a W munkaregiszterbe 
	subwf 	COUNTER,0 	;W = COUNTER-9, a COUNTER nem változik 
	btfsc 	STATUS,2 	;A zérusjelző bit tesztelése 
	goto 	CLEAR2 		;ugrik, ha COUNTER=9 
	incf 	COUNTER 	;A COUNTER növelése 1-gyel 
	goto 	C3 		;Folytatás a C3-tól 
CLEAR2	clrf 	COUNTER 	;A COUNTER regiszter nullázása 
C3	bcf 	STATUS,0 	;A C túlcsordulás-jelzőbit nullázása 
	movlw 	START 		;Az első bitminta címének betöltése W-be 
	movwf 	ADDRESS 	;ADDRESS = START 
	movf 	SELECTOR,0 	;W = SELECTOR 
	movwf 	S1 		;S1 = SELECTOR 
	rlf 	S1,1 		;S1 = 2 x SELECTOR 
	rlf 	S1,0 		;W = 4 x SELECTOR 
	addwf 	ADDRESS,1 	;ADDRESS = START + 4xSELECTOR 
	rlf 	S1,1 		;S1 = 4 x SELECTOR 
	rlf 	S1,1 		;S1 = 8 x SELECTOR 
	rlf 	S1,0 		;W = 16 x SELECTOR 
	addwf 	ADDRESS,1 	;ADDRESS = START + 4xSELECTOR + 16xSELECTOR 
	rlf 	COUNTER,0 	;W = 2 x COUNTER 
	addwf 	ADDRESS,1 	;ADDRESS=START+4xSELECTOR+16xSELECTOR+2xCOUNTER 
	movf 	ADDRESS,0 	;W = ADDRESS 
  	movwf 	PCL 		;PCL = ADDRESS, ugrás a címre 
START 	movlw 	B'00110111' 	;1/1 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre 
  	movlw 	B'00000000' 	;1/2 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre 
  	movlw 	B'00110111' 	;1/3 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre
  	movlw 	B'00000000' 	;1/4 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre
  	movlw 	B'00110111' 	;1/5 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre
  	movlw 	B'00000000' 	;1/6 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre
  	movlw 	B'00110111' 	;1/7 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre
  	movlw 	B'00000000' 	;1/8 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre
  	movlw 	B'00110111' 	;1/9 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre
  	movlw 	B'00000000' 	;1/10 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre
	movlw 	B'00100101' 	;2/1 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre 
  	movlw 	B'00010010' 	;2/2 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre 
  	movlw 	B'00100101' 	;2/3 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre
  	movlw 	B'00010010' 	;2/4 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre
  	movlw 	B'00100101' 	;2/5 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre
  	movlw 	B'00010010' 	;2/6 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre
  	movlw 	B'00100101' 	;2/7 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre
  	movlw 	B'00010010' 	;2/8 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre
  	movlw 	B'00100101' 	;2/9 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre
  	movlw 	B'00010010' 	;2/10 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre
	movlw 	B'00000001' 	;3/1 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre 
  	movlw 	B'00000010' 	;3/2 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre 
  	movlw 	B'00000100' 	;3/3 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre
  	movlw 	B'00010000' 	;3/4 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre
  	movlw 	B'00100000' 	;3/5 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre
  	movlw 	B'00000001' 	;3/6 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre
  	movlw 	B'00000010' 	;3/7 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre
  	movlw 	B'00000100' 	;3/8 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre
  	movlw 	B'00010000' 	;3/9 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre
  	movlw 	B'00100000' 	;3/10 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre
	movlw 	B'00100001' 	;4/1 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre 
  	movlw 	B'00000011' 	;4/2 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre 
  	movlw 	B'00000110' 	;4/3 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre
  	movlw 	B'00010100' 	;4/4 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre
  	movlw 	B'00110000' 	;4/5 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre
  	movlw 	B'00100001' 	;4/6 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre
  	movlw 	B'00000011' 	;4/7 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre
  	movlw 	B'00000110' 	;4/8 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre
  	movlw 	B'00010100' 	;4/9 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre
  	movlw 	B'00110000' 	;4/10 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre
	movlw 	B'00110001' 	;5/1 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre 
  	movlw 	B'00100011' 	;5/2 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre 
  	movlw 	B'00000111' 	;5/3 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre
  	movlw 	B'00010110' 	;5/4 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre
  	movlw 	B'00110100' 	;5/5 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre
  	movlw 	B'00110001' 	;5/6 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre
  	movlw 	B'00100011' 	;5/7 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre
  	movlw 	B'00000111' 	;5/8 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre
  	movlw 	B'00010110' 	;5/9 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre
  	movlw 	B'00110100' 	;5/10 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre
	movlw 	B'00110101' 	;6/1 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre 
  	movlw 	B'00110011' 	;6/2 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre 
  	movlw 	B'00100111' 	;6/3 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre
  	movlw 	B'00010111' 	;6/4 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre
  	movlw 	B'00110110' 	;6/5 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre
  	movlw 	B'00110101' 	;6/6 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre
  	movlw 	B'00110011' 	;6/7 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre
  	movlw 	B'00100111' 	;6/8 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre
  	movlw 	B'00010111' 	;6/9 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre
  	movlw 	B'00110110' 	;6/10 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre
	movlw 	B'00100001' 	;7/1 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre 
  	movlw 	B'00010010' 	;7/2 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre 
  	movlw 	B'00000100' 	;7/3 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre
  	movlw 	B'00010110' 	;7/4 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre
  	movlw 	B'00110111' 	;7/5 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre
  	movlw 	B'00010110' 	;7/6 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre
  	movlw 	B'00000100' 	;7/7 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre
  	movlw 	B'00010010' 	;7/8 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre
  	movlw 	B'00100001' 	;7/9 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre
  	movlw 	B'00000000' 	;7/10 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre
	movlw 	B'00000001' 	;8/1 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre 
  	movlw 	B'00000011' 	;8/2 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre 
  	movlw 	B'00000111' 	;8/3 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre
  	movlw 	B'00010111' 	;8/4 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre
  	movlw 	B'00110111' 	;8/5 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre
  	movlw 	B'00110110' 	;8/6 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre
  	movlw 	B'00110100' 	;8/7 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre
  	movlw 	B'00110000' 	;8/8 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre
  	movlw 	B'00100000' 	;8/9 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre
  	movlw 	B'00000000' 	;8/10 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre
	movlw 	B'00000010' 	;9/1 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre 
  	movlw 	B'00100000' 	;9/2 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre 
  	movlw 	B'00000100' 	;9/3 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre
  	movlw 	B'00010000' 	;9/4 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre
  	movlw 	B'00000001' 	;9/5 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre
  	movlw 	B'00000100' 	;9/6 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre
  	movlw 	B'00100000' 	;9/7 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre
  	movlw 	B'00000010' 	;9/8 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre
  	movlw 	B'00010000' 	;9/9 bitminta 
  	goto 	OUT 		;Ugrás a megjelenítésre
  	movlw 	B'00000001' 	;9/10 bitminta 
OUT 	movwf 	GPIO 		;GPIO = W, a bitminta megjelenik a kimeneten 
  	goto 	A1 		;visszatérés a program elejére 

;Szubrutinok---------------------------------------------------------

WAIT	movlw	H'FF'		;W = 255 
	movwf	S1		;S1 = 255 
	movlw	H'FF'		;W = 255 
	movwf	S2		;S3 = 255 
REPEAT	decfsz	S1,1		;S1 = S1 - 1 
	goto	REPEAT		;Visszaugrik, ha az eredmény nem nulla 
	decfsz	S2,1		;S2 = S2 - 1 
	goto	REPEAT		;Visszaugrik, ha az eredmény nem nulla 
	retlw	H'0'		;Visszatérés a szubrutinból 

	end 
