[elektro] dsPIC EQU villámkérdés

Nemeth Tibor nemeth.tibor798 at t-online.hu
Fri Mar 4 17:30:09 CET 2011


Hali!

Hát jó, süllyedjünk a részletekbe. A gond az, hogy csak egy példát 
feltételezve tudom jobban leírni, ha meg a példa mindjárt a valóság 
lenne meg is oldanánk a problémát. No mindegy, majd küzdesz vele Te is.
Uncsi és fáradságos lesz.
Hogy legyen miről beszélni, nevezzük a szegmenseket az alábbi link 
ábrája alapján a,b,c,...g-nek!

http://en.wikipedia.org/wiki/Seven-segment_display


Tegyük fel, hogy

a	segment	Port_A	0	bit
b	segment	Port_B	3	bit
c	segment	Port_B	4	bit
d	segment	Port_B	5	bit
e	segment	Port_D	0	bit
f	segment	Port_D	2	bit
g	segment	Port_D	7	bit



;Ekkor A porton csak 0 bitet használod LCD-hez, definiálunk egy ;konstanst

LCDMASK_A	EQU	0000001b

;hasonlóképpen

LCDMASK_B	EQU	00111000b
LCDMASK_D	EQU	10000101b


;Most jön a sziszifuszi munka, a karaktergenerátor, ráadásul háromszor 
;mert három portra van szétszórva.

CHGTAB_A		
	ANDLW	15	;ha teljes hexa digitsor van,
; PCLATH ha van ilyen abba a pic-ben?
	addwf	PCL,1
	DT	1,0,1,1,0,1,1,1,1,1,1,0,1,0,1,1
CHGTAB_B
	ANDLW	15	
	addwf	PCL,1
	DT	111000b,11000b,101000b,111000b
	DT	11000b,101000b,110000b,11000b
	DT	111000b,111000b,11000b,110000b
	DT	100000b,111000b,100000b,0
;Már baromira unom, de még hátra van
CHGTAB_D
	ANDLW	15	
	addwf	PCL,1
	DT	101b,0,10000001b,10000000b
	DT	10000100b,10000100b,10000101b,0
	DT	10000101b,10000100b,10000101b,10000101b
	DT	101b,10000001b,10000101b,10000101b


;Tegyük fel, hogy az aktív állapot a Hi.
;Digit kiírása:
DIGTOLCD	;W-ben egy digit, ezt írjuk ki
; kell még két bájtnyi ram TEMP1 és TEMP2
	MOVWF	TEMP1
	MOVF	PORTA		;********ettől
	ANDLW	~LCDMASK_A	;ez itt bitenkénti negálás, ha nálad másképp lenne
	MOFWF	TEMP2
	MOVF	TEMP1,0
	CALL	CHGTAB_A
	ANDLW	LCDMASK_A	;ez fölösleges, de ha elcsesztük a ;karakter generátor 
táblát és az idegen bitet is tartalmaz, sok ;vesződségtől óv meg.
	IORWF	TEMP2
	MOVWF	PORTA           ;********eddig le kell tiltani IT-t ha ;az 
változtathat PORTA állapotán;
;Most ugyanez még kétszer B és D portra

	
	MOVF	PORTB		;********ettől
	ANDLW	~LCDMASK_B
	MOFWF	TEMP2
	MOVF	TEMP1,0
	CALL	CHGTAB_B
	ANDLW	LCDMASK_B	;ez fölösleges, de ha elcsesztük a ;karakter generátor 
táblát és az idegen bitet is tartalmaz, sok ;vesződségtől óv meg.
	IORWF	TEMP2,0
	MOVWF	PORTB           ;********eddig le kell tiltani IT-t ha ;az 
változtathat PORTB állapotán;

	
	
	MOVF	PORTD		;********ettől
	ANDLW	~LCDMASK_D
	MOFWF	TEMP2
	MOVF	TEMP1,0
	CALL	CHGTAB_D
	ANDLW	LCDMASK_D	;ez fölösleges, de ha elcsesztük a ;karakter generátor 
táblát és az idegen bitet is tartalmaz, sok ;vesződségtől óv meg.
	IORWF	TEMP2,0
	MOVWF	PORTD           ;********eddig le kell tiltani IT-t ha ;az 
változtathat PORTD állapotán;

	RETURN


Persze lehet, hogy valami kevésbé fáradságosra gondoltál, de valahogy le 
kell írni, hogy van lenyomtatva és hogy néz ki egy karakter.

Üdv.
                 Németh Tibor


2011.03.03. 22:30 keltezéssel, Adam Huszar írta:
> Igen, erről van szó, ilyen maszkolást szeretnék megvalósítani a progi
> elején, mert nem tudom egy portra rakni a kijelző lábait.. :/
>
> Ádi
>
> -----------------------------------------
>            elektro[-flame|-etc]
>



More information about the Elektro mailing list