<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
		<id>https://rn-wissen.de/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Theborg</id>
		<title>RN-Wissen.de - Benutzerbeiträge [de]</title>
		<link rel="self" type="application/atom+xml" href="https://rn-wissen.de/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Theborg"/>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Spezial:Beitr%C3%A4ge/Theborg"/>
		<updated>2026-04-11T16:11:38Z</updated>
		<subtitle>Benutzerbeiträge</subtitle>
		<generator>MediaWiki 1.25.1</generator>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=PIC_ASM_Beispiele&amp;diff=15926</id>
		<title>PIC ASM Beispiele</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=PIC_ASM_Beispiele&amp;diff=15926"/>
				<updated>2010-01-23T11:00:56Z</updated>
		
		<summary type="html">&lt;p&gt;Theborg: /* DG-16080 Text-Mode */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= PIC16(F/LF)XXX =&lt;br /&gt;
&lt;br /&gt;
== UART Routine ==&lt;br /&gt;
&lt;br /&gt;
Senden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
RS232send&lt;br /&gt;
	banksel  	TXREG			; Zur Bank von TXREG umschalten&lt;br /&gt;
	movwf	        TXREG			; Move w to TXREG &lt;br /&gt;
	banksel	        PIR1			; Zur Bank von PIR1 umschalten&lt;br /&gt;
Waittx	&lt;br /&gt;
	btfss		PIR1, TXIF		; Wenn bit in PIR1,TXIF HIGH übergehe den nästen Befehl&lt;br /&gt;
	goto		Waittx			; Gehe zu WaitTX&lt;br /&gt;
	bcf		PIR1, TXIF 		; Interrupt Flag Löschen (Optionam muss nicht umbedinkt gemacht werden)&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fehlerbehandlung:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
uart_ferr				; Auf Frameerror testen&lt;br /&gt;
	btfsc	RCSTA, FERR&lt;br /&gt;
	goto	uart_err&lt;br /&gt;
	return&lt;br /&gt;
uart_oerr				; Auf Overrunerror testen&lt;br /&gt;
	btfsc	RCSTA, OERR&lt;br /&gt;
	goto	uart_err&lt;br /&gt;
	return&lt;br /&gt;
uart_err				; Fehlerbehandlung&lt;br /&gt;
	; Fehlerbehanlungsroutine hier einfügen!!!!!!!!!!!!!!!!!&lt;br /&gt;
        ; z.b. Interupt beenden und RCREG nicht sichern&lt;br /&gt;
	bcf	RCSTA, CREN		; Fehler Bits Löschen&lt;br /&gt;
	bsf	RCSTA, CREN&lt;br /&gt;
	return				; Interupt beenden und zurück zur Main schleife&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Entfangen per Interupt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int	; Interupt STATUS und W sichern&lt;br /&gt;
	movwf	wtemp			; W Sichern&lt;br /&gt;
	swapf	STATUS, w		; Status Sichern&lt;br /&gt;
	movwf	stemp			; Status Speichern&lt;br /&gt;
	btfss	PIR1, RCIF		; Interupt vom USART wenn nicht&lt;br /&gt;
	goto	intend			; Interupt beenden&lt;br /&gt;
	; Interupt Code uart&lt;br /&gt;
	call	uart_ferr		; Auf Frame Errors Testen &amp;lt;b&amp;gt;(siehe Fehlerbehandlung) &amp;lt;/b&amp;gt;&lt;br /&gt;
	call	uart_oerr		; Auf Overrunerrors Testen&lt;br /&gt;
	movf	RCREG,w			; uart RX Reg sichern&lt;br /&gt;
	movwf	rx&lt;br /&gt;
intend  ; Interupt beenden und STATUS + W zurückspielen&lt;br /&gt;
	bcf	PIR1, RCIF		; Interuptflag Löschen&lt;br /&gt;
	swapf	stemp, w		; Status restore&lt;br /&gt;
	movwf	STATUS&lt;br /&gt;
	swapf	wtemp, f		; W restore&lt;br /&gt;
	swapf	wtemp, w&lt;br /&gt;
	retfie				; Interupt Beenden&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DG-16080 Text-Mode==&lt;br /&gt;
&lt;br /&gt;
Senden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	movlw	0x00&lt;br /&gt;
	movwf	adrl			; LOW ADR&lt;br /&gt;
	movlw	0x00&lt;br /&gt;
	movwf	adrh			; High ADR&lt;br /&gt;
	call	disp_send_char		; Adressregister setzen und vorbereiten zum Daten schreiben&lt;br /&gt;
	movlw	B'01001000'		; H&lt;br /&gt;
	call	disp_send_d&lt;br /&gt;
	movlw	B'01100001'		; a&lt;br /&gt;
	call	disp_send_d&lt;br /&gt;
	movlw	B'01110101'		; u&lt;br /&gt;
	call	disp_send_d&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Display Anschlüsse:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	#define RS	PORTC, 0	; Display Command(H)/DATA(L)&lt;br /&gt;
	#define RW	PORTC, 2	; Display Read(H)/Write(L)&lt;br /&gt;
	#define E	PORTC, 3	; Display Enable&lt;br /&gt;
	#define	CS	PORTC, 4	; Display Chip Enable(L)&lt;br /&gt;
	#define	WDATA	PORTB		; Display Datenport (PORTB)&lt;br /&gt;
	#define YM	PORTA, 3	; Touch y- ADC&lt;br /&gt;
	#define YP	PORTA, 2	; Touch y+ PWR&lt;br /&gt;
	#define XP	PORTA, 4	; Touch x+ PWR&lt;br /&gt;
	#define XM	PORTA, 1	; Touch x- ADC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dg-16080.inc&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
disp_init				; Display Inialisieren&lt;br /&gt;
	bcf	RW			; Startbedinungen herstellen&lt;br /&gt;
	nop&lt;br /&gt;
	bcf 	CS&lt;br /&gt;
	movlw	0x00			; Mode Control REG&lt;br /&gt;
	call	disp_send_c		; Send Command&lt;br /&gt;
	movlw	b'00111000'		; DB5=ON/OFF, DB4=Master/Slave, DB3=Blink, DB2=Coursor, DB1/DB0=TEXT(00)/GRAFIG(10)&lt;br /&gt;
	call	disp_send_d		; Send Data&lt;br /&gt;
	movlw	0x01			; Character Pitch REG&lt;br /&gt;
	call	disp_send_c		; Send Command&lt;br /&gt;
	movlw	0x75			; 7x8px&lt;br /&gt;
	call	disp_send_d		; Send Data&lt;br /&gt;
	movlw	0x02			; Nummer oh Char REG&lt;br /&gt;
	call	disp_send_c		; Send Command&lt;br /&gt;
	movlw	D'26'			; Anzahl horit. Zeichen -1&lt;br /&gt;
	call	disp_send_d		; Send Data&lt;br /&gt;
	movlw	0x03			; Display Duty REG&lt;br /&gt;
	call	disp_send_c		; Send Command&lt;br /&gt;
	movlw	0x4F			; Display Duty&lt;br /&gt;
	call	disp_send_d		; Send Data&lt;br /&gt;
	movlw	0x04			; Cursor Position REG&lt;br /&gt;
	call	disp_send_c		; Send Command&lt;br /&gt;
	movlw	D'7'			; Curserstrich y-Pos -1&lt;br /&gt;
	call	disp_send_d		; Send Data&lt;br /&gt;
	return&lt;br /&gt;
disp_send_c				; Send Command&lt;br /&gt;
	bsf	RS&lt;br /&gt;
	movwf	WDATA&lt;br /&gt;
	bsf	E&lt;br /&gt;
	nop&lt;br /&gt;
	bcf	E&lt;br /&gt;
	call	delay_10_µs&lt;br /&gt;
	return&lt;br /&gt;
disp_send_d				; Send DATA&lt;br /&gt;
	bcf	RS&lt;br /&gt;
	movwf	WDATA&lt;br /&gt;
	bsf	E&lt;br /&gt;
	nop&lt;br /&gt;
	bcf	E&lt;br /&gt;
	call	delay_10_µs&lt;br /&gt;
	return&lt;br /&gt;
disp_cls				; Display Löschen Textmode&lt;br /&gt;
	movlw	0x0A			; Low Reg&lt;br /&gt;
	call	disp_send_c&lt;br /&gt;
	movlw	0x00			; Low Adr&lt;br /&gt;
	call	disp_send_d&lt;br /&gt;
	movlw	0x0B 			; High Reg&lt;br /&gt;
	call	disp_send_c&lt;br /&gt;
	movlw	0x00			; High Adr&lt;br /&gt;
	call	disp_send_d &lt;br /&gt;
	movlw	0x0C			; DATA REG&lt;br /&gt;
	call	disp_send_c&lt;br /&gt;
	movlw	D'65'&lt;br /&gt;
	movwf	count&lt;br /&gt;
disp_cls_loop&lt;br /&gt;
	movlw	B'00100000'		; 65x5&lt;br /&gt;
	call	disp_send_d&lt;br /&gt;
	call	disp_send_d&lt;br /&gt;
	call	disp_send_d&lt;br /&gt;
	call	disp_send_d&lt;br /&gt;
	call	disp_send_d&lt;br /&gt;
	decfsz	count,1&lt;br /&gt;
	goto	disp_cls_loop&lt;br /&gt;
	return&lt;br /&gt;
disp_send_char				; Zeichen senden (ADRL,ADRH,Char)&lt;br /&gt;
	movlw	0x0A			; Low Reg&lt;br /&gt;
	call	disp_send_c&lt;br /&gt;
	movf	adrl,w			; Low Adr&lt;br /&gt;
	call	disp_send_d&lt;br /&gt;
	movlw	0x0B 			; High Reg&lt;br /&gt;
	call	disp_send_c&lt;br /&gt;
	movf	adrh,w			; High Adr&lt;br /&gt;
	call	disp_send_d &lt;br /&gt;
	movlw	0x0C			; DATA REG&lt;br /&gt;
	call	disp_send_c&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Touchscreen:&lt;br /&gt;
Config für die ADCs VREF=VDD&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	banksel	TRISA			; Zu Bank von TRISA umschalten&lt;br /&gt;
	movlw	B'00001011'		; PortA I/O setzen (1=In, 0=Out) (Reinfolge RB7,RB6...)&lt;br /&gt;
	movwf	TRISA			; PortA I/O setzen&lt;br /&gt;
	banksel	ADCON1			; Zur Bank von ADCON1 umschalten&lt;br /&gt;
	movlw	B'10010100'		; Alle Analog VDD=VREF, Right jutyfy, fosc/8, AN0,1,3=AN, AN2,4-7=Dig.&lt;br /&gt;
	movwf	ADCON1			; Move w to ADCON1&lt;br /&gt;
	banksel	ADCON0			; zu Bank von TRISA umschalten&lt;br /&gt;
	movlw	B'01000001'		; Enable ADC&lt;br /&gt;
	movwf	ADCON0			; Move w to ADCON0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
touch_read&lt;br /&gt;
	; Y&lt;br /&gt;
	bcf	YP&lt;br /&gt;
	bsf	XP&lt;br /&gt;
	bcf	ADCON0,5			; ADC Auswehlen&lt;br /&gt;
	bcf	ADCON0,4&lt;br /&gt;
	bsf	ADCON0,3&lt;br /&gt;
	call	adc_read			; Read ADC AD1 Daten&lt;br /&gt;
	banksel	ADRESL&lt;br /&gt;
	movf	ADRESL,w&lt;br /&gt;
	movwf	ylow&lt;br /&gt;
	banksel	ADRESH&lt;br /&gt;
	movf	ADRESH,w&lt;br /&gt;
	movwf	yhigh&lt;br /&gt;
	bcf	YP&lt;br /&gt;
	bcf	XP&lt;br /&gt;
	; X&lt;br /&gt;
	bcf	XP&lt;br /&gt;
	bsf	YP&lt;br /&gt;
	bcf	ADCON0,5			; ADC Auswehlen&lt;br /&gt;
	bsf	ADCON0,4&lt;br /&gt;
	bsf	ADCON0,3&lt;br /&gt;
	call	adc_read			; Read ADC AD3 Daten&lt;br /&gt;
	banksel	ADRESL&lt;br /&gt;
	movf	ADRESL,w&lt;br /&gt;
	movwf	xlow&lt;br /&gt;
	banksel	ADRESH&lt;br /&gt;
	movf	ADRESH,w&lt;br /&gt;
	movwf	xhigh&lt;br /&gt;
	bcf	YP&lt;br /&gt;
	bcf	XP&lt;br /&gt;
	return&lt;br /&gt;
adc_read&lt;br /&gt;
	movlw	D'30'			; Wait Acquisition Time 20MHz&lt;br /&gt;
	movwf	count&lt;br /&gt;
adc_read_loop&lt;br /&gt;
	decfsz	count,F&lt;br /&gt;
	goto	adc_read_loop&lt;br /&gt;
	bsf	ADCON0,GO		; Setze ADCON0,GO, Int A/D Conversation&lt;br /&gt;
adc_read_loop_1				; Wen ADC bereit &lt;br /&gt;
	btfsc	ADCON0,GO		; Ist ADCON0,GO = 0 dann ubergehe den nesten Befehl&lt;br /&gt;
	goto	adc_read_loop_1		; Warte bis ADC fertig&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Theborg|Theborg]] 12:00, 23. Jan 2010 (CET)&lt;br /&gt;
&lt;br /&gt;
== Schieberegister (z.b. CD4094) ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	; Datenleitungen Schiberegister alles Ausgänge&lt;br /&gt;
	#define		CLK		PORTB, 0&lt;br /&gt;
	#define		D	 	PORTB, 1&lt;br /&gt;
	#define		STR		PORTB, 2&lt;br /&gt;
	#define		OE		PORTB, 3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 cd4094_send&lt;br /&gt;
	banksel	PORTB&lt;br /&gt;
        bcf             OE&lt;br /&gt;
	bcf		STR&lt;br /&gt;
	btfsc	cdsend, 0&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 0&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 1&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 1&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 2&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 2&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 3&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 3&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 4&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 4&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 5&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 5&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 6&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 6&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 7&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 7&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	bsf		STR&lt;br /&gt;
        bsf             OE&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Theborg|Theborg]] 23:13, 15. Sep 2009 (CEST)&lt;br /&gt;
&lt;br /&gt;
== MAX7456 (S/W OSD) ==&lt;br /&gt;
&lt;br /&gt;
Variabeln und I/0:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	cblock	0x70		; Variabeln ab 0x70 setzen alle Register max 16stk.&lt;br /&gt;
	SPI_DATA_WRITE		; Zu Sendene SPI Daten&lt;br /&gt;
	SPI_DATA_READ		; Gelesend SPI Daten&lt;br /&gt;
	m_char			; Maxim7456 und sda5708 Zeichen&lt;br /&gt;
	m_pos			; Maxim7456 Position&lt;br /&gt;
	endc 			; Variabeln setzen beenden&lt;br /&gt;
&lt;br /&gt;
	#define	SPI_CS	PORTC, 7; SPI Slave Select max7456&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Config:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	; PORTC&lt;br /&gt;
	banksel	TRISC			; auf Bank 1 umschalten&lt;br /&gt;
	movlw	B'10010000'		; PortC I/O setzen (1=In, 0=Out) (Reinfolge RC7,RC6...)&lt;br /&gt;
	movwf	TRISC			; PortC I/O setzen&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	clrf	PORTC			; PortC auf 0 setzen&lt;br /&gt;
	; SPI&lt;br /&gt;
	banksel	SSPSTAT&lt;br /&gt;
	movlw	B'11000000'		; Mitlere Geschwindigkeit Output Time &lt;br /&gt;
	movwf	SSPSTAT&lt;br /&gt;
	banksel	SSPCON&lt;br /&gt;
	movlw	B'00100001'		; MODE 1,1, SPI MASTER, 1/16 Tosc SSP ON&lt;br /&gt;
	movwf	SSPCON&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bsf	SPI_CS			; SPI Slave Select aus (high)&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SPI  Sende/Enfangs Rotinen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SPI_Send&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bcf		SPI_CS			; Chip Select an (Low)&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	banksel	SSPBUF&lt;br /&gt;
	movf	SPI_DATA_WRITE, W&lt;br /&gt;
	movwf	SSPBUF&lt;br /&gt;
	banksel	SSPSTAT&lt;br /&gt;
SPI_Wait&lt;br /&gt;
	btfss	SSPSTAT, BF		; Ist das Senden Komplet ?&lt;br /&gt;
	goto	SPI_Wait			; Wen nicht gehe zu SPIWait&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bsf 		SPI_CS			; Chip Select aus (High)&lt;br /&gt;
	return &lt;br /&gt;
SPI_Read&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bcf		SPI_CS&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	banksel	SSPBUF&lt;br /&gt;
	movf	SSPBUF, W&lt;br /&gt;
	movwf	SPI_DATA_READ&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bsf		SPI_CS&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Defines ASCII to MAX7456 Charset und Config und Schreibrotienen (Achtung es kann sein das die #define nicht mit mpasm Funktioniert mit gpasm wird groß und kleinschreibung unterschiden):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
max7456_define				; Defines für den max7456 Zeichensatz&lt;br /&gt;
	#define	m_sp	0x00		; Space&lt;br /&gt;
	#define	m_1		0x01&lt;br /&gt;
	#define	m_2		0x02&lt;br /&gt;
	#define	m_3		0x03&lt;br /&gt;
	#define	m_4		0x04&lt;br /&gt;
	#define	m_5		0x05&lt;br /&gt;
	#define	m_6		0x06&lt;br /&gt;
	#define	m_7		0x07&lt;br /&gt;
	#define	m_8		0x08&lt;br /&gt;
	#define	m_9		0x09&lt;br /&gt;
	#define	m_0		0x0A&lt;br /&gt;
	#define	m_A		0x0B&lt;br /&gt;
	#define	m_B		0x0C&lt;br /&gt;
	#define	m_C		0x0D&lt;br /&gt;
	#define	m_D		0x0E&lt;br /&gt;
	#define	m_E		0x0F&lt;br /&gt;
	#define	m_F		0x10&lt;br /&gt;
	#define	m_G		0x11&lt;br /&gt;
	#define	m_H		0x12&lt;br /&gt;
	#define	m_I		0x13&lt;br /&gt;
	#define	m_J		0x14&lt;br /&gt;
	#define	m_K		0x15&lt;br /&gt;
	#define	m_L		0x16&lt;br /&gt;
	#define	m_M	0x17&lt;br /&gt;
	#define	m_N		0x18&lt;br /&gt;
	#define	m_O		0x19&lt;br /&gt;
	#define	m_P		0x1A&lt;br /&gt;
	#define	m_Q		0x1B&lt;br /&gt;
	#define	m_R		0x1C&lt;br /&gt;
	#define	m_S		0x1D&lt;br /&gt;
	#define	m_T		0x1E&lt;br /&gt;
	#define	m_U		0x1F&lt;br /&gt;
	#define	m_V		0x20&lt;br /&gt;
	#define	m_W	0x21&lt;br /&gt;
	#define	m_X		0x22&lt;br /&gt;
	#define	m_Y		0x23&lt;br /&gt;
	#define	m_Z		0x24&lt;br /&gt;
	#define	m_a		0x25&lt;br /&gt;
	#define	m_b		0x26&lt;br /&gt;
	#define	m_c		0x27&lt;br /&gt;
	#define	m_d		0x28&lt;br /&gt;
	#define	m_e		0x29&lt;br /&gt;
	#define	m_f		0x2A&lt;br /&gt;
	#define	m_g		0x2B&lt;br /&gt;
	#define	m_h		0x2C&lt;br /&gt;
	#define	m_i		0x2D&lt;br /&gt;
	#define	m_j		0x2E&lt;br /&gt;
	#define	m_k		0x2F&lt;br /&gt;
	#define	m_l		0x30&lt;br /&gt;
	#define	m_m		0x31&lt;br /&gt;
	#define	m_n		0x32&lt;br /&gt;
	#define	m_o		0x33&lt;br /&gt;
	#define	m_p		0x34&lt;br /&gt;
	#define	m_q		0x35&lt;br /&gt;
	#define	m_r		0x36&lt;br /&gt;
	#define	m_s		0x37&lt;br /&gt;
	#define	m_t		0x38&lt;br /&gt;
	#define	m_u		0x39&lt;br /&gt;
	#define	m_v		0x3A&lt;br /&gt;
	#define	m_w		0x3B&lt;br /&gt;
	#define	m_x		0x3C&lt;br /&gt;
	#define	m_y		0x3D&lt;br /&gt;
	#define	m_z		0x3E&lt;br /&gt;
	#define	m_KLa	0x3F	; (&lt;br /&gt;
	#define	m_KLz	0x40		; )&lt;br /&gt;
	#define	m_.		0x41&lt;br /&gt;
	#define	m_?		0x42&lt;br /&gt;
	#define	m_sem	0x43		; ;&lt;br /&gt;
	#define	m_:		0x44&lt;br /&gt;
	#define	m_ko	0x45		; ,&lt;br /&gt;
	#define	m_ag	0x46		; Agostroff&lt;br /&gt;
	#define	m_bs	0x47		; Backslasch&lt;br /&gt;
	#define	m_as	0x48		; Anfürungsstriche&lt;br /&gt;
	#define	m_minus  0x49		; Minus&lt;br /&gt;
	#define	m_ka	0x4A		; &amp;lt;&lt;br /&gt;
	#define	m_ga	0x4B	; &amp;gt;&lt;br /&gt;
	#define	m_at	0x4C	; @ oder at&lt;br /&gt;
	#define	m_wait	0xfb		; Wartezeichen&lt;br /&gt;
	#define	m_ls		0xf9		; Lautsprecher&lt;br /&gt;
	#define	m_lso	0xfa		; Tonsignal&lt;br /&gt;
	#define	m_ff		0xff		; Ausgefültes feld&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_conf					; Max7456 Config&lt;br /&gt;
	movlw	0x00				; VM0 Video Mode Register 0 (Write)&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'01001000'		; 0 , 1=PAL, 00=Auto Sync, 1=Enable OSD, 0=Enable OSD immer, 0=SW RST, 0=Enable Video Buffer&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	movlw	0x01				; VM1 Video Mode Register 1&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'00000100'		; 0 = NA, 000=Background MODE Brightness 100%, 11=Blinking Time 160ms, 00=Blinking Duty Cycle BT:BT&lt;br /&gt;
	movwf	SPI_DATA_WRITE&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	movlw	0x02				; HOS Horizontal Offset Register&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'00101111'		; 00 = NA, 100000 = Horitzontal Offset&lt;br /&gt;
	movwf	SPI_DATA_WRITE&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	movlw	0x03				; VOS Vertical Offset Register&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'00010111'		; 000 = NA, 10000 = Vertical Offset&lt;br /&gt;
	movwf	SPI_DATA_WRITE&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_cls					; max7456 ausgabe Löschen&lt;br /&gt;
	movlw	0x00				; VM0 Video Mode Register 0 (Write)&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'01001010'		; 0 , 1=PAL, 00=Auto Sync, 1=Enable OSD, 0=Enable OSD immer, 1=SW RST, 0=Enable Video Buffer&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	call		max7456_conf&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_add_high				; High adressbereich&lt;br /&gt;
	movlw	0x05				; Ersten 256 zeichen Low = 0x00, Letzten 256 Zeichen High=0xff &lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	0xFF&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_add_low				; Low Adressbereich&lt;br /&gt;
	movlw	0x05				; Ersten 256 zeichen Low = 000, Letzten 256 Zeichen High=225 &lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	0x00&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_send_char&lt;br /&gt;
	movlw	0x06				; Zeichen Position links nach rechts erste reihe 0-29, 30-......&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movf	m_pos, W&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	movlw	0x07				; Zeichen Sonderzeichen sihe Define in max7456.inc&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movf	m_char, W&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zeichen Senden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	movlw	D'12'			; Position&lt;br /&gt;
	movwf	m_pos&lt;br /&gt;
	movlw	m_e			; Zeichen (hier das kleine e) oder direkt den wert des Zeichens im MAX7456 REG.&lt;br /&gt;
	movwf	m_char&lt;br /&gt;
	call	max7456_send_char; Schreiben&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
High/low Adressbereich (low = ersten 256 Zeichen, High die letzten 128 Zeichen);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	call		max7456_add_low	; Low Adressbereich&lt;br /&gt;
	;call		max7456_add_high; Low Adressbereich&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Theborg|Theborg]] 23:13, 15. Sep 2009 (CEST)&lt;br /&gt;
&lt;br /&gt;
= PIC18(F/LF)xxxx =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Microcontroller]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Category:PIC]]&lt;/div&gt;</summary>
		<author><name>Theborg</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=PIC_ASM_Beispiele&amp;diff=15917</id>
		<title>PIC ASM Beispiele</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=PIC_ASM_Beispiele&amp;diff=15917"/>
				<updated>2010-01-20T19:35:05Z</updated>
		
		<summary type="html">&lt;p&gt;Theborg: /* UART Routine */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= PIC16(F/LF)XXX =&lt;br /&gt;
&lt;br /&gt;
== UART Routine ==&lt;br /&gt;
&lt;br /&gt;
Senden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
RS232send&lt;br /&gt;
	banksel  	TXREG			; Zur Bank von TXREG umschalten&lt;br /&gt;
	movwf	        TXREG			; Move w to TXREG &lt;br /&gt;
	banksel	        PIR1			; Zur Bank von PIR1 umschalten&lt;br /&gt;
Waittx	&lt;br /&gt;
	btfss		PIR1, TXIF		; Wenn bit in PIR1,TXIF HIGH übergehe den nästen Befehl&lt;br /&gt;
	goto		Waittx			; Gehe zu WaitTX&lt;br /&gt;
	bcf		PIR1, TXIF 		; Interrupt Flag Löschen (Optionam muss nicht umbedinkt gemacht werden)&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fehlerbehandlung:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
uart_ferr				; Auf Frameerror testen&lt;br /&gt;
	btfsc	RCSTA, FERR&lt;br /&gt;
	goto	uart_err&lt;br /&gt;
	return&lt;br /&gt;
uart_oerr				; Auf Overrunerror testen&lt;br /&gt;
	btfsc	RCSTA, OERR&lt;br /&gt;
	goto	uart_err&lt;br /&gt;
	return&lt;br /&gt;
uart_err				; Fehlerbehandlung&lt;br /&gt;
	; Fehlerbehanlungsroutine hier einfügen!!!!!!!!!!!!!!!!!&lt;br /&gt;
        ; z.b. Interupt beenden und RCREG nicht sichern&lt;br /&gt;
	bcf	RCSTA, CREN		; Fehler Bits Löschen&lt;br /&gt;
	bsf	RCSTA, CREN&lt;br /&gt;
	return				; Interupt beenden und zurück zur Main schleife&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Entfangen per Interupt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int	; Interupt STATUS und W sichern&lt;br /&gt;
	movwf	wtemp			; W Sichern&lt;br /&gt;
	swapf	STATUS, w		; Status Sichern&lt;br /&gt;
	movwf	stemp			; Status Speichern&lt;br /&gt;
	btfss	PIR1, RCIF		; Interupt vom USART wenn nicht&lt;br /&gt;
	goto	intend			; Interupt beenden&lt;br /&gt;
	; Interupt Code uart&lt;br /&gt;
	call	uart_ferr		; Auf Frame Errors Testen &amp;lt;b&amp;gt;(siehe Fehlerbehandlung) &amp;lt;/b&amp;gt;&lt;br /&gt;
	call	uart_oerr		; Auf Overrunerrors Testen&lt;br /&gt;
	movf	RCREG,w			; uart RX Reg sichern&lt;br /&gt;
	movwf	rx&lt;br /&gt;
intend  ; Interupt beenden und STATUS + W zurückspielen&lt;br /&gt;
	bcf	PIR1, RCIF		; Interuptflag Löschen&lt;br /&gt;
	swapf	stemp, w		; Status restore&lt;br /&gt;
	movwf	STATUS&lt;br /&gt;
	swapf	wtemp, f		; W restore&lt;br /&gt;
	swapf	wtemp, w&lt;br /&gt;
	retfie				; Interupt Beenden&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DG-16080 Text-Mode==&lt;br /&gt;
&lt;br /&gt;
Senden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	movlw	0x00&lt;br /&gt;
	movwf	adrl			; LOW ADR&lt;br /&gt;
	movlw	0x00&lt;br /&gt;
	movwf	adrh			; High ADR&lt;br /&gt;
	call	disp_send_char		; Adressregister setzen und vorbereiten zum Daten schreiben&lt;br /&gt;
	movlw	B'01001000'		; H&lt;br /&gt;
	call	disp_send_d&lt;br /&gt;
	movlw	B'01100001'		; a&lt;br /&gt;
	call	disp_send_d&lt;br /&gt;
	movlw	B'01110101'		; u&lt;br /&gt;
	call	disp_send_d&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Display Anschlüsse:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	#define RS	PORTC, 0	; Display Command(H)/DATA(L)&lt;br /&gt;
	#define RW	PORTC, 2	; Display Read(H)/Write(L)&lt;br /&gt;
	#define E	PORTC, 3	; Display Enable&lt;br /&gt;
	#define	CS	PORTC, 4	; Display Chip Enable(L)&lt;br /&gt;
	#define	WDATA	PORTB		; Display Datenport (PORTB)&lt;br /&gt;
	#define YM	PORTA, 3	; Touch y- ADC&lt;br /&gt;
	#define YP	PORTA, 2	; Touch y+ PWR&lt;br /&gt;
	#define XP	PORTA, 4	; Touch x+ PWR&lt;br /&gt;
	#define XM	PORTA, 1	; Touch x- ADC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dg-16080.inc&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
disp_init				; Display Inialisieren&lt;br /&gt;
	bcf	RW			; Startbedinungen herstellen&lt;br /&gt;
	nop&lt;br /&gt;
	bcf 	CS&lt;br /&gt;
	movlw	0x00			; Mode Control REG&lt;br /&gt;
	call	disp_send_c		; Send Command&lt;br /&gt;
	movlw	b'00111000'		; DB5=ON/OFF, DB4=Master/Slave, DB3=Blink, DB2=Coursor, DB1/DB0=TEXT(00)/GRAFIG(10)&lt;br /&gt;
	call	disp_send_d		; Send Data&lt;br /&gt;
	movlw	0x01			; Character Pitch REG&lt;br /&gt;
	call	disp_send_c		; Send Command&lt;br /&gt;
	movlw	0x75			; 7x8px&lt;br /&gt;
	call	disp_send_d		; Send Data&lt;br /&gt;
	movlw	0x02			; Nummer oh Char REG&lt;br /&gt;
	call	disp_send_c		; Send Command&lt;br /&gt;
	movlw	D'26'			; Anzahl horit. Zeichen -1&lt;br /&gt;
	call	disp_send_d		; Send Data&lt;br /&gt;
	movlw	0x03			; Display Duty REG&lt;br /&gt;
	call	disp_send_c		; Send Command&lt;br /&gt;
	movlw	0x4F			; Display Duty&lt;br /&gt;
	call	disp_send_d		; Send Data&lt;br /&gt;
	movlw	0x04			; Cursor Position REG&lt;br /&gt;
	call	disp_send_c		; Send Command&lt;br /&gt;
	movlw	D'7'			; Curserstrich y-Pos -1&lt;br /&gt;
	call	disp_send_d		; Send Data&lt;br /&gt;
	return&lt;br /&gt;
disp_send_c				; Send Command&lt;br /&gt;
	bsf	RS&lt;br /&gt;
	movwf	WDATA&lt;br /&gt;
	bsf	E&lt;br /&gt;
	nop&lt;br /&gt;
	bcf	E&lt;br /&gt;
	call	delay_10_µs&lt;br /&gt;
	return&lt;br /&gt;
disp_send_d				; Send DATA&lt;br /&gt;
	bcf	RS&lt;br /&gt;
	movwf	WDATA&lt;br /&gt;
	bsf	E&lt;br /&gt;
	nop&lt;br /&gt;
	bcf	E&lt;br /&gt;
	call	delay_10_µs&lt;br /&gt;
	return&lt;br /&gt;
disp_cls				; Display Löschen Textmode&lt;br /&gt;
	movlw	0x0A			; Low Reg&lt;br /&gt;
	call	disp_send_c&lt;br /&gt;
	movlw	0x00			; Low Adr&lt;br /&gt;
	call	disp_send_d&lt;br /&gt;
	movlw	0x0B 			; High Reg&lt;br /&gt;
	call	disp_send_c&lt;br /&gt;
	movlw	0x00			; High Adr&lt;br /&gt;
	call	disp_send_d &lt;br /&gt;
	movlw	0x0C			; DATA REG&lt;br /&gt;
	call	disp_send_c&lt;br /&gt;
	movlw	D'65'&lt;br /&gt;
	movwf	count&lt;br /&gt;
disp_cls_loop&lt;br /&gt;
	movlw	B'00100000'		; 65x5&lt;br /&gt;
	call	disp_send_d&lt;br /&gt;
	call	disp_send_d&lt;br /&gt;
	call	disp_send_d&lt;br /&gt;
	call	disp_send_d&lt;br /&gt;
	call	disp_send_d&lt;br /&gt;
	decfsz	count,1&lt;br /&gt;
	goto	disp_cls_loop&lt;br /&gt;
	return&lt;br /&gt;
disp_send_char				; Zeichen senden (ADRL,ADRH,Char)&lt;br /&gt;
	movlw	0x0A			; Low Reg&lt;br /&gt;
	call	disp_send_c&lt;br /&gt;
	movf	adrl,w			; Low Adr&lt;br /&gt;
	call	disp_send_d&lt;br /&gt;
	movlw	0x0B 			; High Reg&lt;br /&gt;
	call	disp_send_c&lt;br /&gt;
	movf	adrh,w			; High Adr&lt;br /&gt;
	call	disp_send_d &lt;br /&gt;
	movlw	0x0C			; DATA REG&lt;br /&gt;
	call	disp_send_c&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
--[[Benutzer:Theborg|Theborg]] 20:28, 20. Jan 2010 (CET)&lt;br /&gt;
&lt;br /&gt;
== Schieberegister (z.b. CD4094) ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	; Datenleitungen Schiberegister alles Ausgänge&lt;br /&gt;
	#define		CLK		PORTB, 0&lt;br /&gt;
	#define		D	 	PORTB, 1&lt;br /&gt;
	#define		STR		PORTB, 2&lt;br /&gt;
	#define		OE		PORTB, 3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 cd4094_send&lt;br /&gt;
	banksel	PORTB&lt;br /&gt;
        bcf             OE&lt;br /&gt;
	bcf		STR&lt;br /&gt;
	btfsc	cdsend, 0&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 0&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 1&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 1&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 2&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 2&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 3&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 3&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 4&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 4&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 5&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 5&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 6&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 6&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 7&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 7&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	bsf		STR&lt;br /&gt;
        bsf             OE&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Theborg|Theborg]] 23:13, 15. Sep 2009 (CEST)&lt;br /&gt;
&lt;br /&gt;
== MAX7456 (S/W OSD) ==&lt;br /&gt;
&lt;br /&gt;
Variabeln und I/0:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	cblock	0x70		; Variabeln ab 0x70 setzen alle Register max 16stk.&lt;br /&gt;
	SPI_DATA_WRITE		; Zu Sendene SPI Daten&lt;br /&gt;
	SPI_DATA_READ		; Gelesend SPI Daten&lt;br /&gt;
	m_char			; Maxim7456 und sda5708 Zeichen&lt;br /&gt;
	m_pos			; Maxim7456 Position&lt;br /&gt;
	endc 			; Variabeln setzen beenden&lt;br /&gt;
&lt;br /&gt;
	#define	SPI_CS	PORTC, 7; SPI Slave Select max7456&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Config:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	; PORTC&lt;br /&gt;
	banksel	TRISC			; auf Bank 1 umschalten&lt;br /&gt;
	movlw	B'10010000'		; PortC I/O setzen (1=In, 0=Out) (Reinfolge RC7,RC6...)&lt;br /&gt;
	movwf	TRISC			; PortC I/O setzen&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	clrf	PORTC			; PortC auf 0 setzen&lt;br /&gt;
	; SPI&lt;br /&gt;
	banksel	SSPSTAT&lt;br /&gt;
	movlw	B'11000000'		; Mitlere Geschwindigkeit Output Time &lt;br /&gt;
	movwf	SSPSTAT&lt;br /&gt;
	banksel	SSPCON&lt;br /&gt;
	movlw	B'00100001'		; MODE 1,1, SPI MASTER, 1/16 Tosc SSP ON&lt;br /&gt;
	movwf	SSPCON&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bsf	SPI_CS			; SPI Slave Select aus (high)&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SPI  Sende/Enfangs Rotinen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SPI_Send&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bcf		SPI_CS			; Chip Select an (Low)&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	banksel	SSPBUF&lt;br /&gt;
	movf	SPI_DATA_WRITE, W&lt;br /&gt;
	movwf	SSPBUF&lt;br /&gt;
	banksel	SSPSTAT&lt;br /&gt;
SPI_Wait&lt;br /&gt;
	btfss	SSPSTAT, BF		; Ist das Senden Komplet ?&lt;br /&gt;
	goto	SPI_Wait			; Wen nicht gehe zu SPIWait&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bsf 		SPI_CS			; Chip Select aus (High)&lt;br /&gt;
	return &lt;br /&gt;
SPI_Read&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bcf		SPI_CS&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	banksel	SSPBUF&lt;br /&gt;
	movf	SSPBUF, W&lt;br /&gt;
	movwf	SPI_DATA_READ&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bsf		SPI_CS&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Defines ASCII to MAX7456 Charset und Config und Schreibrotienen (Achtung es kann sein das die #define nicht mit mpasm Funktioniert mit gpasm wird groß und kleinschreibung unterschiden):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
max7456_define				; Defines für den max7456 Zeichensatz&lt;br /&gt;
	#define	m_sp	0x00		; Space&lt;br /&gt;
	#define	m_1		0x01&lt;br /&gt;
	#define	m_2		0x02&lt;br /&gt;
	#define	m_3		0x03&lt;br /&gt;
	#define	m_4		0x04&lt;br /&gt;
	#define	m_5		0x05&lt;br /&gt;
	#define	m_6		0x06&lt;br /&gt;
	#define	m_7		0x07&lt;br /&gt;
	#define	m_8		0x08&lt;br /&gt;
	#define	m_9		0x09&lt;br /&gt;
	#define	m_0		0x0A&lt;br /&gt;
	#define	m_A		0x0B&lt;br /&gt;
	#define	m_B		0x0C&lt;br /&gt;
	#define	m_C		0x0D&lt;br /&gt;
	#define	m_D		0x0E&lt;br /&gt;
	#define	m_E		0x0F&lt;br /&gt;
	#define	m_F		0x10&lt;br /&gt;
	#define	m_G		0x11&lt;br /&gt;
	#define	m_H		0x12&lt;br /&gt;
	#define	m_I		0x13&lt;br /&gt;
	#define	m_J		0x14&lt;br /&gt;
	#define	m_K		0x15&lt;br /&gt;
	#define	m_L		0x16&lt;br /&gt;
	#define	m_M	0x17&lt;br /&gt;
	#define	m_N		0x18&lt;br /&gt;
	#define	m_O		0x19&lt;br /&gt;
	#define	m_P		0x1A&lt;br /&gt;
	#define	m_Q		0x1B&lt;br /&gt;
	#define	m_R		0x1C&lt;br /&gt;
	#define	m_S		0x1D&lt;br /&gt;
	#define	m_T		0x1E&lt;br /&gt;
	#define	m_U		0x1F&lt;br /&gt;
	#define	m_V		0x20&lt;br /&gt;
	#define	m_W	0x21&lt;br /&gt;
	#define	m_X		0x22&lt;br /&gt;
	#define	m_Y		0x23&lt;br /&gt;
	#define	m_Z		0x24&lt;br /&gt;
	#define	m_a		0x25&lt;br /&gt;
	#define	m_b		0x26&lt;br /&gt;
	#define	m_c		0x27&lt;br /&gt;
	#define	m_d		0x28&lt;br /&gt;
	#define	m_e		0x29&lt;br /&gt;
	#define	m_f		0x2A&lt;br /&gt;
	#define	m_g		0x2B&lt;br /&gt;
	#define	m_h		0x2C&lt;br /&gt;
	#define	m_i		0x2D&lt;br /&gt;
	#define	m_j		0x2E&lt;br /&gt;
	#define	m_k		0x2F&lt;br /&gt;
	#define	m_l		0x30&lt;br /&gt;
	#define	m_m		0x31&lt;br /&gt;
	#define	m_n		0x32&lt;br /&gt;
	#define	m_o		0x33&lt;br /&gt;
	#define	m_p		0x34&lt;br /&gt;
	#define	m_q		0x35&lt;br /&gt;
	#define	m_r		0x36&lt;br /&gt;
	#define	m_s		0x37&lt;br /&gt;
	#define	m_t		0x38&lt;br /&gt;
	#define	m_u		0x39&lt;br /&gt;
	#define	m_v		0x3A&lt;br /&gt;
	#define	m_w		0x3B&lt;br /&gt;
	#define	m_x		0x3C&lt;br /&gt;
	#define	m_y		0x3D&lt;br /&gt;
	#define	m_z		0x3E&lt;br /&gt;
	#define	m_KLa	0x3F	; (&lt;br /&gt;
	#define	m_KLz	0x40		; )&lt;br /&gt;
	#define	m_.		0x41&lt;br /&gt;
	#define	m_?		0x42&lt;br /&gt;
	#define	m_sem	0x43		; ;&lt;br /&gt;
	#define	m_:		0x44&lt;br /&gt;
	#define	m_ko	0x45		; ,&lt;br /&gt;
	#define	m_ag	0x46		; Agostroff&lt;br /&gt;
	#define	m_bs	0x47		; Backslasch&lt;br /&gt;
	#define	m_as	0x48		; Anfürungsstriche&lt;br /&gt;
	#define	m_minus  0x49		; Minus&lt;br /&gt;
	#define	m_ka	0x4A		; &amp;lt;&lt;br /&gt;
	#define	m_ga	0x4B	; &amp;gt;&lt;br /&gt;
	#define	m_at	0x4C	; @ oder at&lt;br /&gt;
	#define	m_wait	0xfb		; Wartezeichen&lt;br /&gt;
	#define	m_ls		0xf9		; Lautsprecher&lt;br /&gt;
	#define	m_lso	0xfa		; Tonsignal&lt;br /&gt;
	#define	m_ff		0xff		; Ausgefültes feld&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_conf					; Max7456 Config&lt;br /&gt;
	movlw	0x00				; VM0 Video Mode Register 0 (Write)&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'01001000'		; 0 , 1=PAL, 00=Auto Sync, 1=Enable OSD, 0=Enable OSD immer, 0=SW RST, 0=Enable Video Buffer&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	movlw	0x01				; VM1 Video Mode Register 1&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'00000100'		; 0 = NA, 000=Background MODE Brightness 100%, 11=Blinking Time 160ms, 00=Blinking Duty Cycle BT:BT&lt;br /&gt;
	movwf	SPI_DATA_WRITE&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	movlw	0x02				; HOS Horizontal Offset Register&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'00101111'		; 00 = NA, 100000 = Horitzontal Offset&lt;br /&gt;
	movwf	SPI_DATA_WRITE&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	movlw	0x03				; VOS Vertical Offset Register&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'00010111'		; 000 = NA, 10000 = Vertical Offset&lt;br /&gt;
	movwf	SPI_DATA_WRITE&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_cls					; max7456 ausgabe Löschen&lt;br /&gt;
	movlw	0x00				; VM0 Video Mode Register 0 (Write)&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'01001010'		; 0 , 1=PAL, 00=Auto Sync, 1=Enable OSD, 0=Enable OSD immer, 1=SW RST, 0=Enable Video Buffer&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	call		max7456_conf&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_add_high				; High adressbereich&lt;br /&gt;
	movlw	0x05				; Ersten 256 zeichen Low = 0x00, Letzten 256 Zeichen High=0xff &lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	0xFF&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_add_low				; Low Adressbereich&lt;br /&gt;
	movlw	0x05				; Ersten 256 zeichen Low = 000, Letzten 256 Zeichen High=225 &lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	0x00&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_send_char&lt;br /&gt;
	movlw	0x06				; Zeichen Position links nach rechts erste reihe 0-29, 30-......&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movf	m_pos, W&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	movlw	0x07				; Zeichen Sonderzeichen sihe Define in max7456.inc&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movf	m_char, W&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zeichen Senden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	movlw	D'12'			; Position&lt;br /&gt;
	movwf	m_pos&lt;br /&gt;
	movlw	m_e			; Zeichen (hier das kleine e) oder direkt den wert des Zeichens im MAX7456 REG.&lt;br /&gt;
	movwf	m_char&lt;br /&gt;
	call	max7456_send_char; Schreiben&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
High/low Adressbereich (low = ersten 256 Zeichen, High die letzten 128 Zeichen);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	call		max7456_add_low	; Low Adressbereich&lt;br /&gt;
	;call		max7456_add_high; Low Adressbereich&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Theborg|Theborg]] 23:13, 15. Sep 2009 (CEST)&lt;br /&gt;
&lt;br /&gt;
= PIC18(F/LF)xxxx =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Microcontroller]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Category:PIC]]&lt;/div&gt;</summary>
		<author><name>Theborg</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=PIC_ASM_Beispiele&amp;diff=15916</id>
		<title>PIC ASM Beispiele</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=PIC_ASM_Beispiele&amp;diff=15916"/>
				<updated>2010-01-20T19:28:50Z</updated>
		
		<summary type="html">&lt;p&gt;Theborg: /* DG-16080 Text-Mode */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= PIC16(F/LF)XXX =&lt;br /&gt;
&lt;br /&gt;
== UART Routine ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
RS232send&lt;br /&gt;
	banksel  	TXREG			; Zur Bank von TXREG umschalten&lt;br /&gt;
	movwf	        TXREG			; Move w to TXREG &lt;br /&gt;
	banksel	        PIR1			; Zur Bank von PIR1 umschalten&lt;br /&gt;
Waittx	&lt;br /&gt;
	btfss		PIR1, TXIF		; Wenn bit in PIR1,TXIF HIGH übergehe den nästen Befehl&lt;br /&gt;
	goto		Waittx			; Gehe zu WaitTX&lt;br /&gt;
	bcf		PIR1, TXIF 		; Interrupt Flag Löschen (Optionam muss nicht umbedinkt gemacht werden)&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DG-16080 Text-Mode==&lt;br /&gt;
&lt;br /&gt;
Senden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	movlw	0x00&lt;br /&gt;
	movwf	adrl			; LOW ADR&lt;br /&gt;
	movlw	0x00&lt;br /&gt;
	movwf	adrh			; High ADR&lt;br /&gt;
	call	disp_send_char		; Adressregister setzen und vorbereiten zum Daten schreiben&lt;br /&gt;
	movlw	B'01001000'		; H&lt;br /&gt;
	call	disp_send_d&lt;br /&gt;
	movlw	B'01100001'		; a&lt;br /&gt;
	call	disp_send_d&lt;br /&gt;
	movlw	B'01110101'		; u&lt;br /&gt;
	call	disp_send_d&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Display Anschlüsse:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	#define RS	PORTC, 0	; Display Command(H)/DATA(L)&lt;br /&gt;
	#define RW	PORTC, 2	; Display Read(H)/Write(L)&lt;br /&gt;
	#define E	PORTC, 3	; Display Enable&lt;br /&gt;
	#define	CS	PORTC, 4	; Display Chip Enable(L)&lt;br /&gt;
	#define	WDATA	PORTB		; Display Datenport (PORTB)&lt;br /&gt;
	#define YM	PORTA, 3	; Touch y- ADC&lt;br /&gt;
	#define YP	PORTA, 2	; Touch y+ PWR&lt;br /&gt;
	#define XP	PORTA, 4	; Touch x+ PWR&lt;br /&gt;
	#define XM	PORTA, 1	; Touch x- ADC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dg-16080.inc&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
disp_init				; Display Inialisieren&lt;br /&gt;
	bcf	RW			; Startbedinungen herstellen&lt;br /&gt;
	nop&lt;br /&gt;
	bcf 	CS&lt;br /&gt;
	movlw	0x00			; Mode Control REG&lt;br /&gt;
	call	disp_send_c		; Send Command&lt;br /&gt;
	movlw	b'00111000'		; DB5=ON/OFF, DB4=Master/Slave, DB3=Blink, DB2=Coursor, DB1/DB0=TEXT(00)/GRAFIG(10)&lt;br /&gt;
	call	disp_send_d		; Send Data&lt;br /&gt;
	movlw	0x01			; Character Pitch REG&lt;br /&gt;
	call	disp_send_c		; Send Command&lt;br /&gt;
	movlw	0x75			; 7x8px&lt;br /&gt;
	call	disp_send_d		; Send Data&lt;br /&gt;
	movlw	0x02			; Nummer oh Char REG&lt;br /&gt;
	call	disp_send_c		; Send Command&lt;br /&gt;
	movlw	D'26'			; Anzahl horit. Zeichen -1&lt;br /&gt;
	call	disp_send_d		; Send Data&lt;br /&gt;
	movlw	0x03			; Display Duty REG&lt;br /&gt;
	call	disp_send_c		; Send Command&lt;br /&gt;
	movlw	0x4F			; Display Duty&lt;br /&gt;
	call	disp_send_d		; Send Data&lt;br /&gt;
	movlw	0x04			; Cursor Position REG&lt;br /&gt;
	call	disp_send_c		; Send Command&lt;br /&gt;
	movlw	D'7'			; Curserstrich y-Pos -1&lt;br /&gt;
	call	disp_send_d		; Send Data&lt;br /&gt;
	return&lt;br /&gt;
disp_send_c				; Send Command&lt;br /&gt;
	bsf	RS&lt;br /&gt;
	movwf	WDATA&lt;br /&gt;
	bsf	E&lt;br /&gt;
	nop&lt;br /&gt;
	bcf	E&lt;br /&gt;
	call	delay_10_µs&lt;br /&gt;
	return&lt;br /&gt;
disp_send_d				; Send DATA&lt;br /&gt;
	bcf	RS&lt;br /&gt;
	movwf	WDATA&lt;br /&gt;
	bsf	E&lt;br /&gt;
	nop&lt;br /&gt;
	bcf	E&lt;br /&gt;
	call	delay_10_µs&lt;br /&gt;
	return&lt;br /&gt;
disp_cls				; Display Löschen Textmode&lt;br /&gt;
	movlw	0x0A			; Low Reg&lt;br /&gt;
	call	disp_send_c&lt;br /&gt;
	movlw	0x00			; Low Adr&lt;br /&gt;
	call	disp_send_d&lt;br /&gt;
	movlw	0x0B 			; High Reg&lt;br /&gt;
	call	disp_send_c&lt;br /&gt;
	movlw	0x00			; High Adr&lt;br /&gt;
	call	disp_send_d &lt;br /&gt;
	movlw	0x0C			; DATA REG&lt;br /&gt;
	call	disp_send_c&lt;br /&gt;
	movlw	D'65'&lt;br /&gt;
	movwf	count&lt;br /&gt;
disp_cls_loop&lt;br /&gt;
	movlw	B'00100000'		; 65x5&lt;br /&gt;
	call	disp_send_d&lt;br /&gt;
	call	disp_send_d&lt;br /&gt;
	call	disp_send_d&lt;br /&gt;
	call	disp_send_d&lt;br /&gt;
	call	disp_send_d&lt;br /&gt;
	decfsz	count,1&lt;br /&gt;
	goto	disp_cls_loop&lt;br /&gt;
	return&lt;br /&gt;
disp_send_char				; Zeichen senden (ADRL,ADRH,Char)&lt;br /&gt;
	movlw	0x0A			; Low Reg&lt;br /&gt;
	call	disp_send_c&lt;br /&gt;
	movf	adrl,w			; Low Adr&lt;br /&gt;
	call	disp_send_d&lt;br /&gt;
	movlw	0x0B 			; High Reg&lt;br /&gt;
	call	disp_send_c&lt;br /&gt;
	movf	adrh,w			; High Adr&lt;br /&gt;
	call	disp_send_d &lt;br /&gt;
	movlw	0x0C			; DATA REG&lt;br /&gt;
	call	disp_send_c&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
--[[Benutzer:Theborg|Theborg]] 20:28, 20. Jan 2010 (CET)&lt;br /&gt;
&lt;br /&gt;
== Schieberegister (z.b. CD4094) ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	; Datenleitungen Schiberegister alles Ausgänge&lt;br /&gt;
	#define		CLK		PORTB, 0&lt;br /&gt;
	#define		D	 	PORTB, 1&lt;br /&gt;
	#define		STR		PORTB, 2&lt;br /&gt;
	#define		OE		PORTB, 3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 cd4094_send&lt;br /&gt;
	banksel	PORTB&lt;br /&gt;
        bcf             OE&lt;br /&gt;
	bcf		STR&lt;br /&gt;
	btfsc	cdsend, 0&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 0&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 1&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 1&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 2&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 2&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 3&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 3&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 4&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 4&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 5&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 5&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 6&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 6&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 7&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 7&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	bsf		STR&lt;br /&gt;
        bsf             OE&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Theborg|Theborg]] 23:13, 15. Sep 2009 (CEST)&lt;br /&gt;
&lt;br /&gt;
== MAX7456 (S/W OSD) ==&lt;br /&gt;
&lt;br /&gt;
Variabeln und I/0:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	cblock	0x70		; Variabeln ab 0x70 setzen alle Register max 16stk.&lt;br /&gt;
	SPI_DATA_WRITE		; Zu Sendene SPI Daten&lt;br /&gt;
	SPI_DATA_READ		; Gelesend SPI Daten&lt;br /&gt;
	m_char			; Maxim7456 und sda5708 Zeichen&lt;br /&gt;
	m_pos			; Maxim7456 Position&lt;br /&gt;
	endc 			; Variabeln setzen beenden&lt;br /&gt;
&lt;br /&gt;
	#define	SPI_CS	PORTC, 7; SPI Slave Select max7456&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Config:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	; PORTC&lt;br /&gt;
	banksel	TRISC			; auf Bank 1 umschalten&lt;br /&gt;
	movlw	B'10010000'		; PortC I/O setzen (1=In, 0=Out) (Reinfolge RC7,RC6...)&lt;br /&gt;
	movwf	TRISC			; PortC I/O setzen&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	clrf	PORTC			; PortC auf 0 setzen&lt;br /&gt;
	; SPI&lt;br /&gt;
	banksel	SSPSTAT&lt;br /&gt;
	movlw	B'11000000'		; Mitlere Geschwindigkeit Output Time &lt;br /&gt;
	movwf	SSPSTAT&lt;br /&gt;
	banksel	SSPCON&lt;br /&gt;
	movlw	B'00100001'		; MODE 1,1, SPI MASTER, 1/16 Tosc SSP ON&lt;br /&gt;
	movwf	SSPCON&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bsf	SPI_CS			; SPI Slave Select aus (high)&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SPI  Sende/Enfangs Rotinen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SPI_Send&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bcf		SPI_CS			; Chip Select an (Low)&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	banksel	SSPBUF&lt;br /&gt;
	movf	SPI_DATA_WRITE, W&lt;br /&gt;
	movwf	SSPBUF&lt;br /&gt;
	banksel	SSPSTAT&lt;br /&gt;
SPI_Wait&lt;br /&gt;
	btfss	SSPSTAT, BF		; Ist das Senden Komplet ?&lt;br /&gt;
	goto	SPI_Wait			; Wen nicht gehe zu SPIWait&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bsf 		SPI_CS			; Chip Select aus (High)&lt;br /&gt;
	return &lt;br /&gt;
SPI_Read&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bcf		SPI_CS&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	banksel	SSPBUF&lt;br /&gt;
	movf	SSPBUF, W&lt;br /&gt;
	movwf	SPI_DATA_READ&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bsf		SPI_CS&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Defines ASCII to MAX7456 Charset und Config und Schreibrotienen (Achtung es kann sein das die #define nicht mit mpasm Funktioniert mit gpasm wird groß und kleinschreibung unterschiden):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
max7456_define				; Defines für den max7456 Zeichensatz&lt;br /&gt;
	#define	m_sp	0x00		; Space&lt;br /&gt;
	#define	m_1		0x01&lt;br /&gt;
	#define	m_2		0x02&lt;br /&gt;
	#define	m_3		0x03&lt;br /&gt;
	#define	m_4		0x04&lt;br /&gt;
	#define	m_5		0x05&lt;br /&gt;
	#define	m_6		0x06&lt;br /&gt;
	#define	m_7		0x07&lt;br /&gt;
	#define	m_8		0x08&lt;br /&gt;
	#define	m_9		0x09&lt;br /&gt;
	#define	m_0		0x0A&lt;br /&gt;
	#define	m_A		0x0B&lt;br /&gt;
	#define	m_B		0x0C&lt;br /&gt;
	#define	m_C		0x0D&lt;br /&gt;
	#define	m_D		0x0E&lt;br /&gt;
	#define	m_E		0x0F&lt;br /&gt;
	#define	m_F		0x10&lt;br /&gt;
	#define	m_G		0x11&lt;br /&gt;
	#define	m_H		0x12&lt;br /&gt;
	#define	m_I		0x13&lt;br /&gt;
	#define	m_J		0x14&lt;br /&gt;
	#define	m_K		0x15&lt;br /&gt;
	#define	m_L		0x16&lt;br /&gt;
	#define	m_M	0x17&lt;br /&gt;
	#define	m_N		0x18&lt;br /&gt;
	#define	m_O		0x19&lt;br /&gt;
	#define	m_P		0x1A&lt;br /&gt;
	#define	m_Q		0x1B&lt;br /&gt;
	#define	m_R		0x1C&lt;br /&gt;
	#define	m_S		0x1D&lt;br /&gt;
	#define	m_T		0x1E&lt;br /&gt;
	#define	m_U		0x1F&lt;br /&gt;
	#define	m_V		0x20&lt;br /&gt;
	#define	m_W	0x21&lt;br /&gt;
	#define	m_X		0x22&lt;br /&gt;
	#define	m_Y		0x23&lt;br /&gt;
	#define	m_Z		0x24&lt;br /&gt;
	#define	m_a		0x25&lt;br /&gt;
	#define	m_b		0x26&lt;br /&gt;
	#define	m_c		0x27&lt;br /&gt;
	#define	m_d		0x28&lt;br /&gt;
	#define	m_e		0x29&lt;br /&gt;
	#define	m_f		0x2A&lt;br /&gt;
	#define	m_g		0x2B&lt;br /&gt;
	#define	m_h		0x2C&lt;br /&gt;
	#define	m_i		0x2D&lt;br /&gt;
	#define	m_j		0x2E&lt;br /&gt;
	#define	m_k		0x2F&lt;br /&gt;
	#define	m_l		0x30&lt;br /&gt;
	#define	m_m		0x31&lt;br /&gt;
	#define	m_n		0x32&lt;br /&gt;
	#define	m_o		0x33&lt;br /&gt;
	#define	m_p		0x34&lt;br /&gt;
	#define	m_q		0x35&lt;br /&gt;
	#define	m_r		0x36&lt;br /&gt;
	#define	m_s		0x37&lt;br /&gt;
	#define	m_t		0x38&lt;br /&gt;
	#define	m_u		0x39&lt;br /&gt;
	#define	m_v		0x3A&lt;br /&gt;
	#define	m_w		0x3B&lt;br /&gt;
	#define	m_x		0x3C&lt;br /&gt;
	#define	m_y		0x3D&lt;br /&gt;
	#define	m_z		0x3E&lt;br /&gt;
	#define	m_KLa	0x3F	; (&lt;br /&gt;
	#define	m_KLz	0x40		; )&lt;br /&gt;
	#define	m_.		0x41&lt;br /&gt;
	#define	m_?		0x42&lt;br /&gt;
	#define	m_sem	0x43		; ;&lt;br /&gt;
	#define	m_:		0x44&lt;br /&gt;
	#define	m_ko	0x45		; ,&lt;br /&gt;
	#define	m_ag	0x46		; Agostroff&lt;br /&gt;
	#define	m_bs	0x47		; Backslasch&lt;br /&gt;
	#define	m_as	0x48		; Anfürungsstriche&lt;br /&gt;
	#define	m_minus  0x49		; Minus&lt;br /&gt;
	#define	m_ka	0x4A		; &amp;lt;&lt;br /&gt;
	#define	m_ga	0x4B	; &amp;gt;&lt;br /&gt;
	#define	m_at	0x4C	; @ oder at&lt;br /&gt;
	#define	m_wait	0xfb		; Wartezeichen&lt;br /&gt;
	#define	m_ls		0xf9		; Lautsprecher&lt;br /&gt;
	#define	m_lso	0xfa		; Tonsignal&lt;br /&gt;
	#define	m_ff		0xff		; Ausgefültes feld&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_conf					; Max7456 Config&lt;br /&gt;
	movlw	0x00				; VM0 Video Mode Register 0 (Write)&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'01001000'		; 0 , 1=PAL, 00=Auto Sync, 1=Enable OSD, 0=Enable OSD immer, 0=SW RST, 0=Enable Video Buffer&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	movlw	0x01				; VM1 Video Mode Register 1&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'00000100'		; 0 = NA, 000=Background MODE Brightness 100%, 11=Blinking Time 160ms, 00=Blinking Duty Cycle BT:BT&lt;br /&gt;
	movwf	SPI_DATA_WRITE&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	movlw	0x02				; HOS Horizontal Offset Register&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'00101111'		; 00 = NA, 100000 = Horitzontal Offset&lt;br /&gt;
	movwf	SPI_DATA_WRITE&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	movlw	0x03				; VOS Vertical Offset Register&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'00010111'		; 000 = NA, 10000 = Vertical Offset&lt;br /&gt;
	movwf	SPI_DATA_WRITE&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_cls					; max7456 ausgabe Löschen&lt;br /&gt;
	movlw	0x00				; VM0 Video Mode Register 0 (Write)&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'01001010'		; 0 , 1=PAL, 00=Auto Sync, 1=Enable OSD, 0=Enable OSD immer, 1=SW RST, 0=Enable Video Buffer&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	call		max7456_conf&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_add_high				; High adressbereich&lt;br /&gt;
	movlw	0x05				; Ersten 256 zeichen Low = 0x00, Letzten 256 Zeichen High=0xff &lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	0xFF&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_add_low				; Low Adressbereich&lt;br /&gt;
	movlw	0x05				; Ersten 256 zeichen Low = 000, Letzten 256 Zeichen High=225 &lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	0x00&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_send_char&lt;br /&gt;
	movlw	0x06				; Zeichen Position links nach rechts erste reihe 0-29, 30-......&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movf	m_pos, W&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	movlw	0x07				; Zeichen Sonderzeichen sihe Define in max7456.inc&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movf	m_char, W&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zeichen Senden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	movlw	D'12'			; Position&lt;br /&gt;
	movwf	m_pos&lt;br /&gt;
	movlw	m_e			; Zeichen (hier das kleine e) oder direkt den wert des Zeichens im MAX7456 REG.&lt;br /&gt;
	movwf	m_char&lt;br /&gt;
	call	max7456_send_char; Schreiben&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
High/low Adressbereich (low = ersten 256 Zeichen, High die letzten 128 Zeichen);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	call		max7456_add_low	; Low Adressbereich&lt;br /&gt;
	;call		max7456_add_high; Low Adressbereich&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Theborg|Theborg]] 23:13, 15. Sep 2009 (CEST)&lt;br /&gt;
&lt;br /&gt;
= PIC18(F/LF)xxxx =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Microcontroller]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Category:PIC]]&lt;/div&gt;</summary>
		<author><name>Theborg</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=PIC_ASM_Beispiele&amp;diff=15915</id>
		<title>PIC ASM Beispiele</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=PIC_ASM_Beispiele&amp;diff=15915"/>
				<updated>2010-01-20T19:28:30Z</updated>
		
		<summary type="html">&lt;p&gt;Theborg: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= PIC16(F/LF)XXX =&lt;br /&gt;
&lt;br /&gt;
== UART Routine ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
RS232send&lt;br /&gt;
	banksel  	TXREG			; Zur Bank von TXREG umschalten&lt;br /&gt;
	movwf	        TXREG			; Move w to TXREG &lt;br /&gt;
	banksel	        PIR1			; Zur Bank von PIR1 umschalten&lt;br /&gt;
Waittx	&lt;br /&gt;
	btfss		PIR1, TXIF		; Wenn bit in PIR1,TXIF HIGH übergehe den nästen Befehl&lt;br /&gt;
	goto		Waittx			; Gehe zu WaitTX&lt;br /&gt;
	bcf		PIR1, TXIF 		; Interrupt Flag Löschen (Optionam muss nicht umbedinkt gemacht werden)&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DG-16080 Text-Mode==&lt;br /&gt;
&lt;br /&gt;
Senden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	movlw	0x00&lt;br /&gt;
	movwf	adrl			; LOW ADR&lt;br /&gt;
	movlw	0x00&lt;br /&gt;
	movwf	adrh			; High ADR&lt;br /&gt;
	call	disp_send_char		; Adressregister setzen und vorbereiten zum Daten schreiben&lt;br /&gt;
	movlw	B'01001000'		; H&lt;br /&gt;
	call	disp_send_d&lt;br /&gt;
	movlw	B'01100001'		; a&lt;br /&gt;
	call	disp_send_d&lt;br /&gt;
	movlw	B'01110101'		; u&lt;br /&gt;
	call	disp_send_d&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Display Anschlüsse:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	#define RS	PORTC, 0	; Display Command(H)/DATA(L)&lt;br /&gt;
	#define RW	PORTC, 2	; Display Read(H)/Write(L)&lt;br /&gt;
	#define E	PORTC, 3	; Display Enable&lt;br /&gt;
	#define	CS	PORTC, 4	; Display Chip Enable(L)&lt;br /&gt;
	#define	WDATA	PORTB		; Display Datenport (PORTB)&lt;br /&gt;
	#define YM	PORTA, 3	; Touch y- ADC&lt;br /&gt;
	#define YP	PORTA, 2	; Touch y+ PWR&lt;br /&gt;
	#define XP	PORTA, 4	; Touch x+ PWR&lt;br /&gt;
	#define XM	PORTA, 1	; Touch x- ADC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dg-16080.inc&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
disp_init				; Display Inialisieren&lt;br /&gt;
	bcf	RW			; Startbedinungen herstellen&lt;br /&gt;
	nop&lt;br /&gt;
	bcf 	CS&lt;br /&gt;
	movlw	0x00			; Mode Control REG&lt;br /&gt;
	call	disp_send_c		; Send Command&lt;br /&gt;
	movlw	b'00111000'		; DB5=ON/OFF, DB4=Master/Slave, DB3=Blink, DB2=Coursor, DB1/DB0=TEXT(00)/GRAFIG(10)&lt;br /&gt;
	call	disp_send_d		; Send Data&lt;br /&gt;
	movlw	0x01			; Character Pitch REG&lt;br /&gt;
	call	disp_send_c		; Send Command&lt;br /&gt;
	movlw	0x75			; 7x8px&lt;br /&gt;
	call	disp_send_d		; Send Data&lt;br /&gt;
	movlw	0x02			; Nummer oh Char REG&lt;br /&gt;
	call	disp_send_c		; Send Command&lt;br /&gt;
	movlw	D'26'			; Anzahl horit. Zeichen -1&lt;br /&gt;
	call	disp_send_d		; Send Data&lt;br /&gt;
	movlw	0x03			; Display Duty REG&lt;br /&gt;
	call	disp_send_c		; Send Command&lt;br /&gt;
	movlw	0x4F			; Display Duty&lt;br /&gt;
	call	disp_send_d		; Send Data&lt;br /&gt;
	movlw	0x04			; Cursor Position REG&lt;br /&gt;
	call	disp_send_c		; Send Command&lt;br /&gt;
	movlw	D'7'			; Curserstrich y-Pos -1&lt;br /&gt;
	call	disp_send_d		; Send Data&lt;br /&gt;
	return&lt;br /&gt;
disp_send_c				; Send Command&lt;br /&gt;
	bsf	RS&lt;br /&gt;
	movwf	WDATA&lt;br /&gt;
	bsf	E&lt;br /&gt;
	nop&lt;br /&gt;
	bcf	E&lt;br /&gt;
	call	delay_10_µs&lt;br /&gt;
	return&lt;br /&gt;
disp_send_d				; Send DATA&lt;br /&gt;
	bcf	RS&lt;br /&gt;
	movwf	WDATA&lt;br /&gt;
	bsf	E&lt;br /&gt;
	nop&lt;br /&gt;
	bcf	E&lt;br /&gt;
	call	delay_10_µs&lt;br /&gt;
	return&lt;br /&gt;
disp_cls				; Display Löschen Textmode&lt;br /&gt;
	movlw	0x0A			; Low Reg&lt;br /&gt;
	call	disp_send_c&lt;br /&gt;
	movlw	0x00			; Low Adr&lt;br /&gt;
	call	disp_send_d&lt;br /&gt;
	movlw	0x0B 			; High Reg&lt;br /&gt;
	call	disp_send_c&lt;br /&gt;
	movlw	0x00			; High Adr&lt;br /&gt;
	call	disp_send_d &lt;br /&gt;
	movlw	0x0C			; DATA REG&lt;br /&gt;
	call	disp_send_c&lt;br /&gt;
	movlw	D'65'&lt;br /&gt;
	movwf	count&lt;br /&gt;
disp_cls_loop&lt;br /&gt;
	movlw	B'00100000'		; 65x5&lt;br /&gt;
	call	disp_send_d&lt;br /&gt;
	call	disp_send_d&lt;br /&gt;
	call	disp_send_d&lt;br /&gt;
	call	disp_send_d&lt;br /&gt;
	call	disp_send_d&lt;br /&gt;
	decfsz	count,1&lt;br /&gt;
	goto	disp_cls_loop&lt;br /&gt;
	return&lt;br /&gt;
disp_send_char				; Zeichen senden (ADRL,ADRH,Char)&lt;br /&gt;
	movlw	0x0A			; Low Reg&lt;br /&gt;
	call	disp_send_c&lt;br /&gt;
	movf	adrl,w			; Low Adr&lt;br /&gt;
	call	disp_send_d&lt;br /&gt;
	movlw	0x0B 			; High Reg&lt;br /&gt;
	call	disp_send_c&lt;br /&gt;
	movf	adrh,w			; High Adr&lt;br /&gt;
	call	disp_send_d &lt;br /&gt;
	movlw	0x0C			; DATA REG&lt;br /&gt;
	call	disp_send_c&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Schieberegister (z.b. CD4094) ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	; Datenleitungen Schiberegister alles Ausgänge&lt;br /&gt;
	#define		CLK		PORTB, 0&lt;br /&gt;
	#define		D	 	PORTB, 1&lt;br /&gt;
	#define		STR		PORTB, 2&lt;br /&gt;
	#define		OE		PORTB, 3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 cd4094_send&lt;br /&gt;
	banksel	PORTB&lt;br /&gt;
        bcf             OE&lt;br /&gt;
	bcf		STR&lt;br /&gt;
	btfsc	cdsend, 0&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 0&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 1&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 1&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 2&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 2&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 3&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 3&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 4&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 4&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 5&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 5&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 6&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 6&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 7&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 7&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	bsf		STR&lt;br /&gt;
        bsf             OE&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Theborg|Theborg]] 23:13, 15. Sep 2009 (CEST)&lt;br /&gt;
&lt;br /&gt;
== MAX7456 (S/W OSD) ==&lt;br /&gt;
&lt;br /&gt;
Variabeln und I/0:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	cblock	0x70		; Variabeln ab 0x70 setzen alle Register max 16stk.&lt;br /&gt;
	SPI_DATA_WRITE		; Zu Sendene SPI Daten&lt;br /&gt;
	SPI_DATA_READ		; Gelesend SPI Daten&lt;br /&gt;
	m_char			; Maxim7456 und sda5708 Zeichen&lt;br /&gt;
	m_pos			; Maxim7456 Position&lt;br /&gt;
	endc 			; Variabeln setzen beenden&lt;br /&gt;
&lt;br /&gt;
	#define	SPI_CS	PORTC, 7; SPI Slave Select max7456&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Config:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	; PORTC&lt;br /&gt;
	banksel	TRISC			; auf Bank 1 umschalten&lt;br /&gt;
	movlw	B'10010000'		; PortC I/O setzen (1=In, 0=Out) (Reinfolge RC7,RC6...)&lt;br /&gt;
	movwf	TRISC			; PortC I/O setzen&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	clrf	PORTC			; PortC auf 0 setzen&lt;br /&gt;
	; SPI&lt;br /&gt;
	banksel	SSPSTAT&lt;br /&gt;
	movlw	B'11000000'		; Mitlere Geschwindigkeit Output Time &lt;br /&gt;
	movwf	SSPSTAT&lt;br /&gt;
	banksel	SSPCON&lt;br /&gt;
	movlw	B'00100001'		; MODE 1,1, SPI MASTER, 1/16 Tosc SSP ON&lt;br /&gt;
	movwf	SSPCON&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bsf	SPI_CS			; SPI Slave Select aus (high)&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SPI  Sende/Enfangs Rotinen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SPI_Send&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bcf		SPI_CS			; Chip Select an (Low)&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	banksel	SSPBUF&lt;br /&gt;
	movf	SPI_DATA_WRITE, W&lt;br /&gt;
	movwf	SSPBUF&lt;br /&gt;
	banksel	SSPSTAT&lt;br /&gt;
SPI_Wait&lt;br /&gt;
	btfss	SSPSTAT, BF		; Ist das Senden Komplet ?&lt;br /&gt;
	goto	SPI_Wait			; Wen nicht gehe zu SPIWait&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bsf 		SPI_CS			; Chip Select aus (High)&lt;br /&gt;
	return &lt;br /&gt;
SPI_Read&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bcf		SPI_CS&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	banksel	SSPBUF&lt;br /&gt;
	movf	SSPBUF, W&lt;br /&gt;
	movwf	SPI_DATA_READ&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bsf		SPI_CS&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Defines ASCII to MAX7456 Charset und Config und Schreibrotienen (Achtung es kann sein das die #define nicht mit mpasm Funktioniert mit gpasm wird groß und kleinschreibung unterschiden):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
max7456_define				; Defines für den max7456 Zeichensatz&lt;br /&gt;
	#define	m_sp	0x00		; Space&lt;br /&gt;
	#define	m_1		0x01&lt;br /&gt;
	#define	m_2		0x02&lt;br /&gt;
	#define	m_3		0x03&lt;br /&gt;
	#define	m_4		0x04&lt;br /&gt;
	#define	m_5		0x05&lt;br /&gt;
	#define	m_6		0x06&lt;br /&gt;
	#define	m_7		0x07&lt;br /&gt;
	#define	m_8		0x08&lt;br /&gt;
	#define	m_9		0x09&lt;br /&gt;
	#define	m_0		0x0A&lt;br /&gt;
	#define	m_A		0x0B&lt;br /&gt;
	#define	m_B		0x0C&lt;br /&gt;
	#define	m_C		0x0D&lt;br /&gt;
	#define	m_D		0x0E&lt;br /&gt;
	#define	m_E		0x0F&lt;br /&gt;
	#define	m_F		0x10&lt;br /&gt;
	#define	m_G		0x11&lt;br /&gt;
	#define	m_H		0x12&lt;br /&gt;
	#define	m_I		0x13&lt;br /&gt;
	#define	m_J		0x14&lt;br /&gt;
	#define	m_K		0x15&lt;br /&gt;
	#define	m_L		0x16&lt;br /&gt;
	#define	m_M	0x17&lt;br /&gt;
	#define	m_N		0x18&lt;br /&gt;
	#define	m_O		0x19&lt;br /&gt;
	#define	m_P		0x1A&lt;br /&gt;
	#define	m_Q		0x1B&lt;br /&gt;
	#define	m_R		0x1C&lt;br /&gt;
	#define	m_S		0x1D&lt;br /&gt;
	#define	m_T		0x1E&lt;br /&gt;
	#define	m_U		0x1F&lt;br /&gt;
	#define	m_V		0x20&lt;br /&gt;
	#define	m_W	0x21&lt;br /&gt;
	#define	m_X		0x22&lt;br /&gt;
	#define	m_Y		0x23&lt;br /&gt;
	#define	m_Z		0x24&lt;br /&gt;
	#define	m_a		0x25&lt;br /&gt;
	#define	m_b		0x26&lt;br /&gt;
	#define	m_c		0x27&lt;br /&gt;
	#define	m_d		0x28&lt;br /&gt;
	#define	m_e		0x29&lt;br /&gt;
	#define	m_f		0x2A&lt;br /&gt;
	#define	m_g		0x2B&lt;br /&gt;
	#define	m_h		0x2C&lt;br /&gt;
	#define	m_i		0x2D&lt;br /&gt;
	#define	m_j		0x2E&lt;br /&gt;
	#define	m_k		0x2F&lt;br /&gt;
	#define	m_l		0x30&lt;br /&gt;
	#define	m_m		0x31&lt;br /&gt;
	#define	m_n		0x32&lt;br /&gt;
	#define	m_o		0x33&lt;br /&gt;
	#define	m_p		0x34&lt;br /&gt;
	#define	m_q		0x35&lt;br /&gt;
	#define	m_r		0x36&lt;br /&gt;
	#define	m_s		0x37&lt;br /&gt;
	#define	m_t		0x38&lt;br /&gt;
	#define	m_u		0x39&lt;br /&gt;
	#define	m_v		0x3A&lt;br /&gt;
	#define	m_w		0x3B&lt;br /&gt;
	#define	m_x		0x3C&lt;br /&gt;
	#define	m_y		0x3D&lt;br /&gt;
	#define	m_z		0x3E&lt;br /&gt;
	#define	m_KLa	0x3F	; (&lt;br /&gt;
	#define	m_KLz	0x40		; )&lt;br /&gt;
	#define	m_.		0x41&lt;br /&gt;
	#define	m_?		0x42&lt;br /&gt;
	#define	m_sem	0x43		; ;&lt;br /&gt;
	#define	m_:		0x44&lt;br /&gt;
	#define	m_ko	0x45		; ,&lt;br /&gt;
	#define	m_ag	0x46		; Agostroff&lt;br /&gt;
	#define	m_bs	0x47		; Backslasch&lt;br /&gt;
	#define	m_as	0x48		; Anfürungsstriche&lt;br /&gt;
	#define	m_minus  0x49		; Minus&lt;br /&gt;
	#define	m_ka	0x4A		; &amp;lt;&lt;br /&gt;
	#define	m_ga	0x4B	; &amp;gt;&lt;br /&gt;
	#define	m_at	0x4C	; @ oder at&lt;br /&gt;
	#define	m_wait	0xfb		; Wartezeichen&lt;br /&gt;
	#define	m_ls		0xf9		; Lautsprecher&lt;br /&gt;
	#define	m_lso	0xfa		; Tonsignal&lt;br /&gt;
	#define	m_ff		0xff		; Ausgefültes feld&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_conf					; Max7456 Config&lt;br /&gt;
	movlw	0x00				; VM0 Video Mode Register 0 (Write)&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'01001000'		; 0 , 1=PAL, 00=Auto Sync, 1=Enable OSD, 0=Enable OSD immer, 0=SW RST, 0=Enable Video Buffer&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	movlw	0x01				; VM1 Video Mode Register 1&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'00000100'		; 0 = NA, 000=Background MODE Brightness 100%, 11=Blinking Time 160ms, 00=Blinking Duty Cycle BT:BT&lt;br /&gt;
	movwf	SPI_DATA_WRITE&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	movlw	0x02				; HOS Horizontal Offset Register&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'00101111'		; 00 = NA, 100000 = Horitzontal Offset&lt;br /&gt;
	movwf	SPI_DATA_WRITE&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	movlw	0x03				; VOS Vertical Offset Register&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'00010111'		; 000 = NA, 10000 = Vertical Offset&lt;br /&gt;
	movwf	SPI_DATA_WRITE&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_cls					; max7456 ausgabe Löschen&lt;br /&gt;
	movlw	0x00				; VM0 Video Mode Register 0 (Write)&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'01001010'		; 0 , 1=PAL, 00=Auto Sync, 1=Enable OSD, 0=Enable OSD immer, 1=SW RST, 0=Enable Video Buffer&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	call		max7456_conf&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_add_high				; High adressbereich&lt;br /&gt;
	movlw	0x05				; Ersten 256 zeichen Low = 0x00, Letzten 256 Zeichen High=0xff &lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	0xFF&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_add_low				; Low Adressbereich&lt;br /&gt;
	movlw	0x05				; Ersten 256 zeichen Low = 000, Letzten 256 Zeichen High=225 &lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	0x00&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_send_char&lt;br /&gt;
	movlw	0x06				; Zeichen Position links nach rechts erste reihe 0-29, 30-......&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movf	m_pos, W&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	movlw	0x07				; Zeichen Sonderzeichen sihe Define in max7456.inc&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movf	m_char, W&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zeichen Senden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	movlw	D'12'			; Position&lt;br /&gt;
	movwf	m_pos&lt;br /&gt;
	movlw	m_e			; Zeichen (hier das kleine e) oder direkt den wert des Zeichens im MAX7456 REG.&lt;br /&gt;
	movwf	m_char&lt;br /&gt;
	call	max7456_send_char; Schreiben&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
High/low Adressbereich (low = ersten 256 Zeichen, High die letzten 128 Zeichen);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	call		max7456_add_low	; Low Adressbereich&lt;br /&gt;
	;call		max7456_add_high; Low Adressbereich&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Theborg|Theborg]] 23:13, 15. Sep 2009 (CEST)&lt;br /&gt;
&lt;br /&gt;
= PIC18(F/LF)xxxx =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Microcontroller]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Category:PIC]]&lt;/div&gt;</summary>
		<author><name>Theborg</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=PIC_ASM_Beispiele&amp;diff=15914</id>
		<title>PIC ASM Beispiele</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=PIC_ASM_Beispiele&amp;diff=15914"/>
				<updated>2010-01-20T19:24:21Z</updated>
		
		<summary type="html">&lt;p&gt;Theborg: /* UART Routine */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= PIC16(F/LF)XXX =&lt;br /&gt;
&lt;br /&gt;
== UART Routine ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
RS232send&lt;br /&gt;
	banksel  	TXREG			; Zur Bank von TXREG umschalten&lt;br /&gt;
	movwf	        TXREG			; Move w to TXREG &lt;br /&gt;
	banksel	        PIR1			; Zur Bank von PIR1 umschalten&lt;br /&gt;
Waittx	&lt;br /&gt;
	btfss		PIR1, TXIF		; Wenn bit in PIR1,TXIF HIGH übergehe den nästen Befehl&lt;br /&gt;
	goto		Waittx			; Gehe zu WaitTX&lt;br /&gt;
	bcf		PIR1, TXIF 		; Interrupt Flag Löschen (Optionam muss nicht umbedinkt gemacht werden)&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DG-16080 Text-Mode==&lt;br /&gt;
&lt;br /&gt;
Senden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	movlw	0x00&lt;br /&gt;
	movwf	adrl			; LOW ADR&lt;br /&gt;
	movlw	0x00&lt;br /&gt;
	movwf	adrh			; High ADR&lt;br /&gt;
	call	disp_send_char		; Adressregister setzen und vorbereiten zum Daten schreiben&lt;br /&gt;
	movlw	B'01001000'		; H&lt;br /&gt;
	call	disp_send_d&lt;br /&gt;
	movlw	B'01100001'		; a&lt;br /&gt;
	call	disp_send_d&lt;br /&gt;
	movlw	B'01110101'		; u&lt;br /&gt;
	call	disp_send_d&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Display Anschlüsse:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	#define RS	PORTC, 0	; Display Command(H)/DATA(L)&lt;br /&gt;
	#define RW	PORTC, 2	; Display Read(H)/Write(L)&lt;br /&gt;
	#define E	PORTC, 3	; Display Enable&lt;br /&gt;
	#define	CS	PORTC, 4	; Display Chip Enable(L)&lt;br /&gt;
	#define	WDATA	PORTB		; Display Datenport (PORTB)&lt;br /&gt;
	#define YM	PORTA, 3	; Touch y- ADC&lt;br /&gt;
	#define YP	PORTA, 2	; Touch y+ PWR&lt;br /&gt;
	#define XP	PORTA, 4	; Touch x+ PWR&lt;br /&gt;
	#define XM	PORTA, 1	; Touch x- ADC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dg-16080.inc&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
disp_init				; Display Inialisieren&lt;br /&gt;
	bcf	RW			; Startbedinungen herstellen&lt;br /&gt;
	nop&lt;br /&gt;
	bcf 	CS&lt;br /&gt;
	movlw	0x00			; Mode Control REG&lt;br /&gt;
	call	disp_send_c		; Send Command&lt;br /&gt;
	movlw	b'00111000'		; DB5=ON/OFF, DB4=Master/Slave, DB3=Blink, DB2=Coursor, DB1/DB0=TEXT(00)/GRAFIG(10)&lt;br /&gt;
	call	disp_send_d		; Send Data&lt;br /&gt;
	movlw	0x01			; Character Pitch REG&lt;br /&gt;
	call	disp_send_c		; Send Command&lt;br /&gt;
	movlw	0x75			; 7x8px&lt;br /&gt;
	call	disp_send_d		; Send Data&lt;br /&gt;
	movlw	0x02			; Nummer oh Char REG&lt;br /&gt;
	call	disp_send_c		; Send Command&lt;br /&gt;
	movlw	D'26'			; Anzahl horit. Zeichen -1&lt;br /&gt;
	call	disp_send_d		; Send Data&lt;br /&gt;
	movlw	0x03			; Display Duty REG&lt;br /&gt;
	call	disp_send_c		; Send Command&lt;br /&gt;
	movlw	0x4F			; Display Duty&lt;br /&gt;
	call	disp_send_d		; Send Data&lt;br /&gt;
	movlw	0x04			; Cursor Position REG&lt;br /&gt;
	call	disp_send_c		; Send Command&lt;br /&gt;
	movlw	D'7'			; Curserstrich y-Pos -1&lt;br /&gt;
	call	disp_send_d		; Send Data&lt;br /&gt;
	return&lt;br /&gt;
disp_send_c				; Send Command&lt;br /&gt;
	bsf	RS&lt;br /&gt;
	movwf	WDATA&lt;br /&gt;
	bsf	E&lt;br /&gt;
	nop&lt;br /&gt;
	bcf	E&lt;br /&gt;
	call	delay_10_µs&lt;br /&gt;
	return&lt;br /&gt;
disp_send_d				; Send DATA&lt;br /&gt;
	bcf	RS&lt;br /&gt;
	movwf	WDATA&lt;br /&gt;
	bsf	E&lt;br /&gt;
	nop&lt;br /&gt;
	bcf	E&lt;br /&gt;
	call	delay_10_µs&lt;br /&gt;
	return&lt;br /&gt;
disp_cls				; Display Löschen Textmode&lt;br /&gt;
	movlw	0x0A			; Low Reg&lt;br /&gt;
	call	disp_send_c&lt;br /&gt;
	movlw	0x00			; Low Adr&lt;br /&gt;
	call	disp_send_d&lt;br /&gt;
	movlw	0x0B 			; High Reg&lt;br /&gt;
	call	disp_send_c&lt;br /&gt;
	movlw	0x00			; High Adr&lt;br /&gt;
	call	disp_send_d &lt;br /&gt;
	movlw	0x0C			; DATA REG&lt;br /&gt;
	call	disp_send_c&lt;br /&gt;
	movlw	D'65'&lt;br /&gt;
	movwf	count&lt;br /&gt;
disp_cls_loop&lt;br /&gt;
	movlw	B'00100000'		; 65x5&lt;br /&gt;
	call	disp_send_d&lt;br /&gt;
	call	disp_send_d&lt;br /&gt;
	call	disp_send_d&lt;br /&gt;
	call	disp_send_d&lt;br /&gt;
	call	disp_send_d&lt;br /&gt;
	decfsz	count,1&lt;br /&gt;
	goto	disp_cls_loop&lt;br /&gt;
	return&lt;br /&gt;
disp_send_char				; Zeichen senden (ADRL,ADRH,Char)&lt;br /&gt;
	movlw	0x0A			; Low Reg&lt;br /&gt;
	call	disp_send_c&lt;br /&gt;
	movf	adrl,w			; Low Adr&lt;br /&gt;
	call	disp_send_d&lt;br /&gt;
	movlw	0x0B 			; High Reg&lt;br /&gt;
	call	disp_send_c&lt;br /&gt;
	movf	adrh,w			; High Adr&lt;br /&gt;
	call	disp_send_d &lt;br /&gt;
	movlw	0x0C			; DATA REG&lt;br /&gt;
	call	disp_send_c&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Schieberegister (z.b. CD4094) ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	; Datenleitungen Schiberegister alles Ausgänge&lt;br /&gt;
	#define		CLK		PORTB, 0&lt;br /&gt;
	#define		D	 	PORTB, 1&lt;br /&gt;
	#define		STR		PORTB, 2&lt;br /&gt;
	#define		OE		PORTB, 3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 cd4094_send&lt;br /&gt;
	banksel	PORTB&lt;br /&gt;
        bcf             OE&lt;br /&gt;
	bcf		STR&lt;br /&gt;
	btfsc	cdsend, 0&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 0&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 1&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 1&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 2&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 2&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 3&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 3&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 4&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 4&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 5&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 5&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 6&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 6&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 7&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 7&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	bsf		STR&lt;br /&gt;
        bsf             OE&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Theborg|Theborg]] 23:13, 15. Sep 2009 (CEST)&lt;br /&gt;
&lt;br /&gt;
== MAX7456 (S/W OSD) ==&lt;br /&gt;
&lt;br /&gt;
Variabeln und I/0:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	cblock	0x70		; Variabeln ab 0x70 setzen alle Register max 16stk.&lt;br /&gt;
	SPI_DATA_WRITE		; Zu Sendene SPI Daten&lt;br /&gt;
	SPI_DATA_READ		; Gelesend SPI Daten&lt;br /&gt;
	m_char			; Maxim7456 und sda5708 Zeichen&lt;br /&gt;
	m_pos			; Maxim7456 Position&lt;br /&gt;
	endc 			; Variabeln setzen beenden&lt;br /&gt;
&lt;br /&gt;
	#define	SPI_CS	PORTC, 7; SPI Slave Select max7456&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Config:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	; PORTC&lt;br /&gt;
	banksel	TRISC			; auf Bank 1 umschalten&lt;br /&gt;
	movlw	B'10010000'		; PortC I/O setzen (1=In, 0=Out) (Reinfolge RC7,RC6...)&lt;br /&gt;
	movwf	TRISC			; PortC I/O setzen&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	clrf	PORTC			; PortC auf 0 setzen&lt;br /&gt;
	; SPI&lt;br /&gt;
	banksel	SSPSTAT&lt;br /&gt;
	movlw	B'11000000'		; Mitlere Geschwindigkeit Output Time &lt;br /&gt;
	movwf	SSPSTAT&lt;br /&gt;
	banksel	SSPCON&lt;br /&gt;
	movlw	B'00100001'		; MODE 1,1, SPI MASTER, 1/16 Tosc SSP ON&lt;br /&gt;
	movwf	SSPCON&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bsf	SPI_CS			; SPI Slave Select aus (high)&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SPI  Sende/Enfangs Rotinen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SPI_Send&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bcf		SPI_CS			; Chip Select an (Low)&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	banksel	SSPBUF&lt;br /&gt;
	movf	SPI_DATA_WRITE, W&lt;br /&gt;
	movwf	SSPBUF&lt;br /&gt;
	banksel	SSPSTAT&lt;br /&gt;
SPI_Wait&lt;br /&gt;
	btfss	SSPSTAT, BF		; Ist das Senden Komplet ?&lt;br /&gt;
	goto	SPI_Wait			; Wen nicht gehe zu SPIWait&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bsf 		SPI_CS			; Chip Select aus (High)&lt;br /&gt;
	return &lt;br /&gt;
SPI_Read&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bcf		SPI_CS&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	banksel	SSPBUF&lt;br /&gt;
	movf	SSPBUF, W&lt;br /&gt;
	movwf	SPI_DATA_READ&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bsf		SPI_CS&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Defines ASCII to MAX7456 Charset und Config und Schreibrotienen (Achtung es kann sein das die #define nicht mit mpasm Funktioniert mit gpasm wird groß und kleinschreibung unterschiden):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
max7456_define				; Defines für den max7456 Zeichensatz&lt;br /&gt;
	#define	m_sp	0x00		; Space&lt;br /&gt;
	#define	m_1		0x01&lt;br /&gt;
	#define	m_2		0x02&lt;br /&gt;
	#define	m_3		0x03&lt;br /&gt;
	#define	m_4		0x04&lt;br /&gt;
	#define	m_5		0x05&lt;br /&gt;
	#define	m_6		0x06&lt;br /&gt;
	#define	m_7		0x07&lt;br /&gt;
	#define	m_8		0x08&lt;br /&gt;
	#define	m_9		0x09&lt;br /&gt;
	#define	m_0		0x0A&lt;br /&gt;
	#define	m_A		0x0B&lt;br /&gt;
	#define	m_B		0x0C&lt;br /&gt;
	#define	m_C		0x0D&lt;br /&gt;
	#define	m_D		0x0E&lt;br /&gt;
	#define	m_E		0x0F&lt;br /&gt;
	#define	m_F		0x10&lt;br /&gt;
	#define	m_G		0x11&lt;br /&gt;
	#define	m_H		0x12&lt;br /&gt;
	#define	m_I		0x13&lt;br /&gt;
	#define	m_J		0x14&lt;br /&gt;
	#define	m_K		0x15&lt;br /&gt;
	#define	m_L		0x16&lt;br /&gt;
	#define	m_M	0x17&lt;br /&gt;
	#define	m_N		0x18&lt;br /&gt;
	#define	m_O		0x19&lt;br /&gt;
	#define	m_P		0x1A&lt;br /&gt;
	#define	m_Q		0x1B&lt;br /&gt;
	#define	m_R		0x1C&lt;br /&gt;
	#define	m_S		0x1D&lt;br /&gt;
	#define	m_T		0x1E&lt;br /&gt;
	#define	m_U		0x1F&lt;br /&gt;
	#define	m_V		0x20&lt;br /&gt;
	#define	m_W	0x21&lt;br /&gt;
	#define	m_X		0x22&lt;br /&gt;
	#define	m_Y		0x23&lt;br /&gt;
	#define	m_Z		0x24&lt;br /&gt;
	#define	m_a		0x25&lt;br /&gt;
	#define	m_b		0x26&lt;br /&gt;
	#define	m_c		0x27&lt;br /&gt;
	#define	m_d		0x28&lt;br /&gt;
	#define	m_e		0x29&lt;br /&gt;
	#define	m_f		0x2A&lt;br /&gt;
	#define	m_g		0x2B&lt;br /&gt;
	#define	m_h		0x2C&lt;br /&gt;
	#define	m_i		0x2D&lt;br /&gt;
	#define	m_j		0x2E&lt;br /&gt;
	#define	m_k		0x2F&lt;br /&gt;
	#define	m_l		0x30&lt;br /&gt;
	#define	m_m		0x31&lt;br /&gt;
	#define	m_n		0x32&lt;br /&gt;
	#define	m_o		0x33&lt;br /&gt;
	#define	m_p		0x34&lt;br /&gt;
	#define	m_q		0x35&lt;br /&gt;
	#define	m_r		0x36&lt;br /&gt;
	#define	m_s		0x37&lt;br /&gt;
	#define	m_t		0x38&lt;br /&gt;
	#define	m_u		0x39&lt;br /&gt;
	#define	m_v		0x3A&lt;br /&gt;
	#define	m_w		0x3B&lt;br /&gt;
	#define	m_x		0x3C&lt;br /&gt;
	#define	m_y		0x3D&lt;br /&gt;
	#define	m_z		0x3E&lt;br /&gt;
	#define	m_KLa	0x3F	; (&lt;br /&gt;
	#define	m_KLz	0x40		; )&lt;br /&gt;
	#define	m_.		0x41&lt;br /&gt;
	#define	m_?		0x42&lt;br /&gt;
	#define	m_sem	0x43		; ;&lt;br /&gt;
	#define	m_:		0x44&lt;br /&gt;
	#define	m_ko	0x45		; ,&lt;br /&gt;
	#define	m_ag	0x46		; Agostroff&lt;br /&gt;
	#define	m_bs	0x47		; Backslasch&lt;br /&gt;
	#define	m_as	0x48		; Anfürungsstriche&lt;br /&gt;
	#define	m_minus  0x49		; Minus&lt;br /&gt;
	#define	m_ka	0x4A		; &amp;lt;&lt;br /&gt;
	#define	m_ga	0x4B	; &amp;gt;&lt;br /&gt;
	#define	m_at	0x4C	; @ oder at&lt;br /&gt;
	#define	m_wait	0xfb		; Wartezeichen&lt;br /&gt;
	#define	m_ls		0xf9		; Lautsprecher&lt;br /&gt;
	#define	m_lso	0xfa		; Tonsignal&lt;br /&gt;
	#define	m_ff		0xff		; Ausgefültes feld&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_conf					; Max7456 Config&lt;br /&gt;
	movlw	0x00				; VM0 Video Mode Register 0 (Write)&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'01001000'		; 0 , 1=PAL, 00=Auto Sync, 1=Enable OSD, 0=Enable OSD immer, 0=SW RST, 0=Enable Video Buffer&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	movlw	0x01				; VM1 Video Mode Register 1&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'00000100'		; 0 = NA, 000=Background MODE Brightness 100%, 11=Blinking Time 160ms, 00=Blinking Duty Cycle BT:BT&lt;br /&gt;
	movwf	SPI_DATA_WRITE&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	movlw	0x02				; HOS Horizontal Offset Register&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'00101111'		; 00 = NA, 100000 = Horitzontal Offset&lt;br /&gt;
	movwf	SPI_DATA_WRITE&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	movlw	0x03				; VOS Vertical Offset Register&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'00010111'		; 000 = NA, 10000 = Vertical Offset&lt;br /&gt;
	movwf	SPI_DATA_WRITE&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_cls					; max7456 ausgabe Löschen&lt;br /&gt;
	movlw	0x00				; VM0 Video Mode Register 0 (Write)&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'01001010'		; 0 , 1=PAL, 00=Auto Sync, 1=Enable OSD, 0=Enable OSD immer, 1=SW RST, 0=Enable Video Buffer&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	call		max7456_conf&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_add_high				; High adressbereich&lt;br /&gt;
	movlw	0x05				; Ersten 256 zeichen Low = 0x00, Letzten 256 Zeichen High=0xff &lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	0xFF&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_add_low				; Low Adressbereich&lt;br /&gt;
	movlw	0x05				; Ersten 256 zeichen Low = 000, Letzten 256 Zeichen High=225 &lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	0x00&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_send_char&lt;br /&gt;
	movlw	0x06				; Zeichen Position links nach rechts erste reihe 0-29, 30-......&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movf	m_pos, W&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	movlw	0x07				; Zeichen Sonderzeichen sihe Define in max7456.inc&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movf	m_char, W&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zeichen Senden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	movlw	D'12'			; Position&lt;br /&gt;
	movwf	m_pos&lt;br /&gt;
	movlw	m_e			; Zeichen (hier das kleine e) oder direkt den wert des Zeichens im MAX7456 REG.&lt;br /&gt;
	movwf	m_char&lt;br /&gt;
	call	max7456_send_char; Schreiben&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
High/low Adressbereich (low = ersten 256 Zeichen, High die letzten 128 Zeichen);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	call		max7456_add_low	; Low Adressbereich&lt;br /&gt;
	;call		max7456_add_high; Low Adressbereich&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Theborg|Theborg]] 23:13, 15. Sep 2009 (CEST)&lt;br /&gt;
&lt;br /&gt;
= PIC18(F/LF)xxxx =&lt;/div&gt;</summary>
		<author><name>Theborg</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=PIC_ASM_Beispiele&amp;diff=15609</id>
		<title>PIC ASM Beispiele</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=PIC_ASM_Beispiele&amp;diff=15609"/>
				<updated>2009-11-03T09:12:20Z</updated>
		
		<summary type="html">&lt;p&gt;Theborg: /* UART Rotine */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= PIC16(F/LF)XXX =&lt;br /&gt;
&lt;br /&gt;
== UART Rotine ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
RS232send&lt;br /&gt;
	banksel  	TXREG			; Zur Bank von TXREG umschalten&lt;br /&gt;
	movwf	        TXREG			; Move w to TXREG &lt;br /&gt;
	banksel	        PIR1			; Zur Bank von PIR1 umschalten&lt;br /&gt;
Waittx	&lt;br /&gt;
	btfss		PIR1, TXIF		; Wenn bit in PIR1,TXIF HIGH übergehe den nästen Befehl&lt;br /&gt;
	goto		Waittx			; Gehe zu WaitTX&lt;br /&gt;
	bcf		PIR1, TXIF 		; Interrupt Flag Löschen (Optionam muss nicht umbedinkt gemacht werden)&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Schieberegister (z.b. CD4094) ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	; Datenleitungen Schiberegister alles Ausgänge&lt;br /&gt;
	#define		CLK		PORTB, 0&lt;br /&gt;
	#define		D	 	PORTB, 1&lt;br /&gt;
	#define		STR		PORTB, 2&lt;br /&gt;
	#define		OE		PORTB, 3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 cd4094_send&lt;br /&gt;
	banksel	PORTB&lt;br /&gt;
        bcf             OE&lt;br /&gt;
	bcf		STR&lt;br /&gt;
	btfsc	cdsend, 0&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 0&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 1&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 1&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 2&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 2&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 3&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 3&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 4&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 4&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 5&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 5&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 6&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 6&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 7&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 7&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	bsf		STR&lt;br /&gt;
        bsf             OE&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Theborg|Theborg]] 23:13, 15. Sep 2009 (CEST)&lt;br /&gt;
&lt;br /&gt;
== MAX7456 (S/W OSD) ==&lt;br /&gt;
&lt;br /&gt;
Variabeln und I/0:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	cblock	0x70		; Variabeln ab 0x70 setzen alle Register max 16stk.&lt;br /&gt;
	SPI_DATA_WRITE		; Zu Sendene SPI Daten&lt;br /&gt;
	SPI_DATA_READ		; Gelesend SPI Daten&lt;br /&gt;
	m_char			; Maxim7456 und sda5708 Zeichen&lt;br /&gt;
	m_pos			; Maxim7456 Position&lt;br /&gt;
	endc 			; Variabeln setzen beenden&lt;br /&gt;
&lt;br /&gt;
	#define	SPI_CS	PORTC, 7; SPI Slave Select max7456&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Config:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	; PORTC&lt;br /&gt;
	banksel	TRISC			; auf Bank 1 umschalten&lt;br /&gt;
	movlw	B'10010000'		; PortC I/O setzen (1=In, 0=Out) (Reinfolge RC7,RC6...)&lt;br /&gt;
	movwf	TRISC			; PortC I/O setzen&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	clrf	PORTC			; PortC auf 0 setzen&lt;br /&gt;
	; SPI&lt;br /&gt;
	banksel	SSPSTAT&lt;br /&gt;
	movlw	B'11000000'		; Mitlere Geschwindigkeit Output Time &lt;br /&gt;
	movwf	SSPSTAT&lt;br /&gt;
	banksel	SSPCON&lt;br /&gt;
	movlw	B'00100001'		; MODE 1,1, SPI MASTER, 1/16 Tosc SSP ON&lt;br /&gt;
	movwf	SSPCON&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bsf	SPI_CS			; SPI Slave Select aus (high)&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SPI  Sende/Enfangs Rotinen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SPI_Send&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bcf		SPI_CS			; Chip Select an (Low)&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	banksel	SSPBUF&lt;br /&gt;
	movf	SPI_DATA_WRITE, W&lt;br /&gt;
	movwf	SSPBUF&lt;br /&gt;
	banksel	SSPSTAT&lt;br /&gt;
SPI_Wait&lt;br /&gt;
	btfss	SSPSTAT, BF		; Ist das Senden Komplet ?&lt;br /&gt;
	goto	SPI_Wait			; Wen nicht gehe zu SPIWait&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bsf 		SPI_CS			; Chip Select aus (High)&lt;br /&gt;
	return &lt;br /&gt;
SPI_Read&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bcf		SPI_CS&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	banksel	SSPBUF&lt;br /&gt;
	movf	SSPBUF, W&lt;br /&gt;
	movwf	SPI_DATA_READ&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bsf		SPI_CS&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Defines ASCII to MAX7456 Charset und Config und Schreibrotienen (Achtung es kann sein das die #define nicht mit mpasm Funktioniert mit gpasm wird groß und kleinschreibung unterschiden):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
max7456_define				; Defines für den max7456 Zeichensatz&lt;br /&gt;
	#define	m_sp	0x00		; Space&lt;br /&gt;
	#define	m_1		0x01&lt;br /&gt;
	#define	m_2		0x02&lt;br /&gt;
	#define	m_3		0x03&lt;br /&gt;
	#define	m_4		0x04&lt;br /&gt;
	#define	m_5		0x05&lt;br /&gt;
	#define	m_6		0x06&lt;br /&gt;
	#define	m_7		0x07&lt;br /&gt;
	#define	m_8		0x08&lt;br /&gt;
	#define	m_9		0x09&lt;br /&gt;
	#define	m_0		0x0A&lt;br /&gt;
	#define	m_A		0x0B&lt;br /&gt;
	#define	m_B		0x0C&lt;br /&gt;
	#define	m_C		0x0D&lt;br /&gt;
	#define	m_D		0x0E&lt;br /&gt;
	#define	m_E		0x0F&lt;br /&gt;
	#define	m_F		0x10&lt;br /&gt;
	#define	m_G		0x11&lt;br /&gt;
	#define	m_H		0x12&lt;br /&gt;
	#define	m_I		0x13&lt;br /&gt;
	#define	m_J		0x14&lt;br /&gt;
	#define	m_K		0x15&lt;br /&gt;
	#define	m_L		0x16&lt;br /&gt;
	#define	m_M	0x17&lt;br /&gt;
	#define	m_N		0x18&lt;br /&gt;
	#define	m_O		0x19&lt;br /&gt;
	#define	m_P		0x1A&lt;br /&gt;
	#define	m_Q		0x1B&lt;br /&gt;
	#define	m_R		0x1C&lt;br /&gt;
	#define	m_S		0x1D&lt;br /&gt;
	#define	m_T		0x1E&lt;br /&gt;
	#define	m_U		0x1F&lt;br /&gt;
	#define	m_V		0x20&lt;br /&gt;
	#define	m_W	0x21&lt;br /&gt;
	#define	m_X		0x22&lt;br /&gt;
	#define	m_Y		0x23&lt;br /&gt;
	#define	m_Z		0x24&lt;br /&gt;
	#define	m_a		0x25&lt;br /&gt;
	#define	m_b		0x26&lt;br /&gt;
	#define	m_c		0x27&lt;br /&gt;
	#define	m_d		0x28&lt;br /&gt;
	#define	m_e		0x29&lt;br /&gt;
	#define	m_f		0x2A&lt;br /&gt;
	#define	m_g		0x2B&lt;br /&gt;
	#define	m_h		0x2C&lt;br /&gt;
	#define	m_i		0x2D&lt;br /&gt;
	#define	m_j		0x2E&lt;br /&gt;
	#define	m_k		0x2F&lt;br /&gt;
	#define	m_l		0x30&lt;br /&gt;
	#define	m_m		0x31&lt;br /&gt;
	#define	m_n		0x32&lt;br /&gt;
	#define	m_o		0x33&lt;br /&gt;
	#define	m_p		0x34&lt;br /&gt;
	#define	m_q		0x35&lt;br /&gt;
	#define	m_r		0x36&lt;br /&gt;
	#define	m_s		0x37&lt;br /&gt;
	#define	m_t		0x38&lt;br /&gt;
	#define	m_u		0x39&lt;br /&gt;
	#define	m_v		0x3A&lt;br /&gt;
	#define	m_w		0x3B&lt;br /&gt;
	#define	m_x		0x3C&lt;br /&gt;
	#define	m_y		0x3D&lt;br /&gt;
	#define	m_z		0x3E&lt;br /&gt;
	#define	m_KLa	0x3F	; (&lt;br /&gt;
	#define	m_KLz	0x40		; )&lt;br /&gt;
	#define	m_.		0x41&lt;br /&gt;
	#define	m_?		0x42&lt;br /&gt;
	#define	m_sem	0x43		; ;&lt;br /&gt;
	#define	m_:		0x44&lt;br /&gt;
	#define	m_ko	0x45		; ,&lt;br /&gt;
	#define	m_ag	0x46		; Agostroff&lt;br /&gt;
	#define	m_bs	0x47		; Backslasch&lt;br /&gt;
	#define	m_as	0x48		; Anfürungsstriche&lt;br /&gt;
	#define	m_minus  0x49		; Minus&lt;br /&gt;
	#define	m_ka	0x4A		; &amp;lt;&lt;br /&gt;
	#define	m_ga	0x4B	; &amp;gt;&lt;br /&gt;
	#define	m_at	0x4C	; @ oder at&lt;br /&gt;
	#define	m_wait	0xfb		; Wartezeichen&lt;br /&gt;
	#define	m_ls		0xf9		; Lautsprecher&lt;br /&gt;
	#define	m_lso	0xfa		; Tonsignal&lt;br /&gt;
	#define	m_ff		0xff		; Ausgefültes feld&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_conf					; Max7456 Config&lt;br /&gt;
	movlw	0x00				; VM0 Video Mode Register 0 (Write)&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'01001000'		; 0 , 1=PAL, 00=Auto Sync, 1=Enable OSD, 0=Enable OSD immer, 0=SW RST, 0=Enable Video Buffer&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	movlw	0x01				; VM1 Video Mode Register 1&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'00000100'		; 0 = NA, 000=Background MODE Brightness 100%, 11=Blinking Time 160ms, 00=Blinking Duty Cycle BT:BT&lt;br /&gt;
	movwf	SPI_DATA_WRITE&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	movlw	0x02				; HOS Horizontal Offset Register&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'00101111'		; 00 = NA, 100000 = Horitzontal Offset&lt;br /&gt;
	movwf	SPI_DATA_WRITE&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	movlw	0x03				; VOS Vertical Offset Register&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'00010111'		; 000 = NA, 10000 = Vertical Offset&lt;br /&gt;
	movwf	SPI_DATA_WRITE&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_cls					; max7456 ausgabe Löschen&lt;br /&gt;
	movlw	0x00				; VM0 Video Mode Register 0 (Write)&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'01001010'		; 0 , 1=PAL, 00=Auto Sync, 1=Enable OSD, 0=Enable OSD immer, 1=SW RST, 0=Enable Video Buffer&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	call		max7456_conf&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_add_high				; High adressbereich&lt;br /&gt;
	movlw	0x05				; Ersten 256 zeichen Low = 0x00, Letzten 256 Zeichen High=0xff &lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	0xFF&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_add_low				; Low Adressbereich&lt;br /&gt;
	movlw	0x05				; Ersten 256 zeichen Low = 000, Letzten 256 Zeichen High=225 &lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	0x00&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_send_char&lt;br /&gt;
	movlw	0x06				; Zeichen Position links nach rechts erste reihe 0-29, 30-......&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movf	m_pos, W&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	movlw	0x07				; Zeichen Sonderzeichen sihe Define in max7456.inc&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movf	m_char, W&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zeichen Senden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	movlw	D'12'			; Position&lt;br /&gt;
	movwf	m_pos&lt;br /&gt;
	movlw	m_e			; Zeichen (hier das kleine e) oder direkt den wert des Zeichens im MAX7456 REG.&lt;br /&gt;
	movwf	m_char&lt;br /&gt;
	call	max7456_send_char; Schreiben&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
High/low Adressbereich (low = ersten 256 Zeichen, High die letzten 128 Zeichen);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	call		max7456_add_low	; Low Adressbereich&lt;br /&gt;
	;call		max7456_add_high; Low Adressbereich&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Theborg|Theborg]] 23:13, 15. Sep 2009 (CEST)&lt;br /&gt;
&lt;br /&gt;
= PIC18(F/LF)xxxx =&lt;/div&gt;</summary>
		<author><name>Theborg</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=PIC_ASM_Beispiele&amp;diff=15608</id>
		<title>PIC ASM Beispiele</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=PIC_ASM_Beispiele&amp;diff=15608"/>
				<updated>2009-11-03T09:11:53Z</updated>
		
		<summary type="html">&lt;p&gt;Theborg: /* UART Rotine */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= PIC16(F/LF)XXX =&lt;br /&gt;
&lt;br /&gt;
== UART Rotine ==&lt;br /&gt;
&lt;br /&gt;
RS232send&lt;br /&gt;
	banksel  	TXREG			; Zur Bank von TXREG umschalten&lt;br /&gt;
	movwf	        TXREG			; Move w to TXREG &lt;br /&gt;
	banksel	        PIR1			; Zur Bank von PIR1 umschalten&lt;br /&gt;
Waittx	&lt;br /&gt;
	btfss		PIR1, TXIF		; Wenn bit in PIR1,TXIF HIGH übergehe den nästen Befehl&lt;br /&gt;
	goto		Waittx			; Gehe zu WaitTX&lt;br /&gt;
	bcf		PIR1, TXIF 		; Interrupt Flag Löschen (Optionam muss nicht umbedinkt gemacht werden)&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
== Schieberegister (z.b. CD4094) ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	; Datenleitungen Schiberegister alles Ausgänge&lt;br /&gt;
	#define		CLK		PORTB, 0&lt;br /&gt;
	#define		D	 	PORTB, 1&lt;br /&gt;
	#define		STR		PORTB, 2&lt;br /&gt;
	#define		OE		PORTB, 3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 cd4094_send&lt;br /&gt;
	banksel	PORTB&lt;br /&gt;
        bcf             OE&lt;br /&gt;
	bcf		STR&lt;br /&gt;
	btfsc	cdsend, 0&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 0&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 1&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 1&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 2&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 2&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 3&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 3&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 4&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 4&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 5&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 5&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 6&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 6&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 7&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 7&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	bsf		STR&lt;br /&gt;
        bsf             OE&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Theborg|Theborg]] 23:13, 15. Sep 2009 (CEST)&lt;br /&gt;
&lt;br /&gt;
== MAX7456 (S/W OSD) ==&lt;br /&gt;
&lt;br /&gt;
Variabeln und I/0:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	cblock	0x70		; Variabeln ab 0x70 setzen alle Register max 16stk.&lt;br /&gt;
	SPI_DATA_WRITE		; Zu Sendene SPI Daten&lt;br /&gt;
	SPI_DATA_READ		; Gelesend SPI Daten&lt;br /&gt;
	m_char			; Maxim7456 und sda5708 Zeichen&lt;br /&gt;
	m_pos			; Maxim7456 Position&lt;br /&gt;
	endc 			; Variabeln setzen beenden&lt;br /&gt;
&lt;br /&gt;
	#define	SPI_CS	PORTC, 7; SPI Slave Select max7456&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Config:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	; PORTC&lt;br /&gt;
	banksel	TRISC			; auf Bank 1 umschalten&lt;br /&gt;
	movlw	B'10010000'		; PortC I/O setzen (1=In, 0=Out) (Reinfolge RC7,RC6...)&lt;br /&gt;
	movwf	TRISC			; PortC I/O setzen&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	clrf	PORTC			; PortC auf 0 setzen&lt;br /&gt;
	; SPI&lt;br /&gt;
	banksel	SSPSTAT&lt;br /&gt;
	movlw	B'11000000'		; Mitlere Geschwindigkeit Output Time &lt;br /&gt;
	movwf	SSPSTAT&lt;br /&gt;
	banksel	SSPCON&lt;br /&gt;
	movlw	B'00100001'		; MODE 1,1, SPI MASTER, 1/16 Tosc SSP ON&lt;br /&gt;
	movwf	SSPCON&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bsf	SPI_CS			; SPI Slave Select aus (high)&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SPI  Sende/Enfangs Rotinen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SPI_Send&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bcf		SPI_CS			; Chip Select an (Low)&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	banksel	SSPBUF&lt;br /&gt;
	movf	SPI_DATA_WRITE, W&lt;br /&gt;
	movwf	SSPBUF&lt;br /&gt;
	banksel	SSPSTAT&lt;br /&gt;
SPI_Wait&lt;br /&gt;
	btfss	SSPSTAT, BF		; Ist das Senden Komplet ?&lt;br /&gt;
	goto	SPI_Wait			; Wen nicht gehe zu SPIWait&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bsf 		SPI_CS			; Chip Select aus (High)&lt;br /&gt;
	return &lt;br /&gt;
SPI_Read&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bcf		SPI_CS&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	banksel	SSPBUF&lt;br /&gt;
	movf	SSPBUF, W&lt;br /&gt;
	movwf	SPI_DATA_READ&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bsf		SPI_CS&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Defines ASCII to MAX7456 Charset und Config und Schreibrotienen (Achtung es kann sein das die #define nicht mit mpasm Funktioniert mit gpasm wird groß und kleinschreibung unterschiden):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
max7456_define				; Defines für den max7456 Zeichensatz&lt;br /&gt;
	#define	m_sp	0x00		; Space&lt;br /&gt;
	#define	m_1		0x01&lt;br /&gt;
	#define	m_2		0x02&lt;br /&gt;
	#define	m_3		0x03&lt;br /&gt;
	#define	m_4		0x04&lt;br /&gt;
	#define	m_5		0x05&lt;br /&gt;
	#define	m_6		0x06&lt;br /&gt;
	#define	m_7		0x07&lt;br /&gt;
	#define	m_8		0x08&lt;br /&gt;
	#define	m_9		0x09&lt;br /&gt;
	#define	m_0		0x0A&lt;br /&gt;
	#define	m_A		0x0B&lt;br /&gt;
	#define	m_B		0x0C&lt;br /&gt;
	#define	m_C		0x0D&lt;br /&gt;
	#define	m_D		0x0E&lt;br /&gt;
	#define	m_E		0x0F&lt;br /&gt;
	#define	m_F		0x10&lt;br /&gt;
	#define	m_G		0x11&lt;br /&gt;
	#define	m_H		0x12&lt;br /&gt;
	#define	m_I		0x13&lt;br /&gt;
	#define	m_J		0x14&lt;br /&gt;
	#define	m_K		0x15&lt;br /&gt;
	#define	m_L		0x16&lt;br /&gt;
	#define	m_M	0x17&lt;br /&gt;
	#define	m_N		0x18&lt;br /&gt;
	#define	m_O		0x19&lt;br /&gt;
	#define	m_P		0x1A&lt;br /&gt;
	#define	m_Q		0x1B&lt;br /&gt;
	#define	m_R		0x1C&lt;br /&gt;
	#define	m_S		0x1D&lt;br /&gt;
	#define	m_T		0x1E&lt;br /&gt;
	#define	m_U		0x1F&lt;br /&gt;
	#define	m_V		0x20&lt;br /&gt;
	#define	m_W	0x21&lt;br /&gt;
	#define	m_X		0x22&lt;br /&gt;
	#define	m_Y		0x23&lt;br /&gt;
	#define	m_Z		0x24&lt;br /&gt;
	#define	m_a		0x25&lt;br /&gt;
	#define	m_b		0x26&lt;br /&gt;
	#define	m_c		0x27&lt;br /&gt;
	#define	m_d		0x28&lt;br /&gt;
	#define	m_e		0x29&lt;br /&gt;
	#define	m_f		0x2A&lt;br /&gt;
	#define	m_g		0x2B&lt;br /&gt;
	#define	m_h		0x2C&lt;br /&gt;
	#define	m_i		0x2D&lt;br /&gt;
	#define	m_j		0x2E&lt;br /&gt;
	#define	m_k		0x2F&lt;br /&gt;
	#define	m_l		0x30&lt;br /&gt;
	#define	m_m		0x31&lt;br /&gt;
	#define	m_n		0x32&lt;br /&gt;
	#define	m_o		0x33&lt;br /&gt;
	#define	m_p		0x34&lt;br /&gt;
	#define	m_q		0x35&lt;br /&gt;
	#define	m_r		0x36&lt;br /&gt;
	#define	m_s		0x37&lt;br /&gt;
	#define	m_t		0x38&lt;br /&gt;
	#define	m_u		0x39&lt;br /&gt;
	#define	m_v		0x3A&lt;br /&gt;
	#define	m_w		0x3B&lt;br /&gt;
	#define	m_x		0x3C&lt;br /&gt;
	#define	m_y		0x3D&lt;br /&gt;
	#define	m_z		0x3E&lt;br /&gt;
	#define	m_KLa	0x3F	; (&lt;br /&gt;
	#define	m_KLz	0x40		; )&lt;br /&gt;
	#define	m_.		0x41&lt;br /&gt;
	#define	m_?		0x42&lt;br /&gt;
	#define	m_sem	0x43		; ;&lt;br /&gt;
	#define	m_:		0x44&lt;br /&gt;
	#define	m_ko	0x45		; ,&lt;br /&gt;
	#define	m_ag	0x46		; Agostroff&lt;br /&gt;
	#define	m_bs	0x47		; Backslasch&lt;br /&gt;
	#define	m_as	0x48		; Anfürungsstriche&lt;br /&gt;
	#define	m_minus  0x49		; Minus&lt;br /&gt;
	#define	m_ka	0x4A		; &amp;lt;&lt;br /&gt;
	#define	m_ga	0x4B	; &amp;gt;&lt;br /&gt;
	#define	m_at	0x4C	; @ oder at&lt;br /&gt;
	#define	m_wait	0xfb		; Wartezeichen&lt;br /&gt;
	#define	m_ls		0xf9		; Lautsprecher&lt;br /&gt;
	#define	m_lso	0xfa		; Tonsignal&lt;br /&gt;
	#define	m_ff		0xff		; Ausgefültes feld&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_conf					; Max7456 Config&lt;br /&gt;
	movlw	0x00				; VM0 Video Mode Register 0 (Write)&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'01001000'		; 0 , 1=PAL, 00=Auto Sync, 1=Enable OSD, 0=Enable OSD immer, 0=SW RST, 0=Enable Video Buffer&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	movlw	0x01				; VM1 Video Mode Register 1&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'00000100'		; 0 = NA, 000=Background MODE Brightness 100%, 11=Blinking Time 160ms, 00=Blinking Duty Cycle BT:BT&lt;br /&gt;
	movwf	SPI_DATA_WRITE&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	movlw	0x02				; HOS Horizontal Offset Register&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'00101111'		; 00 = NA, 100000 = Horitzontal Offset&lt;br /&gt;
	movwf	SPI_DATA_WRITE&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	movlw	0x03				; VOS Vertical Offset Register&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'00010111'		; 000 = NA, 10000 = Vertical Offset&lt;br /&gt;
	movwf	SPI_DATA_WRITE&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_cls					; max7456 ausgabe Löschen&lt;br /&gt;
	movlw	0x00				; VM0 Video Mode Register 0 (Write)&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'01001010'		; 0 , 1=PAL, 00=Auto Sync, 1=Enable OSD, 0=Enable OSD immer, 1=SW RST, 0=Enable Video Buffer&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	call		max7456_conf&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_add_high				; High adressbereich&lt;br /&gt;
	movlw	0x05				; Ersten 256 zeichen Low = 0x00, Letzten 256 Zeichen High=0xff &lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	0xFF&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_add_low				; Low Adressbereich&lt;br /&gt;
	movlw	0x05				; Ersten 256 zeichen Low = 000, Letzten 256 Zeichen High=225 &lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	0x00&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_send_char&lt;br /&gt;
	movlw	0x06				; Zeichen Position links nach rechts erste reihe 0-29, 30-......&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movf	m_pos, W&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	movlw	0x07				; Zeichen Sonderzeichen sihe Define in max7456.inc&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movf	m_char, W&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zeichen Senden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	movlw	D'12'			; Position&lt;br /&gt;
	movwf	m_pos&lt;br /&gt;
	movlw	m_e			; Zeichen (hier das kleine e) oder direkt den wert des Zeichens im MAX7456 REG.&lt;br /&gt;
	movwf	m_char&lt;br /&gt;
	call	max7456_send_char; Schreiben&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
High/low Adressbereich (low = ersten 256 Zeichen, High die letzten 128 Zeichen);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	call		max7456_add_low	; Low Adressbereich&lt;br /&gt;
	;call		max7456_add_high; Low Adressbereich&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Theborg|Theborg]] 23:13, 15. Sep 2009 (CEST)&lt;br /&gt;
&lt;br /&gt;
= PIC18(F/LF)xxxx =&lt;/div&gt;</summary>
		<author><name>Theborg</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=PIC_ASM_Beispiele&amp;diff=15607</id>
		<title>PIC ASM Beispiele</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=PIC_ASM_Beispiele&amp;diff=15607"/>
				<updated>2009-11-03T09:07:45Z</updated>
		
		<summary type="html">&lt;p&gt;Theborg: /* PIC16(F/LF)XXX */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= PIC16(F/LF)XXX =&lt;br /&gt;
&lt;br /&gt;
== UART Rotine ==&lt;br /&gt;
&lt;br /&gt;
== Schieberegister (z.b. CD4094) ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	; Datenleitungen Schiberegister alles Ausgänge&lt;br /&gt;
	#define		CLK		PORTB, 0&lt;br /&gt;
	#define		D	 	PORTB, 1&lt;br /&gt;
	#define		STR		PORTB, 2&lt;br /&gt;
	#define		OE		PORTB, 3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 cd4094_send&lt;br /&gt;
	banksel	PORTB&lt;br /&gt;
        bcf             OE&lt;br /&gt;
	bcf		STR&lt;br /&gt;
	btfsc	cdsend, 0&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 0&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 1&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 1&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 2&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 2&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 3&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 3&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 4&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 4&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 5&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 5&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 6&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 6&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 7&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 7&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	bsf		STR&lt;br /&gt;
        bsf             OE&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Theborg|Theborg]] 23:13, 15. Sep 2009 (CEST)&lt;br /&gt;
&lt;br /&gt;
== MAX7456 (S/W OSD) ==&lt;br /&gt;
&lt;br /&gt;
Variabeln und I/0:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	cblock	0x70		; Variabeln ab 0x70 setzen alle Register max 16stk.&lt;br /&gt;
	SPI_DATA_WRITE		; Zu Sendene SPI Daten&lt;br /&gt;
	SPI_DATA_READ		; Gelesend SPI Daten&lt;br /&gt;
	m_char			; Maxim7456 und sda5708 Zeichen&lt;br /&gt;
	m_pos			; Maxim7456 Position&lt;br /&gt;
	endc 			; Variabeln setzen beenden&lt;br /&gt;
&lt;br /&gt;
	#define	SPI_CS	PORTC, 7; SPI Slave Select max7456&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Config:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	; PORTC&lt;br /&gt;
	banksel	TRISC			; auf Bank 1 umschalten&lt;br /&gt;
	movlw	B'10010000'		; PortC I/O setzen (1=In, 0=Out) (Reinfolge RC7,RC6...)&lt;br /&gt;
	movwf	TRISC			; PortC I/O setzen&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	clrf	PORTC			; PortC auf 0 setzen&lt;br /&gt;
	; SPI&lt;br /&gt;
	banksel	SSPSTAT&lt;br /&gt;
	movlw	B'11000000'		; Mitlere Geschwindigkeit Output Time &lt;br /&gt;
	movwf	SSPSTAT&lt;br /&gt;
	banksel	SSPCON&lt;br /&gt;
	movlw	B'00100001'		; MODE 1,1, SPI MASTER, 1/16 Tosc SSP ON&lt;br /&gt;
	movwf	SSPCON&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bsf	SPI_CS			; SPI Slave Select aus (high)&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SPI  Sende/Enfangs Rotinen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SPI_Send&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bcf		SPI_CS			; Chip Select an (Low)&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	banksel	SSPBUF&lt;br /&gt;
	movf	SPI_DATA_WRITE, W&lt;br /&gt;
	movwf	SSPBUF&lt;br /&gt;
	banksel	SSPSTAT&lt;br /&gt;
SPI_Wait&lt;br /&gt;
	btfss	SSPSTAT, BF		; Ist das Senden Komplet ?&lt;br /&gt;
	goto	SPI_Wait			; Wen nicht gehe zu SPIWait&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bsf 		SPI_CS			; Chip Select aus (High)&lt;br /&gt;
	return &lt;br /&gt;
SPI_Read&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bcf		SPI_CS&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	banksel	SSPBUF&lt;br /&gt;
	movf	SSPBUF, W&lt;br /&gt;
	movwf	SPI_DATA_READ&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bsf		SPI_CS&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Defines ASCII to MAX7456 Charset und Config und Schreibrotienen (Achtung es kann sein das die #define nicht mit mpasm Funktioniert mit gpasm wird groß und kleinschreibung unterschiden):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
max7456_define				; Defines für den max7456 Zeichensatz&lt;br /&gt;
	#define	m_sp	0x00		; Space&lt;br /&gt;
	#define	m_1		0x01&lt;br /&gt;
	#define	m_2		0x02&lt;br /&gt;
	#define	m_3		0x03&lt;br /&gt;
	#define	m_4		0x04&lt;br /&gt;
	#define	m_5		0x05&lt;br /&gt;
	#define	m_6		0x06&lt;br /&gt;
	#define	m_7		0x07&lt;br /&gt;
	#define	m_8		0x08&lt;br /&gt;
	#define	m_9		0x09&lt;br /&gt;
	#define	m_0		0x0A&lt;br /&gt;
	#define	m_A		0x0B&lt;br /&gt;
	#define	m_B		0x0C&lt;br /&gt;
	#define	m_C		0x0D&lt;br /&gt;
	#define	m_D		0x0E&lt;br /&gt;
	#define	m_E		0x0F&lt;br /&gt;
	#define	m_F		0x10&lt;br /&gt;
	#define	m_G		0x11&lt;br /&gt;
	#define	m_H		0x12&lt;br /&gt;
	#define	m_I		0x13&lt;br /&gt;
	#define	m_J		0x14&lt;br /&gt;
	#define	m_K		0x15&lt;br /&gt;
	#define	m_L		0x16&lt;br /&gt;
	#define	m_M	0x17&lt;br /&gt;
	#define	m_N		0x18&lt;br /&gt;
	#define	m_O		0x19&lt;br /&gt;
	#define	m_P		0x1A&lt;br /&gt;
	#define	m_Q		0x1B&lt;br /&gt;
	#define	m_R		0x1C&lt;br /&gt;
	#define	m_S		0x1D&lt;br /&gt;
	#define	m_T		0x1E&lt;br /&gt;
	#define	m_U		0x1F&lt;br /&gt;
	#define	m_V		0x20&lt;br /&gt;
	#define	m_W	0x21&lt;br /&gt;
	#define	m_X		0x22&lt;br /&gt;
	#define	m_Y		0x23&lt;br /&gt;
	#define	m_Z		0x24&lt;br /&gt;
	#define	m_a		0x25&lt;br /&gt;
	#define	m_b		0x26&lt;br /&gt;
	#define	m_c		0x27&lt;br /&gt;
	#define	m_d		0x28&lt;br /&gt;
	#define	m_e		0x29&lt;br /&gt;
	#define	m_f		0x2A&lt;br /&gt;
	#define	m_g		0x2B&lt;br /&gt;
	#define	m_h		0x2C&lt;br /&gt;
	#define	m_i		0x2D&lt;br /&gt;
	#define	m_j		0x2E&lt;br /&gt;
	#define	m_k		0x2F&lt;br /&gt;
	#define	m_l		0x30&lt;br /&gt;
	#define	m_m		0x31&lt;br /&gt;
	#define	m_n		0x32&lt;br /&gt;
	#define	m_o		0x33&lt;br /&gt;
	#define	m_p		0x34&lt;br /&gt;
	#define	m_q		0x35&lt;br /&gt;
	#define	m_r		0x36&lt;br /&gt;
	#define	m_s		0x37&lt;br /&gt;
	#define	m_t		0x38&lt;br /&gt;
	#define	m_u		0x39&lt;br /&gt;
	#define	m_v		0x3A&lt;br /&gt;
	#define	m_w		0x3B&lt;br /&gt;
	#define	m_x		0x3C&lt;br /&gt;
	#define	m_y		0x3D&lt;br /&gt;
	#define	m_z		0x3E&lt;br /&gt;
	#define	m_KLa	0x3F	; (&lt;br /&gt;
	#define	m_KLz	0x40		; )&lt;br /&gt;
	#define	m_.		0x41&lt;br /&gt;
	#define	m_?		0x42&lt;br /&gt;
	#define	m_sem	0x43		; ;&lt;br /&gt;
	#define	m_:		0x44&lt;br /&gt;
	#define	m_ko	0x45		; ,&lt;br /&gt;
	#define	m_ag	0x46		; Agostroff&lt;br /&gt;
	#define	m_bs	0x47		; Backslasch&lt;br /&gt;
	#define	m_as	0x48		; Anfürungsstriche&lt;br /&gt;
	#define	m_minus  0x49		; Minus&lt;br /&gt;
	#define	m_ka	0x4A		; &amp;lt;&lt;br /&gt;
	#define	m_ga	0x4B	; &amp;gt;&lt;br /&gt;
	#define	m_at	0x4C	; @ oder at&lt;br /&gt;
	#define	m_wait	0xfb		; Wartezeichen&lt;br /&gt;
	#define	m_ls		0xf9		; Lautsprecher&lt;br /&gt;
	#define	m_lso	0xfa		; Tonsignal&lt;br /&gt;
	#define	m_ff		0xff		; Ausgefültes feld&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_conf					; Max7456 Config&lt;br /&gt;
	movlw	0x00				; VM0 Video Mode Register 0 (Write)&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'01001000'		; 0 , 1=PAL, 00=Auto Sync, 1=Enable OSD, 0=Enable OSD immer, 0=SW RST, 0=Enable Video Buffer&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	movlw	0x01				; VM1 Video Mode Register 1&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'00000100'		; 0 = NA, 000=Background MODE Brightness 100%, 11=Blinking Time 160ms, 00=Blinking Duty Cycle BT:BT&lt;br /&gt;
	movwf	SPI_DATA_WRITE&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	movlw	0x02				; HOS Horizontal Offset Register&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'00101111'		; 00 = NA, 100000 = Horitzontal Offset&lt;br /&gt;
	movwf	SPI_DATA_WRITE&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	movlw	0x03				; VOS Vertical Offset Register&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'00010111'		; 000 = NA, 10000 = Vertical Offset&lt;br /&gt;
	movwf	SPI_DATA_WRITE&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_cls					; max7456 ausgabe Löschen&lt;br /&gt;
	movlw	0x00				; VM0 Video Mode Register 0 (Write)&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'01001010'		; 0 , 1=PAL, 00=Auto Sync, 1=Enable OSD, 0=Enable OSD immer, 1=SW RST, 0=Enable Video Buffer&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	call		max7456_conf&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_add_high				; High adressbereich&lt;br /&gt;
	movlw	0x05				; Ersten 256 zeichen Low = 0x00, Letzten 256 Zeichen High=0xff &lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	0xFF&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_add_low				; Low Adressbereich&lt;br /&gt;
	movlw	0x05				; Ersten 256 zeichen Low = 000, Letzten 256 Zeichen High=225 &lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	0x00&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_send_char&lt;br /&gt;
	movlw	0x06				; Zeichen Position links nach rechts erste reihe 0-29, 30-......&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movf	m_pos, W&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	movlw	0x07				; Zeichen Sonderzeichen sihe Define in max7456.inc&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movf	m_char, W&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zeichen Senden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	movlw	D'12'			; Position&lt;br /&gt;
	movwf	m_pos&lt;br /&gt;
	movlw	m_e			; Zeichen (hier das kleine e) oder direkt den wert des Zeichens im MAX7456 REG.&lt;br /&gt;
	movwf	m_char&lt;br /&gt;
	call	max7456_send_char; Schreiben&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
High/low Adressbereich (low = ersten 256 Zeichen, High die letzten 128 Zeichen);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	call		max7456_add_low	; Low Adressbereich&lt;br /&gt;
	;call		max7456_add_high; Low Adressbereich&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Theborg|Theborg]] 23:13, 15. Sep 2009 (CEST)&lt;br /&gt;
&lt;br /&gt;
= PIC18(F/LF)xxxx =&lt;/div&gt;</summary>
		<author><name>Theborg</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=PIC_ASM_Beispiele&amp;diff=15324</id>
		<title>PIC ASM Beispiele</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=PIC_ASM_Beispiele&amp;diff=15324"/>
				<updated>2009-09-15T21:21:05Z</updated>
		
		<summary type="html">&lt;p&gt;Theborg: /* MAX7456 (S/W OSD) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= PIC16(F/LF)XXX =&lt;br /&gt;
&lt;br /&gt;
== Schieberegister (z.b. CD4094) ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	; Datenleitungen Schiberegister alles Ausgänge&lt;br /&gt;
	#define		CLK		PORTB, 0&lt;br /&gt;
	#define		D	 	PORTB, 1&lt;br /&gt;
	#define		STR		PORTB, 2&lt;br /&gt;
	#define		OE		PORTB, 3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 cd4094_send&lt;br /&gt;
	banksel	PORTB&lt;br /&gt;
        bcf             OE&lt;br /&gt;
	bcf		STR&lt;br /&gt;
	btfsc	cdsend, 0&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 0&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 1&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 1&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 2&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 2&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 3&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 3&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 4&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 4&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 5&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 5&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 6&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 6&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 7&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 7&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	bsf		STR&lt;br /&gt;
        bsf             OE&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Theborg|Theborg]] 23:13, 15. Sep 2009 (CEST)&lt;br /&gt;
&lt;br /&gt;
== MAX7456 (S/W OSD) ==&lt;br /&gt;
&lt;br /&gt;
Variabeln und I/0:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	cblock	0x70		; Variabeln ab 0x70 setzen alle Register max 16stk.&lt;br /&gt;
	SPI_DATA_WRITE		; Zu Sendene SPI Daten&lt;br /&gt;
	SPI_DATA_READ		; Gelesend SPI Daten&lt;br /&gt;
	m_char			; Maxim7456 und sda5708 Zeichen&lt;br /&gt;
	m_pos			; Maxim7456 Position&lt;br /&gt;
	endc 			; Variabeln setzen beenden&lt;br /&gt;
&lt;br /&gt;
	#define	SPI_CS	PORTC, 7; SPI Slave Select max7456&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Config:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	; PORTC&lt;br /&gt;
	banksel	TRISC			; auf Bank 1 umschalten&lt;br /&gt;
	movlw	B'10010000'		; PortC I/O setzen (1=In, 0=Out) (Reinfolge RC7,RC6...)&lt;br /&gt;
	movwf	TRISC			; PortC I/O setzen&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	clrf	PORTC			; PortC auf 0 setzen&lt;br /&gt;
	; SPI&lt;br /&gt;
	banksel	SSPSTAT&lt;br /&gt;
	movlw	B'11000000'		; Mitlere Geschwindigkeit Output Time &lt;br /&gt;
	movwf	SSPSTAT&lt;br /&gt;
	banksel	SSPCON&lt;br /&gt;
	movlw	B'00100001'		; MODE 1,1, SPI MASTER, 1/16 Tosc SSP ON&lt;br /&gt;
	movwf	SSPCON&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bsf	SPI_CS			; SPI Slave Select aus (high)&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SPI  Sende/Enfangs Rotinen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SPI_Send&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bcf		SPI_CS			; Chip Select an (Low)&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	banksel	SSPBUF&lt;br /&gt;
	movf	SPI_DATA_WRITE, W&lt;br /&gt;
	movwf	SSPBUF&lt;br /&gt;
	banksel	SSPSTAT&lt;br /&gt;
SPI_Wait&lt;br /&gt;
	btfss	SSPSTAT, BF		; Ist das Senden Komplet ?&lt;br /&gt;
	goto	SPI_Wait			; Wen nicht gehe zu SPIWait&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bsf 		SPI_CS			; Chip Select aus (High)&lt;br /&gt;
	return &lt;br /&gt;
SPI_Read&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bcf		SPI_CS&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	banksel	SSPBUF&lt;br /&gt;
	movf	SSPBUF, W&lt;br /&gt;
	movwf	SPI_DATA_READ&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bsf		SPI_CS&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Defines ASCII to MAX7456 Charset und Config und Schreibrotienen (Achtung es kann sein das die #define nicht mit mpasm Funktioniert mit gpasm wird groß und kleinschreibung unterschiden):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
max7456_define				; Defines für den max7456 Zeichensatz&lt;br /&gt;
	#define	m_sp	0x00		; Space&lt;br /&gt;
	#define	m_1		0x01&lt;br /&gt;
	#define	m_2		0x02&lt;br /&gt;
	#define	m_3		0x03&lt;br /&gt;
	#define	m_4		0x04&lt;br /&gt;
	#define	m_5		0x05&lt;br /&gt;
	#define	m_6		0x06&lt;br /&gt;
	#define	m_7		0x07&lt;br /&gt;
	#define	m_8		0x08&lt;br /&gt;
	#define	m_9		0x09&lt;br /&gt;
	#define	m_0		0x0A&lt;br /&gt;
	#define	m_A		0x0B&lt;br /&gt;
	#define	m_B		0x0C&lt;br /&gt;
	#define	m_C		0x0D&lt;br /&gt;
	#define	m_D		0x0E&lt;br /&gt;
	#define	m_E		0x0F&lt;br /&gt;
	#define	m_F		0x10&lt;br /&gt;
	#define	m_G		0x11&lt;br /&gt;
	#define	m_H		0x12&lt;br /&gt;
	#define	m_I		0x13&lt;br /&gt;
	#define	m_J		0x14&lt;br /&gt;
	#define	m_K		0x15&lt;br /&gt;
	#define	m_L		0x16&lt;br /&gt;
	#define	m_M	0x17&lt;br /&gt;
	#define	m_N		0x18&lt;br /&gt;
	#define	m_O		0x19&lt;br /&gt;
	#define	m_P		0x1A&lt;br /&gt;
	#define	m_Q		0x1B&lt;br /&gt;
	#define	m_R		0x1C&lt;br /&gt;
	#define	m_S		0x1D&lt;br /&gt;
	#define	m_T		0x1E&lt;br /&gt;
	#define	m_U		0x1F&lt;br /&gt;
	#define	m_V		0x20&lt;br /&gt;
	#define	m_W	0x21&lt;br /&gt;
	#define	m_X		0x22&lt;br /&gt;
	#define	m_Y		0x23&lt;br /&gt;
	#define	m_Z		0x24&lt;br /&gt;
	#define	m_a		0x25&lt;br /&gt;
	#define	m_b		0x26&lt;br /&gt;
	#define	m_c		0x27&lt;br /&gt;
	#define	m_d		0x28&lt;br /&gt;
	#define	m_e		0x29&lt;br /&gt;
	#define	m_f		0x2A&lt;br /&gt;
	#define	m_g		0x2B&lt;br /&gt;
	#define	m_h		0x2C&lt;br /&gt;
	#define	m_i		0x2D&lt;br /&gt;
	#define	m_j		0x2E&lt;br /&gt;
	#define	m_k		0x2F&lt;br /&gt;
	#define	m_l		0x30&lt;br /&gt;
	#define	m_m		0x31&lt;br /&gt;
	#define	m_n		0x32&lt;br /&gt;
	#define	m_o		0x33&lt;br /&gt;
	#define	m_p		0x34&lt;br /&gt;
	#define	m_q		0x35&lt;br /&gt;
	#define	m_r		0x36&lt;br /&gt;
	#define	m_s		0x37&lt;br /&gt;
	#define	m_t		0x38&lt;br /&gt;
	#define	m_u		0x39&lt;br /&gt;
	#define	m_v		0x3A&lt;br /&gt;
	#define	m_w		0x3B&lt;br /&gt;
	#define	m_x		0x3C&lt;br /&gt;
	#define	m_y		0x3D&lt;br /&gt;
	#define	m_z		0x3E&lt;br /&gt;
	#define	m_KLa	0x3F	; (&lt;br /&gt;
	#define	m_KLz	0x40		; )&lt;br /&gt;
	#define	m_.		0x41&lt;br /&gt;
	#define	m_?		0x42&lt;br /&gt;
	#define	m_sem	0x43		; ;&lt;br /&gt;
	#define	m_:		0x44&lt;br /&gt;
	#define	m_ko	0x45		; ,&lt;br /&gt;
	#define	m_ag	0x46		; Agostroff&lt;br /&gt;
	#define	m_bs	0x47		; Backslasch&lt;br /&gt;
	#define	m_as	0x48		; Anfürungsstriche&lt;br /&gt;
	#define	m_minus  0x49		; Minus&lt;br /&gt;
	#define	m_ka	0x4A		; &amp;lt;&lt;br /&gt;
	#define	m_ga	0x4B	; &amp;gt;&lt;br /&gt;
	#define	m_at	0x4C	; @ oder at&lt;br /&gt;
	#define	m_wait	0xfb		; Wartezeichen&lt;br /&gt;
	#define	m_ls		0xf9		; Lautsprecher&lt;br /&gt;
	#define	m_lso	0xfa		; Tonsignal&lt;br /&gt;
	#define	m_ff		0xff		; Ausgefültes feld&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_conf					; Max7456 Config&lt;br /&gt;
	movlw	0x00				; VM0 Video Mode Register 0 (Write)&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'01001000'		; 0 , 1=PAL, 00=Auto Sync, 1=Enable OSD, 0=Enable OSD immer, 0=SW RST, 0=Enable Video Buffer&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	movlw	0x01				; VM1 Video Mode Register 1&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'00000100'		; 0 = NA, 000=Background MODE Brightness 100%, 11=Blinking Time 160ms, 00=Blinking Duty Cycle BT:BT&lt;br /&gt;
	movwf	SPI_DATA_WRITE&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	movlw	0x02				; HOS Horizontal Offset Register&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'00101111'		; 00 = NA, 100000 = Horitzontal Offset&lt;br /&gt;
	movwf	SPI_DATA_WRITE&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	movlw	0x03				; VOS Vertical Offset Register&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'00010111'		; 000 = NA, 10000 = Vertical Offset&lt;br /&gt;
	movwf	SPI_DATA_WRITE&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_cls					; max7456 ausgabe Löschen&lt;br /&gt;
	movlw	0x00				; VM0 Video Mode Register 0 (Write)&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'01001010'		; 0 , 1=PAL, 00=Auto Sync, 1=Enable OSD, 0=Enable OSD immer, 1=SW RST, 0=Enable Video Buffer&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	call		max7456_conf&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_add_high				; High adressbereich&lt;br /&gt;
	movlw	0x05				; Ersten 256 zeichen Low = 0x00, Letzten 256 Zeichen High=0xff &lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	0xFF&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_add_low				; Low Adressbereich&lt;br /&gt;
	movlw	0x05				; Ersten 256 zeichen Low = 000, Letzten 256 Zeichen High=225 &lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	0x00&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_send_char&lt;br /&gt;
	movlw	0x06				; Zeichen Position links nach rechts erste reihe 0-29, 30-......&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movf	m_pos, W&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	movlw	0x07				; Zeichen Sonderzeichen sihe Define in max7456.inc&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movf	m_char, W&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zeichen Senden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	movlw	D'12'			; Position&lt;br /&gt;
	movwf	m_pos&lt;br /&gt;
	movlw	m_e			; Zeichen (hier das kleine e) oder direkt den wert des Zeichens im MAX7456 REG.&lt;br /&gt;
	movwf	m_char&lt;br /&gt;
	call	max7456_send_char; Schreiben&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
High/low Adressbereich (low = ersten 256 Zeichen, High die letzten 128 Zeichen);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	call		max7456_add_low	; Low Adressbereich&lt;br /&gt;
	;call		max7456_add_high; Low Adressbereich&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Theborg|Theborg]] 23:13, 15. Sep 2009 (CEST)&lt;br /&gt;
&lt;br /&gt;
= PIC18(F/LF)xxxx =&lt;/div&gt;</summary>
		<author><name>Theborg</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=PIC_ASM_Beispiele&amp;diff=15323</id>
		<title>PIC ASM Beispiele</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=PIC_ASM_Beispiele&amp;diff=15323"/>
				<updated>2009-09-15T21:19:55Z</updated>
		
		<summary type="html">&lt;p&gt;Theborg: /* Schieberegister (z.b. CD4094) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= PIC16(F/LF)XXX =&lt;br /&gt;
&lt;br /&gt;
== Schieberegister (z.b. CD4094) ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	; Datenleitungen Schiberegister alles Ausgänge&lt;br /&gt;
	#define		CLK		PORTB, 0&lt;br /&gt;
	#define		D	 	PORTB, 1&lt;br /&gt;
	#define		STR		PORTB, 2&lt;br /&gt;
	#define		OE		PORTB, 3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 cd4094_send&lt;br /&gt;
	banksel	PORTB&lt;br /&gt;
        bcf             OE&lt;br /&gt;
	bcf		STR&lt;br /&gt;
	btfsc	cdsend, 0&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 0&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 1&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 1&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 2&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 2&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 3&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 3&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 4&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 4&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 5&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 5&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 6&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 6&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 7&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 7&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	bsf		STR&lt;br /&gt;
        bsf             OE&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Theborg|Theborg]] 23:13, 15. Sep 2009 (CEST)&lt;br /&gt;
&lt;br /&gt;
== MAX7456 (S/W OSD) ==&lt;br /&gt;
&lt;br /&gt;
Variabeln und I/0:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	cblock	0x70		; Variabeln ab 0x70 setzen alle Register max 16stk.&lt;br /&gt;
	SPI_DATA_WRITE		; Zu Sendene SPI Daten&lt;br /&gt;
	SPI_DATA_READ		; Gelesend SPI Daten&lt;br /&gt;
	m_char			; Maxim7456 und sda5708 Zeichen&lt;br /&gt;
	m_pos			; Maxim7456 Position&lt;br /&gt;
	endc 			; Variabeln setzen beenden&lt;br /&gt;
&lt;br /&gt;
	#define	SPI_CS	PORTC, 7; SPI Slave Select max7456&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Config:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	; PORTC&lt;br /&gt;
	banksel	TRISC			; auf Bank 1 umschalten&lt;br /&gt;
	movlw	B'10010000'		; PortC I/O setzen (1=In, 0=Out) (Reinfolge RC7,RC6...)&lt;br /&gt;
	movwf	TRISC			; PortC I/O setzen&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	clrf	PORTC			; PortC auf 0 setzen&lt;br /&gt;
	; SPI&lt;br /&gt;
	banksel	SSPSTAT&lt;br /&gt;
	movlw	B'11000000'		; Mitlere Geschwindigkeit Output Time &lt;br /&gt;
	movwf	SSPSTAT&lt;br /&gt;
	banksel	SSPCON&lt;br /&gt;
	movlw	B'00100001'		; MODE 1,1, SPI MASTER, 1/16 Tosc SSP ON&lt;br /&gt;
	movwf	SSPCON&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bsf	SPI_CS			; SPI Slave Select aus (high)&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SPI  Sende/Enfangs Rotinen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SPI_Send&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bcf		SPI_CS			; Chip Select an (Low)&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	banksel	SSPBUF&lt;br /&gt;
	movf	SPI_DATA_WRITE, W&lt;br /&gt;
	movwf	SSPBUF&lt;br /&gt;
	banksel	SSPSTAT&lt;br /&gt;
SPI_Wait&lt;br /&gt;
	btfss	SSPSTAT, BF		; Ist das Senden Komplet ?&lt;br /&gt;
	goto	SPI_Wait			; Wen nicht gehe zu SPIWait&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bsf 		SPI_CS			; Chip Select aus (High)&lt;br /&gt;
	return &lt;br /&gt;
SPI_Read&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bcf		SPI_CS&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	banksel	SSPBUF&lt;br /&gt;
	movf	SSPBUF, W&lt;br /&gt;
	movwf	SPI_DATA_READ&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bsf		SPI_CS&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Defines ASCII to MAX7456 Charset und Config und Schreibrotienen (Achtung es kann sein das die #define nicht mit mpasm Funktioniert mit gpasm wird groß und kleinschreibung unterschiden):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
max7456_define				; Defines für den max7456 Zeichensatz&lt;br /&gt;
	#define	m_sp	0x00		; Space&lt;br /&gt;
	#define	m_1		0x01&lt;br /&gt;
	#define	m_2		0x02&lt;br /&gt;
	#define	m_3		0x03&lt;br /&gt;
	#define	m_4		0x04&lt;br /&gt;
	#define	m_5		0x05&lt;br /&gt;
	#define	m_6		0x06&lt;br /&gt;
	#define	m_7		0x07&lt;br /&gt;
	#define	m_8		0x08&lt;br /&gt;
	#define	m_9		0x09&lt;br /&gt;
	#define	m_0		0x0A&lt;br /&gt;
	#define	m_A		0x0B&lt;br /&gt;
	#define	m_B		0x0C&lt;br /&gt;
	#define	m_C		0x0D&lt;br /&gt;
	#define	m_D		0x0E&lt;br /&gt;
	#define	m_E		0x0F&lt;br /&gt;
	#define	m_F		0x10&lt;br /&gt;
	#define	m_G		0x11&lt;br /&gt;
	#define	m_H		0x12&lt;br /&gt;
	#define	m_I		0x13&lt;br /&gt;
	#define	m_J		0x14&lt;br /&gt;
	#define	m_K		0x15&lt;br /&gt;
	#define	m_L		0x16&lt;br /&gt;
	#define	m_M	0x17&lt;br /&gt;
	#define	m_N		0x18&lt;br /&gt;
	#define	m_O		0x19&lt;br /&gt;
	#define	m_P		0x1A&lt;br /&gt;
	#define	m_Q		0x1B&lt;br /&gt;
	#define	m_R		0x1C&lt;br /&gt;
	#define	m_S		0x1D&lt;br /&gt;
	#define	m_T		0x1E&lt;br /&gt;
	#define	m_U		0x1F&lt;br /&gt;
	#define	m_V		0x20&lt;br /&gt;
	#define	m_W	0x21&lt;br /&gt;
	#define	m_X		0x22&lt;br /&gt;
	#define	m_Y		0x23&lt;br /&gt;
	#define	m_Z		0x24&lt;br /&gt;
	#define	m_a		0x25&lt;br /&gt;
	#define	m_b		0x26&lt;br /&gt;
	#define	m_c		0x27&lt;br /&gt;
	#define	m_d		0x28&lt;br /&gt;
	#define	m_e		0x29&lt;br /&gt;
	#define	m_f		0x2A&lt;br /&gt;
	#define	m_g		0x2B&lt;br /&gt;
	#define	m_h		0x2C&lt;br /&gt;
	#define	m_i		0x2D&lt;br /&gt;
	#define	m_j		0x2E&lt;br /&gt;
	#define	m_k		0x2F&lt;br /&gt;
	#define	m_l		0x30&lt;br /&gt;
	#define	m_m		0x31&lt;br /&gt;
	#define	m_n		0x32&lt;br /&gt;
	#define	m_o		0x33&lt;br /&gt;
	#define	m_p		0x34&lt;br /&gt;
	#define	m_q		0x35&lt;br /&gt;
	#define	m_r		0x36&lt;br /&gt;
	#define	m_s		0x37&lt;br /&gt;
	#define	m_t		0x38&lt;br /&gt;
	#define	m_u		0x39&lt;br /&gt;
	#define	m_v		0x3A&lt;br /&gt;
	#define	m_w		0x3B&lt;br /&gt;
	#define	m_x		0x3C&lt;br /&gt;
	#define	m_y		0x3D&lt;br /&gt;
	#define	m_z		0x3E&lt;br /&gt;
	#define	m_KLa	0x3F	; (&lt;br /&gt;
	#define	m_KLz	0x40		; )&lt;br /&gt;
	#define	m_.		0x41&lt;br /&gt;
	#define	m_?		0x42&lt;br /&gt;
	#define	m_sem	0x43		; ;&lt;br /&gt;
	#define	m_:		0x44&lt;br /&gt;
	#define	m_ko	0x45		; ,&lt;br /&gt;
	#define	m_ag	0x46		; Agostroff&lt;br /&gt;
	#define	m_bs	0x47		; Backslasch&lt;br /&gt;
	#define	m_as	0x48		; Anfürungsstriche&lt;br /&gt;
	#define	m_minus  0x49		; Minus&lt;br /&gt;
	#define	m_ka	0x4A		; &amp;lt;&lt;br /&gt;
	#define	m_ga	0x4B	; &amp;gt;&lt;br /&gt;
	#define	m_at	0x4C	; @ oder at&lt;br /&gt;
	#define	m_wait	0xfb		; Wartezeichen&lt;br /&gt;
	#define	m_ls		0xf9		; Lautsprecher&lt;br /&gt;
	#define	m_lso	0xfa		; Tonsignal&lt;br /&gt;
	#define	m_ff		0xff		; Ausgefültes feld&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_conf					; Max7456 Config&lt;br /&gt;
	movlw	0x00				; VM0 Video Mode Register 0 (Write)&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'01001000'		; 0 , 1=PAL, 00=Auto Sync, 1=Enable OSD, 0=Enable OSD immer, 0=SW RST, 0=Enable Video Buffer&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	movlw	0x01				; VM1 Video Mode Register 1&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'00000100'		; 0 = NA, 000=Background MODE Brightness 100%, 11=Blinking Time 160ms, 00=Blinking Duty Cycle BT:BT&lt;br /&gt;
	movwf	SPI_DATA_WRITE&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	movlw	0x02				; HOS Horizontal Offset Register&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'00101111'		; 00 = NA, 100000 = Horitzontal Offset&lt;br /&gt;
	movwf	SPI_DATA_WRITE&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	movlw	0x03				; VOS Vertical Offset Register&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'00010111'		; 000 = NA, 10000 = Vertical Offset&lt;br /&gt;
	movwf	SPI_DATA_WRITE&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_cls					; max7456 ausgabe Löschen&lt;br /&gt;
	movlw	0x00				; VM0 Video Mode Register 0 (Write)&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'01001010'		; 0 , 1=PAL, 00=Auto Sync, 1=Enable OSD, 0=Enable OSD immer, 1=SW RST, 0=Enable Video Buffer&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	call		max7456_conf&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_add_high				; High adressbereich&lt;br /&gt;
	movlw	0x05				; Ersten 256 zeichen Low = 0x00, Letzten 256 Zeichen High=0xff &lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	0xFF&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_add_low				; Low Adressbereich&lt;br /&gt;
	movlw	0x05				; Ersten 256 zeichen Low = 000, Letzten 256 Zeichen High=225 &lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	0x00&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_send_char&lt;br /&gt;
	movlw	0x06				; Zeichen Position links nach rechts erste reihe 0-29, 30-......&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movf	m_pos, W&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	movlw	0x07				; Zeichen Sonderzeichen sihe Define in max7456.inc&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movf	m_char, W&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zeichen Senden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	movlw	D'12'			; Position&lt;br /&gt;
	movwf	m_pos&lt;br /&gt;
	movlw	m_e			; Zeichen (hier das kleine e)&lt;br /&gt;
	movwf	m_char&lt;br /&gt;
	call	max7456_send_char; Schreiben&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
High/low Adressbereich (low = ersten 256 Zeichen, High die letzten 128 Zeichen);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	call		max7456_add_low	; Low Adressbereich&lt;br /&gt;
	;call		max7456_add_high; Low Adressbereich&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Theborg|Theborg]] 23:13, 15. Sep 2009 (CEST)&lt;br /&gt;
&lt;br /&gt;
= PIC18(F/LF)xxxx =&lt;/div&gt;</summary>
		<author><name>Theborg</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=PIC_ASM_Beispiele&amp;diff=15322</id>
		<title>PIC ASM Beispiele</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=PIC_ASM_Beispiele&amp;diff=15322"/>
				<updated>2009-09-15T21:18:42Z</updated>
		
		<summary type="html">&lt;p&gt;Theborg: /* Schieberegister (z.b. CD4094) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= PIC16(F/LF)XXX =&lt;br /&gt;
&lt;br /&gt;
== Schieberegister (z.b. CD4094) ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	; Datenleitungen Schiberegister alles Ausgänge&lt;br /&gt;
	#define		CLK		PORTB, 0&lt;br /&gt;
	#define		D	 	PORTB, 1&lt;br /&gt;
	#define		STR		PORTB, 2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 cd4094_send&lt;br /&gt;
	banksel	PORTB&lt;br /&gt;
	bcf		STR&lt;br /&gt;
	btfsc	cdsend, 0&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 0&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 1&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 1&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 2&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 2&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 3&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 3&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 4&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 4&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 5&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 5&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 6&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 6&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 7&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 7&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	bsf		STR&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Theborg|Theborg]] 23:13, 15. Sep 2009 (CEST)&lt;br /&gt;
&lt;br /&gt;
== MAX7456 (S/W OSD) ==&lt;br /&gt;
&lt;br /&gt;
Variabeln und I/0:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	cblock	0x70		; Variabeln ab 0x70 setzen alle Register max 16stk.&lt;br /&gt;
	SPI_DATA_WRITE		; Zu Sendene SPI Daten&lt;br /&gt;
	SPI_DATA_READ		; Gelesend SPI Daten&lt;br /&gt;
	m_char			; Maxim7456 und sda5708 Zeichen&lt;br /&gt;
	m_pos			; Maxim7456 Position&lt;br /&gt;
	endc 			; Variabeln setzen beenden&lt;br /&gt;
&lt;br /&gt;
	#define	SPI_CS	PORTC, 7; SPI Slave Select max7456&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Config:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	; PORTC&lt;br /&gt;
	banksel	TRISC			; auf Bank 1 umschalten&lt;br /&gt;
	movlw	B'10010000'		; PortC I/O setzen (1=In, 0=Out) (Reinfolge RC7,RC6...)&lt;br /&gt;
	movwf	TRISC			; PortC I/O setzen&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	clrf	PORTC			; PortC auf 0 setzen&lt;br /&gt;
	; SPI&lt;br /&gt;
	banksel	SSPSTAT&lt;br /&gt;
	movlw	B'11000000'		; Mitlere Geschwindigkeit Output Time &lt;br /&gt;
	movwf	SSPSTAT&lt;br /&gt;
	banksel	SSPCON&lt;br /&gt;
	movlw	B'00100001'		; MODE 1,1, SPI MASTER, 1/16 Tosc SSP ON&lt;br /&gt;
	movwf	SSPCON&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bsf	SPI_CS			; SPI Slave Select aus (high)&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SPI  Sende/Enfangs Rotinen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SPI_Send&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bcf		SPI_CS			; Chip Select an (Low)&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	banksel	SSPBUF&lt;br /&gt;
	movf	SPI_DATA_WRITE, W&lt;br /&gt;
	movwf	SSPBUF&lt;br /&gt;
	banksel	SSPSTAT&lt;br /&gt;
SPI_Wait&lt;br /&gt;
	btfss	SSPSTAT, BF		; Ist das Senden Komplet ?&lt;br /&gt;
	goto	SPI_Wait			; Wen nicht gehe zu SPIWait&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bsf 		SPI_CS			; Chip Select aus (High)&lt;br /&gt;
	return &lt;br /&gt;
SPI_Read&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bcf		SPI_CS&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	banksel	SSPBUF&lt;br /&gt;
	movf	SSPBUF, W&lt;br /&gt;
	movwf	SPI_DATA_READ&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bsf		SPI_CS&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Defines ASCII to MAX7456 Charset und Config und Schreibrotienen (Achtung es kann sein das die #define nicht mit mpasm Funktioniert mit gpasm wird groß und kleinschreibung unterschiden):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
max7456_define				; Defines für den max7456 Zeichensatz&lt;br /&gt;
	#define	m_sp	0x00		; Space&lt;br /&gt;
	#define	m_1		0x01&lt;br /&gt;
	#define	m_2		0x02&lt;br /&gt;
	#define	m_3		0x03&lt;br /&gt;
	#define	m_4		0x04&lt;br /&gt;
	#define	m_5		0x05&lt;br /&gt;
	#define	m_6		0x06&lt;br /&gt;
	#define	m_7		0x07&lt;br /&gt;
	#define	m_8		0x08&lt;br /&gt;
	#define	m_9		0x09&lt;br /&gt;
	#define	m_0		0x0A&lt;br /&gt;
	#define	m_A		0x0B&lt;br /&gt;
	#define	m_B		0x0C&lt;br /&gt;
	#define	m_C		0x0D&lt;br /&gt;
	#define	m_D		0x0E&lt;br /&gt;
	#define	m_E		0x0F&lt;br /&gt;
	#define	m_F		0x10&lt;br /&gt;
	#define	m_G		0x11&lt;br /&gt;
	#define	m_H		0x12&lt;br /&gt;
	#define	m_I		0x13&lt;br /&gt;
	#define	m_J		0x14&lt;br /&gt;
	#define	m_K		0x15&lt;br /&gt;
	#define	m_L		0x16&lt;br /&gt;
	#define	m_M	0x17&lt;br /&gt;
	#define	m_N		0x18&lt;br /&gt;
	#define	m_O		0x19&lt;br /&gt;
	#define	m_P		0x1A&lt;br /&gt;
	#define	m_Q		0x1B&lt;br /&gt;
	#define	m_R		0x1C&lt;br /&gt;
	#define	m_S		0x1D&lt;br /&gt;
	#define	m_T		0x1E&lt;br /&gt;
	#define	m_U		0x1F&lt;br /&gt;
	#define	m_V		0x20&lt;br /&gt;
	#define	m_W	0x21&lt;br /&gt;
	#define	m_X		0x22&lt;br /&gt;
	#define	m_Y		0x23&lt;br /&gt;
	#define	m_Z		0x24&lt;br /&gt;
	#define	m_a		0x25&lt;br /&gt;
	#define	m_b		0x26&lt;br /&gt;
	#define	m_c		0x27&lt;br /&gt;
	#define	m_d		0x28&lt;br /&gt;
	#define	m_e		0x29&lt;br /&gt;
	#define	m_f		0x2A&lt;br /&gt;
	#define	m_g		0x2B&lt;br /&gt;
	#define	m_h		0x2C&lt;br /&gt;
	#define	m_i		0x2D&lt;br /&gt;
	#define	m_j		0x2E&lt;br /&gt;
	#define	m_k		0x2F&lt;br /&gt;
	#define	m_l		0x30&lt;br /&gt;
	#define	m_m		0x31&lt;br /&gt;
	#define	m_n		0x32&lt;br /&gt;
	#define	m_o		0x33&lt;br /&gt;
	#define	m_p		0x34&lt;br /&gt;
	#define	m_q		0x35&lt;br /&gt;
	#define	m_r		0x36&lt;br /&gt;
	#define	m_s		0x37&lt;br /&gt;
	#define	m_t		0x38&lt;br /&gt;
	#define	m_u		0x39&lt;br /&gt;
	#define	m_v		0x3A&lt;br /&gt;
	#define	m_w		0x3B&lt;br /&gt;
	#define	m_x		0x3C&lt;br /&gt;
	#define	m_y		0x3D&lt;br /&gt;
	#define	m_z		0x3E&lt;br /&gt;
	#define	m_KLa	0x3F	; (&lt;br /&gt;
	#define	m_KLz	0x40		; )&lt;br /&gt;
	#define	m_.		0x41&lt;br /&gt;
	#define	m_?		0x42&lt;br /&gt;
	#define	m_sem	0x43		; ;&lt;br /&gt;
	#define	m_:		0x44&lt;br /&gt;
	#define	m_ko	0x45		; ,&lt;br /&gt;
	#define	m_ag	0x46		; Agostroff&lt;br /&gt;
	#define	m_bs	0x47		; Backslasch&lt;br /&gt;
	#define	m_as	0x48		; Anfürungsstriche&lt;br /&gt;
	#define	m_minus  0x49		; Minus&lt;br /&gt;
	#define	m_ka	0x4A		; &amp;lt;&lt;br /&gt;
	#define	m_ga	0x4B	; &amp;gt;&lt;br /&gt;
	#define	m_at	0x4C	; @ oder at&lt;br /&gt;
	#define	m_wait	0xfb		; Wartezeichen&lt;br /&gt;
	#define	m_ls		0xf9		; Lautsprecher&lt;br /&gt;
	#define	m_lso	0xfa		; Tonsignal&lt;br /&gt;
	#define	m_ff		0xff		; Ausgefültes feld&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_conf					; Max7456 Config&lt;br /&gt;
	movlw	0x00				; VM0 Video Mode Register 0 (Write)&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'01001000'		; 0 , 1=PAL, 00=Auto Sync, 1=Enable OSD, 0=Enable OSD immer, 0=SW RST, 0=Enable Video Buffer&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	movlw	0x01				; VM1 Video Mode Register 1&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'00000100'		; 0 = NA, 000=Background MODE Brightness 100%, 11=Blinking Time 160ms, 00=Blinking Duty Cycle BT:BT&lt;br /&gt;
	movwf	SPI_DATA_WRITE&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	movlw	0x02				; HOS Horizontal Offset Register&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'00101111'		; 00 = NA, 100000 = Horitzontal Offset&lt;br /&gt;
	movwf	SPI_DATA_WRITE&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	movlw	0x03				; VOS Vertical Offset Register&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'00010111'		; 000 = NA, 10000 = Vertical Offset&lt;br /&gt;
	movwf	SPI_DATA_WRITE&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_cls					; max7456 ausgabe Löschen&lt;br /&gt;
	movlw	0x00				; VM0 Video Mode Register 0 (Write)&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'01001010'		; 0 , 1=PAL, 00=Auto Sync, 1=Enable OSD, 0=Enable OSD immer, 1=SW RST, 0=Enable Video Buffer&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	call		max7456_conf&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_add_high				; High adressbereich&lt;br /&gt;
	movlw	0x05				; Ersten 256 zeichen Low = 0x00, Letzten 256 Zeichen High=0xff &lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	0xFF&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_add_low				; Low Adressbereich&lt;br /&gt;
	movlw	0x05				; Ersten 256 zeichen Low = 000, Letzten 256 Zeichen High=225 &lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	0x00&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_send_char&lt;br /&gt;
	movlw	0x06				; Zeichen Position links nach rechts erste reihe 0-29, 30-......&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movf	m_pos, W&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	movlw	0x07				; Zeichen Sonderzeichen sihe Define in max7456.inc&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movf	m_char, W&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zeichen Senden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	movlw	D'12'			; Position&lt;br /&gt;
	movwf	m_pos&lt;br /&gt;
	movlw	m_e			; Zeichen (hier das kleine e)&lt;br /&gt;
	movwf	m_char&lt;br /&gt;
	call	max7456_send_char; Schreiben&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
High/low Adressbereich (low = ersten 256 Zeichen, High die letzten 128 Zeichen);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	call		max7456_add_low	; Low Adressbereich&lt;br /&gt;
	;call		max7456_add_high; Low Adressbereich&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Theborg|Theborg]] 23:13, 15. Sep 2009 (CEST)&lt;br /&gt;
&lt;br /&gt;
= PIC18(F/LF)xxxx =&lt;/div&gt;</summary>
		<author><name>Theborg</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=PIC_ASM_Beispiele&amp;diff=15321</id>
		<title>PIC ASM Beispiele</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=PIC_ASM_Beispiele&amp;diff=15321"/>
				<updated>2009-09-15T21:13:48Z</updated>
		
		<summary type="html">&lt;p&gt;Theborg: /* Schieberegister (z.b. CD4094) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= PIC16(F/LF)XXX =&lt;br /&gt;
&lt;br /&gt;
== Schieberegister (z.b. CD4094) ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	; Datenleitungen Schiberegister alles Ausgänge&lt;br /&gt;
	#define		CLK		PORTB, 0&lt;br /&gt;
	#define		D	 	PORTB, 1&lt;br /&gt;
	#define		STR		PORTB, 2&lt;br /&gt;
	#define		T1		PORTB, 6&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 cd4094_send&lt;br /&gt;
	banksel	PORTB&lt;br /&gt;
	bcf		STR&lt;br /&gt;
	btfsc	cdsend, 0&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 0&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 1&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 1&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 2&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 2&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 3&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 3&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 4&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 4&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 5&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 5&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 6&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 6&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 7&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 7&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	bsf		STR&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Theborg|Theborg]] 23:13, 15. Sep 2009 (CEST)&lt;br /&gt;
&lt;br /&gt;
== MAX7456 (S/W OSD) ==&lt;br /&gt;
&lt;br /&gt;
Variabeln und I/0:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	cblock	0x70		; Variabeln ab 0x70 setzen alle Register max 16stk.&lt;br /&gt;
	SPI_DATA_WRITE		; Zu Sendene SPI Daten&lt;br /&gt;
	SPI_DATA_READ		; Gelesend SPI Daten&lt;br /&gt;
	m_char			; Maxim7456 und sda5708 Zeichen&lt;br /&gt;
	m_pos			; Maxim7456 Position&lt;br /&gt;
	endc 			; Variabeln setzen beenden&lt;br /&gt;
&lt;br /&gt;
	#define	SPI_CS	PORTC, 7; SPI Slave Select max7456&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Config:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	; PORTC&lt;br /&gt;
	banksel	TRISC			; auf Bank 1 umschalten&lt;br /&gt;
	movlw	B'10010000'		; PortC I/O setzen (1=In, 0=Out) (Reinfolge RC7,RC6...)&lt;br /&gt;
	movwf	TRISC			; PortC I/O setzen&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	clrf	PORTC			; PortC auf 0 setzen&lt;br /&gt;
	; SPI&lt;br /&gt;
	banksel	SSPSTAT&lt;br /&gt;
	movlw	B'11000000'		; Mitlere Geschwindigkeit Output Time &lt;br /&gt;
	movwf	SSPSTAT&lt;br /&gt;
	banksel	SSPCON&lt;br /&gt;
	movlw	B'00100001'		; MODE 1,1, SPI MASTER, 1/16 Tosc SSP ON&lt;br /&gt;
	movwf	SSPCON&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bsf	SPI_CS			; SPI Slave Select aus (high)&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SPI  Sende/Enfangs Rotinen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SPI_Send&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bcf		SPI_CS			; Chip Select an (Low)&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	banksel	SSPBUF&lt;br /&gt;
	movf	SPI_DATA_WRITE, W&lt;br /&gt;
	movwf	SSPBUF&lt;br /&gt;
	banksel	SSPSTAT&lt;br /&gt;
SPI_Wait&lt;br /&gt;
	btfss	SSPSTAT, BF		; Ist das Senden Komplet ?&lt;br /&gt;
	goto	SPI_Wait			; Wen nicht gehe zu SPIWait&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bsf 		SPI_CS			; Chip Select aus (High)&lt;br /&gt;
	return &lt;br /&gt;
SPI_Read&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bcf		SPI_CS&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	banksel	SSPBUF&lt;br /&gt;
	movf	SSPBUF, W&lt;br /&gt;
	movwf	SPI_DATA_READ&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bsf		SPI_CS&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Defines ASCII to MAX7456 Charset und Config und Schreibrotienen (Achtung es kann sein das die #define nicht mit mpasm Funktioniert mit gpasm wird groß und kleinschreibung unterschiden):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
max7456_define				; Defines für den max7456 Zeichensatz&lt;br /&gt;
	#define	m_sp	0x00		; Space&lt;br /&gt;
	#define	m_1		0x01&lt;br /&gt;
	#define	m_2		0x02&lt;br /&gt;
	#define	m_3		0x03&lt;br /&gt;
	#define	m_4		0x04&lt;br /&gt;
	#define	m_5		0x05&lt;br /&gt;
	#define	m_6		0x06&lt;br /&gt;
	#define	m_7		0x07&lt;br /&gt;
	#define	m_8		0x08&lt;br /&gt;
	#define	m_9		0x09&lt;br /&gt;
	#define	m_0		0x0A&lt;br /&gt;
	#define	m_A		0x0B&lt;br /&gt;
	#define	m_B		0x0C&lt;br /&gt;
	#define	m_C		0x0D&lt;br /&gt;
	#define	m_D		0x0E&lt;br /&gt;
	#define	m_E		0x0F&lt;br /&gt;
	#define	m_F		0x10&lt;br /&gt;
	#define	m_G		0x11&lt;br /&gt;
	#define	m_H		0x12&lt;br /&gt;
	#define	m_I		0x13&lt;br /&gt;
	#define	m_J		0x14&lt;br /&gt;
	#define	m_K		0x15&lt;br /&gt;
	#define	m_L		0x16&lt;br /&gt;
	#define	m_M	0x17&lt;br /&gt;
	#define	m_N		0x18&lt;br /&gt;
	#define	m_O		0x19&lt;br /&gt;
	#define	m_P		0x1A&lt;br /&gt;
	#define	m_Q		0x1B&lt;br /&gt;
	#define	m_R		0x1C&lt;br /&gt;
	#define	m_S		0x1D&lt;br /&gt;
	#define	m_T		0x1E&lt;br /&gt;
	#define	m_U		0x1F&lt;br /&gt;
	#define	m_V		0x20&lt;br /&gt;
	#define	m_W	0x21&lt;br /&gt;
	#define	m_X		0x22&lt;br /&gt;
	#define	m_Y		0x23&lt;br /&gt;
	#define	m_Z		0x24&lt;br /&gt;
	#define	m_a		0x25&lt;br /&gt;
	#define	m_b		0x26&lt;br /&gt;
	#define	m_c		0x27&lt;br /&gt;
	#define	m_d		0x28&lt;br /&gt;
	#define	m_e		0x29&lt;br /&gt;
	#define	m_f		0x2A&lt;br /&gt;
	#define	m_g		0x2B&lt;br /&gt;
	#define	m_h		0x2C&lt;br /&gt;
	#define	m_i		0x2D&lt;br /&gt;
	#define	m_j		0x2E&lt;br /&gt;
	#define	m_k		0x2F&lt;br /&gt;
	#define	m_l		0x30&lt;br /&gt;
	#define	m_m		0x31&lt;br /&gt;
	#define	m_n		0x32&lt;br /&gt;
	#define	m_o		0x33&lt;br /&gt;
	#define	m_p		0x34&lt;br /&gt;
	#define	m_q		0x35&lt;br /&gt;
	#define	m_r		0x36&lt;br /&gt;
	#define	m_s		0x37&lt;br /&gt;
	#define	m_t		0x38&lt;br /&gt;
	#define	m_u		0x39&lt;br /&gt;
	#define	m_v		0x3A&lt;br /&gt;
	#define	m_w		0x3B&lt;br /&gt;
	#define	m_x		0x3C&lt;br /&gt;
	#define	m_y		0x3D&lt;br /&gt;
	#define	m_z		0x3E&lt;br /&gt;
	#define	m_KLa	0x3F	; (&lt;br /&gt;
	#define	m_KLz	0x40		; )&lt;br /&gt;
	#define	m_.		0x41&lt;br /&gt;
	#define	m_?		0x42&lt;br /&gt;
	#define	m_sem	0x43		; ;&lt;br /&gt;
	#define	m_:		0x44&lt;br /&gt;
	#define	m_ko	0x45		; ,&lt;br /&gt;
	#define	m_ag	0x46		; Agostroff&lt;br /&gt;
	#define	m_bs	0x47		; Backslasch&lt;br /&gt;
	#define	m_as	0x48		; Anfürungsstriche&lt;br /&gt;
	#define	m_minus  0x49		; Minus&lt;br /&gt;
	#define	m_ka	0x4A		; &amp;lt;&lt;br /&gt;
	#define	m_ga	0x4B	; &amp;gt;&lt;br /&gt;
	#define	m_at	0x4C	; @ oder at&lt;br /&gt;
	#define	m_wait	0xfb		; Wartezeichen&lt;br /&gt;
	#define	m_ls		0xf9		; Lautsprecher&lt;br /&gt;
	#define	m_lso	0xfa		; Tonsignal&lt;br /&gt;
	#define	m_ff		0xff		; Ausgefültes feld&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_conf					; Max7456 Config&lt;br /&gt;
	movlw	0x00				; VM0 Video Mode Register 0 (Write)&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'01001000'		; 0 , 1=PAL, 00=Auto Sync, 1=Enable OSD, 0=Enable OSD immer, 0=SW RST, 0=Enable Video Buffer&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	movlw	0x01				; VM1 Video Mode Register 1&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'00000100'		; 0 = NA, 000=Background MODE Brightness 100%, 11=Blinking Time 160ms, 00=Blinking Duty Cycle BT:BT&lt;br /&gt;
	movwf	SPI_DATA_WRITE&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	movlw	0x02				; HOS Horizontal Offset Register&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'00101111'		; 00 = NA, 100000 = Horitzontal Offset&lt;br /&gt;
	movwf	SPI_DATA_WRITE&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	movlw	0x03				; VOS Vertical Offset Register&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'00010111'		; 000 = NA, 10000 = Vertical Offset&lt;br /&gt;
	movwf	SPI_DATA_WRITE&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_cls					; max7456 ausgabe Löschen&lt;br /&gt;
	movlw	0x00				; VM0 Video Mode Register 0 (Write)&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'01001010'		; 0 , 1=PAL, 00=Auto Sync, 1=Enable OSD, 0=Enable OSD immer, 1=SW RST, 0=Enable Video Buffer&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	call		max7456_conf&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_add_high				; High adressbereich&lt;br /&gt;
	movlw	0x05				; Ersten 256 zeichen Low = 0x00, Letzten 256 Zeichen High=0xff &lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	0xFF&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_add_low				; Low Adressbereich&lt;br /&gt;
	movlw	0x05				; Ersten 256 zeichen Low = 000, Letzten 256 Zeichen High=225 &lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	0x00&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_send_char&lt;br /&gt;
	movlw	0x06				; Zeichen Position links nach rechts erste reihe 0-29, 30-......&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movf	m_pos, W&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	movlw	0x07				; Zeichen Sonderzeichen sihe Define in max7456.inc&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movf	m_char, W&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zeichen Senden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	movlw	D'12'			; Position&lt;br /&gt;
	movwf	m_pos&lt;br /&gt;
	movlw	m_e			; Zeichen (hier das kleine e)&lt;br /&gt;
	movwf	m_char&lt;br /&gt;
	call	max7456_send_char; Schreiben&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
High/low Adressbereich (low = ersten 256 Zeichen, High die letzten 128 Zeichen);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	call		max7456_add_low	; Low Adressbereich&lt;br /&gt;
	;call		max7456_add_high; Low Adressbereich&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Theborg|Theborg]] 23:13, 15. Sep 2009 (CEST)&lt;br /&gt;
&lt;br /&gt;
= PIC18(F/LF)xxxx =&lt;/div&gt;</summary>
		<author><name>Theborg</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=PIC_ASM_Beispiele&amp;diff=15320</id>
		<title>PIC ASM Beispiele</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=PIC_ASM_Beispiele&amp;diff=15320"/>
				<updated>2009-09-15T21:13:28Z</updated>
		
		<summary type="html">&lt;p&gt;Theborg: /* MAX7456 (S/W OSD) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= PIC16(F/LF)XXX =&lt;br /&gt;
&lt;br /&gt;
== Schieberegister (z.b. CD4094) ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	; Datenleitungen Schiberegister alles Ausgänge&lt;br /&gt;
	#define		CLK		PORTB, 0&lt;br /&gt;
	#define		D	 	PORTB, 1&lt;br /&gt;
	#define		STR		PORTB, 2&lt;br /&gt;
	#define		T1		PORTB, 6&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 cd4094_send&lt;br /&gt;
	banksel	PORTB&lt;br /&gt;
	bcf		STR&lt;br /&gt;
	btfsc	cdsend, 0&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 0&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 1&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 1&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 2&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 2&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 3&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 3&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 4&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 4&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 5&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 5&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 6&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 6&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 7&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 7&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	bsf		STR&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MAX7456 (S/W OSD) ==&lt;br /&gt;
&lt;br /&gt;
Variabeln und I/0:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	cblock	0x70		; Variabeln ab 0x70 setzen alle Register max 16stk.&lt;br /&gt;
	SPI_DATA_WRITE		; Zu Sendene SPI Daten&lt;br /&gt;
	SPI_DATA_READ		; Gelesend SPI Daten&lt;br /&gt;
	m_char			; Maxim7456 und sda5708 Zeichen&lt;br /&gt;
	m_pos			; Maxim7456 Position&lt;br /&gt;
	endc 			; Variabeln setzen beenden&lt;br /&gt;
&lt;br /&gt;
	#define	SPI_CS	PORTC, 7; SPI Slave Select max7456&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Config:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	; PORTC&lt;br /&gt;
	banksel	TRISC			; auf Bank 1 umschalten&lt;br /&gt;
	movlw	B'10010000'		; PortC I/O setzen (1=In, 0=Out) (Reinfolge RC7,RC6...)&lt;br /&gt;
	movwf	TRISC			; PortC I/O setzen&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	clrf	PORTC			; PortC auf 0 setzen&lt;br /&gt;
	; SPI&lt;br /&gt;
	banksel	SSPSTAT&lt;br /&gt;
	movlw	B'11000000'		; Mitlere Geschwindigkeit Output Time &lt;br /&gt;
	movwf	SSPSTAT&lt;br /&gt;
	banksel	SSPCON&lt;br /&gt;
	movlw	B'00100001'		; MODE 1,1, SPI MASTER, 1/16 Tosc SSP ON&lt;br /&gt;
	movwf	SSPCON&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bsf	SPI_CS			; SPI Slave Select aus (high)&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SPI  Sende/Enfangs Rotinen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SPI_Send&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bcf		SPI_CS			; Chip Select an (Low)&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	banksel	SSPBUF&lt;br /&gt;
	movf	SPI_DATA_WRITE, W&lt;br /&gt;
	movwf	SSPBUF&lt;br /&gt;
	banksel	SSPSTAT&lt;br /&gt;
SPI_Wait&lt;br /&gt;
	btfss	SSPSTAT, BF		; Ist das Senden Komplet ?&lt;br /&gt;
	goto	SPI_Wait			; Wen nicht gehe zu SPIWait&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bsf 		SPI_CS			; Chip Select aus (High)&lt;br /&gt;
	return &lt;br /&gt;
SPI_Read&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bcf		SPI_CS&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	banksel	SSPBUF&lt;br /&gt;
	movf	SSPBUF, W&lt;br /&gt;
	movwf	SPI_DATA_READ&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bsf		SPI_CS&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Defines ASCII to MAX7456 Charset und Config und Schreibrotienen (Achtung es kann sein das die #define nicht mit mpasm Funktioniert mit gpasm wird groß und kleinschreibung unterschiden):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
max7456_define				; Defines für den max7456 Zeichensatz&lt;br /&gt;
	#define	m_sp	0x00		; Space&lt;br /&gt;
	#define	m_1		0x01&lt;br /&gt;
	#define	m_2		0x02&lt;br /&gt;
	#define	m_3		0x03&lt;br /&gt;
	#define	m_4		0x04&lt;br /&gt;
	#define	m_5		0x05&lt;br /&gt;
	#define	m_6		0x06&lt;br /&gt;
	#define	m_7		0x07&lt;br /&gt;
	#define	m_8		0x08&lt;br /&gt;
	#define	m_9		0x09&lt;br /&gt;
	#define	m_0		0x0A&lt;br /&gt;
	#define	m_A		0x0B&lt;br /&gt;
	#define	m_B		0x0C&lt;br /&gt;
	#define	m_C		0x0D&lt;br /&gt;
	#define	m_D		0x0E&lt;br /&gt;
	#define	m_E		0x0F&lt;br /&gt;
	#define	m_F		0x10&lt;br /&gt;
	#define	m_G		0x11&lt;br /&gt;
	#define	m_H		0x12&lt;br /&gt;
	#define	m_I		0x13&lt;br /&gt;
	#define	m_J		0x14&lt;br /&gt;
	#define	m_K		0x15&lt;br /&gt;
	#define	m_L		0x16&lt;br /&gt;
	#define	m_M	0x17&lt;br /&gt;
	#define	m_N		0x18&lt;br /&gt;
	#define	m_O		0x19&lt;br /&gt;
	#define	m_P		0x1A&lt;br /&gt;
	#define	m_Q		0x1B&lt;br /&gt;
	#define	m_R		0x1C&lt;br /&gt;
	#define	m_S		0x1D&lt;br /&gt;
	#define	m_T		0x1E&lt;br /&gt;
	#define	m_U		0x1F&lt;br /&gt;
	#define	m_V		0x20&lt;br /&gt;
	#define	m_W	0x21&lt;br /&gt;
	#define	m_X		0x22&lt;br /&gt;
	#define	m_Y		0x23&lt;br /&gt;
	#define	m_Z		0x24&lt;br /&gt;
	#define	m_a		0x25&lt;br /&gt;
	#define	m_b		0x26&lt;br /&gt;
	#define	m_c		0x27&lt;br /&gt;
	#define	m_d		0x28&lt;br /&gt;
	#define	m_e		0x29&lt;br /&gt;
	#define	m_f		0x2A&lt;br /&gt;
	#define	m_g		0x2B&lt;br /&gt;
	#define	m_h		0x2C&lt;br /&gt;
	#define	m_i		0x2D&lt;br /&gt;
	#define	m_j		0x2E&lt;br /&gt;
	#define	m_k		0x2F&lt;br /&gt;
	#define	m_l		0x30&lt;br /&gt;
	#define	m_m		0x31&lt;br /&gt;
	#define	m_n		0x32&lt;br /&gt;
	#define	m_o		0x33&lt;br /&gt;
	#define	m_p		0x34&lt;br /&gt;
	#define	m_q		0x35&lt;br /&gt;
	#define	m_r		0x36&lt;br /&gt;
	#define	m_s		0x37&lt;br /&gt;
	#define	m_t		0x38&lt;br /&gt;
	#define	m_u		0x39&lt;br /&gt;
	#define	m_v		0x3A&lt;br /&gt;
	#define	m_w		0x3B&lt;br /&gt;
	#define	m_x		0x3C&lt;br /&gt;
	#define	m_y		0x3D&lt;br /&gt;
	#define	m_z		0x3E&lt;br /&gt;
	#define	m_KLa	0x3F	; (&lt;br /&gt;
	#define	m_KLz	0x40		; )&lt;br /&gt;
	#define	m_.		0x41&lt;br /&gt;
	#define	m_?		0x42&lt;br /&gt;
	#define	m_sem	0x43		; ;&lt;br /&gt;
	#define	m_:		0x44&lt;br /&gt;
	#define	m_ko	0x45		; ,&lt;br /&gt;
	#define	m_ag	0x46		; Agostroff&lt;br /&gt;
	#define	m_bs	0x47		; Backslasch&lt;br /&gt;
	#define	m_as	0x48		; Anfürungsstriche&lt;br /&gt;
	#define	m_minus  0x49		; Minus&lt;br /&gt;
	#define	m_ka	0x4A		; &amp;lt;&lt;br /&gt;
	#define	m_ga	0x4B	; &amp;gt;&lt;br /&gt;
	#define	m_at	0x4C	; @ oder at&lt;br /&gt;
	#define	m_wait	0xfb		; Wartezeichen&lt;br /&gt;
	#define	m_ls		0xf9		; Lautsprecher&lt;br /&gt;
	#define	m_lso	0xfa		; Tonsignal&lt;br /&gt;
	#define	m_ff		0xff		; Ausgefültes feld&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_conf					; Max7456 Config&lt;br /&gt;
	movlw	0x00				; VM0 Video Mode Register 0 (Write)&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'01001000'		; 0 , 1=PAL, 00=Auto Sync, 1=Enable OSD, 0=Enable OSD immer, 0=SW RST, 0=Enable Video Buffer&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	movlw	0x01				; VM1 Video Mode Register 1&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'00000100'		; 0 = NA, 000=Background MODE Brightness 100%, 11=Blinking Time 160ms, 00=Blinking Duty Cycle BT:BT&lt;br /&gt;
	movwf	SPI_DATA_WRITE&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	movlw	0x02				; HOS Horizontal Offset Register&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'00101111'		; 00 = NA, 100000 = Horitzontal Offset&lt;br /&gt;
	movwf	SPI_DATA_WRITE&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	movlw	0x03				; VOS Vertical Offset Register&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'00010111'		; 000 = NA, 10000 = Vertical Offset&lt;br /&gt;
	movwf	SPI_DATA_WRITE&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_cls					; max7456 ausgabe Löschen&lt;br /&gt;
	movlw	0x00				; VM0 Video Mode Register 0 (Write)&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'01001010'		; 0 , 1=PAL, 00=Auto Sync, 1=Enable OSD, 0=Enable OSD immer, 1=SW RST, 0=Enable Video Buffer&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	call		max7456_conf&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_add_high				; High adressbereich&lt;br /&gt;
	movlw	0x05				; Ersten 256 zeichen Low = 0x00, Letzten 256 Zeichen High=0xff &lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	0xFF&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_add_low				; Low Adressbereich&lt;br /&gt;
	movlw	0x05				; Ersten 256 zeichen Low = 000, Letzten 256 Zeichen High=225 &lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	0x00&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_send_char&lt;br /&gt;
	movlw	0x06				; Zeichen Position links nach rechts erste reihe 0-29, 30-......&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movf	m_pos, W&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	movlw	0x07				; Zeichen Sonderzeichen sihe Define in max7456.inc&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movf	m_char, W&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zeichen Senden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	movlw	D'12'			; Position&lt;br /&gt;
	movwf	m_pos&lt;br /&gt;
	movlw	m_e			; Zeichen (hier das kleine e)&lt;br /&gt;
	movwf	m_char&lt;br /&gt;
	call	max7456_send_char; Schreiben&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
High/low Adressbereich (low = ersten 256 Zeichen, High die letzten 128 Zeichen);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	call		max7456_add_low	; Low Adressbereich&lt;br /&gt;
	;call		max7456_add_high; Low Adressbereich&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Theborg|Theborg]] 23:13, 15. Sep 2009 (CEST)&lt;br /&gt;
&lt;br /&gt;
= PIC18(F/LF)xxxx =&lt;/div&gt;</summary>
		<author><name>Theborg</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=PIC_ASM_Beispiele&amp;diff=15319</id>
		<title>PIC ASM Beispiele</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=PIC_ASM_Beispiele&amp;diff=15319"/>
				<updated>2009-09-15T21:11:24Z</updated>
		
		<summary type="html">&lt;p&gt;Theborg: /* MAX7456 (S/W OSD) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= PIC16(F/LF)XXX =&lt;br /&gt;
&lt;br /&gt;
== Schieberegister (z.b. CD4094) ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	; Datenleitungen Schiberegister alles Ausgänge&lt;br /&gt;
	#define		CLK		PORTB, 0&lt;br /&gt;
	#define		D	 	PORTB, 1&lt;br /&gt;
	#define		STR		PORTB, 2&lt;br /&gt;
	#define		T1		PORTB, 6&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 cd4094_send&lt;br /&gt;
	banksel	PORTB&lt;br /&gt;
	bcf		STR&lt;br /&gt;
	btfsc	cdsend, 0&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 0&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 1&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 1&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 2&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 2&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 3&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 3&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 4&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 4&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 5&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 5&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 6&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 6&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 7&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 7&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	bsf		STR&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MAX7456 (S/W OSD) ==&lt;br /&gt;
&lt;br /&gt;
Variabeln und I/0:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	cblock	0x70		; Variabeln ab 0x70 setzen alle Register max 16stk.&lt;br /&gt;
	SPI_DATA_WRITE		; Zu Sendene SPI Daten&lt;br /&gt;
	SPI_DATA_READ		; Gelesend SPI Daten&lt;br /&gt;
	m_char			; Maxim7456 und sda5708 Zeichen&lt;br /&gt;
	m_pos			; Maxim7456 Position&lt;br /&gt;
	endc 			; Variabeln setzen beenden&lt;br /&gt;
&lt;br /&gt;
	#define	SPI_CS	PORTC, 7; SPI Slave Select max7456&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Config:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	; PORTC&lt;br /&gt;
	banksel	TRISC			; auf Bank 1 umschalten&lt;br /&gt;
	movlw	B'10010000'		; PortC I/O setzen (1=In, 0=Out) (Reinfolge RC7,RC6...)&lt;br /&gt;
	movwf	TRISC			; PortC I/O setzen&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	clrf	PORTC			; PortC auf 0 setzen&lt;br /&gt;
	; SPI&lt;br /&gt;
	banksel	SSPSTAT&lt;br /&gt;
	movlw	B'11000000'		; Mitlere Geschwindigkeit Output Time &lt;br /&gt;
	movwf	SSPSTAT&lt;br /&gt;
	banksel	SSPCON&lt;br /&gt;
	movlw	B'00100001'		; MODE 1,1, SPI MASTER, 1/16 Tosc SSP ON&lt;br /&gt;
	movwf	SSPCON&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bsf	SPI_CS			; SPI Slave Select aus (high)&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SPI  Sende/Enfangs Rotinen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SPI_Send&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bcf		SPI_CS			; Chip Select an (Low)&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	banksel	SSPBUF&lt;br /&gt;
	movf	SPI_DATA_WRITE, W&lt;br /&gt;
	movwf	SSPBUF&lt;br /&gt;
	banksel	SSPSTAT&lt;br /&gt;
SPI_Wait&lt;br /&gt;
	btfss	SSPSTAT, BF		; Ist das Senden Komplet ?&lt;br /&gt;
	goto	SPI_Wait			; Wen nicht gehe zu SPIWait&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bsf 		SPI_CS			; Chip Select aus (High)&lt;br /&gt;
	return &lt;br /&gt;
SPI_Read&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bcf		SPI_CS&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	banksel	SSPBUF&lt;br /&gt;
	movf	SSPBUF, W&lt;br /&gt;
	movwf	SPI_DATA_READ&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bsf		SPI_CS&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Defines ASCII to MAX7456 Charset und Config und Schreibrotienen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
max7456_define				; Defines für den max7456 Zeichensatz&lt;br /&gt;
	#define	m_sp	0x00		; Space&lt;br /&gt;
	#define	m_1		0x01&lt;br /&gt;
	#define	m_2		0x02&lt;br /&gt;
	#define	m_3		0x03&lt;br /&gt;
	#define	m_4		0x04&lt;br /&gt;
	#define	m_5		0x05&lt;br /&gt;
	#define	m_6		0x06&lt;br /&gt;
	#define	m_7		0x07&lt;br /&gt;
	#define	m_8		0x08&lt;br /&gt;
	#define	m_9		0x09&lt;br /&gt;
	#define	m_0		0x0A&lt;br /&gt;
	#define	m_A		0x0B&lt;br /&gt;
	#define	m_B		0x0C&lt;br /&gt;
	#define	m_C		0x0D&lt;br /&gt;
	#define	m_D		0x0E&lt;br /&gt;
	#define	m_E		0x0F&lt;br /&gt;
	#define	m_F		0x10&lt;br /&gt;
	#define	m_G		0x11&lt;br /&gt;
	#define	m_H		0x12&lt;br /&gt;
	#define	m_I		0x13&lt;br /&gt;
	#define	m_J		0x14&lt;br /&gt;
	#define	m_K		0x15&lt;br /&gt;
	#define	m_L		0x16&lt;br /&gt;
	#define	m_M	0x17&lt;br /&gt;
	#define	m_N		0x18&lt;br /&gt;
	#define	m_O		0x19&lt;br /&gt;
	#define	m_P		0x1A&lt;br /&gt;
	#define	m_Q		0x1B&lt;br /&gt;
	#define	m_R		0x1C&lt;br /&gt;
	#define	m_S		0x1D&lt;br /&gt;
	#define	m_T		0x1E&lt;br /&gt;
	#define	m_U		0x1F&lt;br /&gt;
	#define	m_V		0x20&lt;br /&gt;
	#define	m_W	0x21&lt;br /&gt;
	#define	m_X		0x22&lt;br /&gt;
	#define	m_Y		0x23&lt;br /&gt;
	#define	m_Z		0x24&lt;br /&gt;
	#define	m_a		0x25&lt;br /&gt;
	#define	m_b		0x26&lt;br /&gt;
	#define	m_c		0x27&lt;br /&gt;
	#define	m_d		0x28&lt;br /&gt;
	#define	m_e		0x29&lt;br /&gt;
	#define	m_f		0x2A&lt;br /&gt;
	#define	m_g		0x2B&lt;br /&gt;
	#define	m_h		0x2C&lt;br /&gt;
	#define	m_i		0x2D&lt;br /&gt;
	#define	m_j		0x2E&lt;br /&gt;
	#define	m_k		0x2F&lt;br /&gt;
	#define	m_l		0x30&lt;br /&gt;
	#define	m_m		0x31&lt;br /&gt;
	#define	m_n		0x32&lt;br /&gt;
	#define	m_o		0x33&lt;br /&gt;
	#define	m_p		0x34&lt;br /&gt;
	#define	m_q		0x35&lt;br /&gt;
	#define	m_r		0x36&lt;br /&gt;
	#define	m_s		0x37&lt;br /&gt;
	#define	m_t		0x38&lt;br /&gt;
	#define	m_u		0x39&lt;br /&gt;
	#define	m_v		0x3A&lt;br /&gt;
	#define	m_w		0x3B&lt;br /&gt;
	#define	m_x		0x3C&lt;br /&gt;
	#define	m_y		0x3D&lt;br /&gt;
	#define	m_z		0x3E&lt;br /&gt;
	#define	m_KLa	0x3F	; (&lt;br /&gt;
	#define	m_KLz	0x40		; )&lt;br /&gt;
	#define	m_.		0x41&lt;br /&gt;
	#define	m_?		0x42&lt;br /&gt;
	#define	m_sem	0x43		; ;&lt;br /&gt;
	#define	m_:		0x44&lt;br /&gt;
	#define	m_ko	0x45		; ,&lt;br /&gt;
	#define	m_ag	0x46		; Agostroff&lt;br /&gt;
	#define	m_bs	0x47		; Backslasch&lt;br /&gt;
	#define	m_as	0x48		; Anfürungsstriche&lt;br /&gt;
	#define	m_minus  0x49		; Minus&lt;br /&gt;
	#define	m_ka	0x4A		; &amp;lt;&lt;br /&gt;
	#define	m_ga	0x4B	; &amp;gt;&lt;br /&gt;
	#define	m_at	0x4C	; @ oder at&lt;br /&gt;
	#define	m_wait	0xfb		; Wartezeichen&lt;br /&gt;
	#define	m_ls		0xf9		; Lautsprecher&lt;br /&gt;
	#define	m_lso	0xfa		; Tonsignal&lt;br /&gt;
	#define	m_ff		0xff		; Ausgefültes feld&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_conf					; Max7456 Config&lt;br /&gt;
	movlw	0x00				; VM0 Video Mode Register 0 (Write)&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'01001000'		; 0 , 1=PAL, 00=Auto Sync, 1=Enable OSD, 0=Enable OSD immer, 0=SW RST, 0=Enable Video Buffer&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	movlw	0x01				; VM1 Video Mode Register 1&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'00000100'		; 0 = NA, 000=Background MODE Brightness 100%, 11=Blinking Time 160ms, 00=Blinking Duty Cycle BT:BT&lt;br /&gt;
	movwf	SPI_DATA_WRITE&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	movlw	0x02				; HOS Horizontal Offset Register&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'00101111'		; 00 = NA, 100000 = Horitzontal Offset&lt;br /&gt;
	movwf	SPI_DATA_WRITE&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	movlw	0x03				; VOS Vertical Offset Register&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'00010111'		; 000 = NA, 10000 = Vertical Offset&lt;br /&gt;
	movwf	SPI_DATA_WRITE&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_cls					; max7456 ausgabe Löschen&lt;br /&gt;
	movlw	0x00				; VM0 Video Mode Register 0 (Write)&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'01001010'		; 0 , 1=PAL, 00=Auto Sync, 1=Enable OSD, 0=Enable OSD immer, 1=SW RST, 0=Enable Video Buffer&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	call		max7456_conf&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_add_high				; High adressbereich&lt;br /&gt;
	movlw	0x05				; Ersten 256 zeichen Low = 0x00, Letzten 256 Zeichen High=0xff &lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	0xFF&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_add_low				; Low Adressbereich&lt;br /&gt;
	movlw	0x05				; Ersten 256 zeichen Low = 000, Letzten 256 Zeichen High=225 &lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	0x00&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_send_char&lt;br /&gt;
	movlw	0x06				; Zeichen Position links nach rechts erste reihe 0-29, 30-......&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movf	m_pos, W&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	movlw	0x07				; Zeichen Sonderzeichen sihe Define in max7456.inc&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movf	m_char, W&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zeichen Senden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	movlw	D'12'			; Position&lt;br /&gt;
	movwf	m_pos&lt;br /&gt;
	movlw	m_e			; Zeichen (hier das kleine e)&lt;br /&gt;
	movwf	m_char&lt;br /&gt;
	call	max7456_send_char; Schreiben&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
High/low Adressbereich (low = ersten 256 Zeichen, High die letzten 128 Zeichen);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	call		max7456_add_low	; Low Adressbereich&lt;br /&gt;
	;call		max7456_add_high; Low Adressbereich&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= PIC18(F/LF)xxxx =&lt;/div&gt;</summary>
		<author><name>Theborg</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=PIC_ASM_Beispiele&amp;diff=15318</id>
		<title>PIC ASM Beispiele</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=PIC_ASM_Beispiele&amp;diff=15318"/>
				<updated>2009-09-15T21:10:56Z</updated>
		
		<summary type="html">&lt;p&gt;Theborg: /* MAX7456 (S/W OSD) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= PIC16(F/LF)XXX =&lt;br /&gt;
&lt;br /&gt;
== Schieberegister (z.b. CD4094) ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	; Datenleitungen Schiberegister alles Ausgänge&lt;br /&gt;
	#define		CLK		PORTB, 0&lt;br /&gt;
	#define		D	 	PORTB, 1&lt;br /&gt;
	#define		STR		PORTB, 2&lt;br /&gt;
	#define		T1		PORTB, 6&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 cd4094_send&lt;br /&gt;
	banksel	PORTB&lt;br /&gt;
	bcf		STR&lt;br /&gt;
	btfsc	cdsend, 0&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 0&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 1&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 1&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 2&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 2&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 3&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 3&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 4&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 4&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 5&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 5&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 6&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 6&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 7&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 7&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	bsf		STR&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MAX7456 (S/W OSD) ==&lt;br /&gt;
&lt;br /&gt;
Variabeln und I/0:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	cblock	0x70		; Variabeln ab 0x70 setzen alle Register max 16stk.&lt;br /&gt;
	SPI_DATA_WRITE		; Zu Sendene SPI Daten&lt;br /&gt;
	SPI_DATA_READ		; Gelesend SPI Daten&lt;br /&gt;
	ZählerA			; Zähler für delay.inc&lt;br /&gt;
	ZählerB&lt;br /&gt;
	ZählerC&lt;br /&gt;
	m_char			; Maxim7456 und sda5708 Zeichen&lt;br /&gt;
	m_pos			; Maxim7456 Position&lt;br /&gt;
	endc 			; Variabeln setzen beenden&lt;br /&gt;
&lt;br /&gt;
	#define	SPI_CS	PORTC, 7; SPI Slave Select max7456&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Config:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	; PORTC&lt;br /&gt;
	banksel	TRISC			; auf Bank 1 umschalten&lt;br /&gt;
	movlw	B'10010000'		; PortC I/O setzen (1=In, 0=Out) (Reinfolge RC7,RC6...)&lt;br /&gt;
	movwf	TRISC			; PortC I/O setzen&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	clrf	PORTC			; PortC auf 0 setzen&lt;br /&gt;
	; SPI&lt;br /&gt;
	banksel	SSPSTAT&lt;br /&gt;
	movlw	B'11000000'		; Mitlere Geschwindigkeit Output Time &lt;br /&gt;
	movwf	SSPSTAT&lt;br /&gt;
	banksel	SSPCON&lt;br /&gt;
	movlw	B'00100001'		; MODE 1,1, SPI MASTER, 1/16 Tosc SSP ON&lt;br /&gt;
	movwf	SSPCON&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bsf	SPI_CS			; SPI Slave Select aus (high)&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SPI  Sende/Enfangs Rotinen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SPI_Send&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bcf		SPI_CS			; Chip Select an (Low)&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	banksel	SSPBUF&lt;br /&gt;
	movf	SPI_DATA_WRITE, W&lt;br /&gt;
	movwf	SSPBUF&lt;br /&gt;
	banksel	SSPSTAT&lt;br /&gt;
SPI_Wait&lt;br /&gt;
	btfss	SSPSTAT, BF		; Ist das Senden Komplet ?&lt;br /&gt;
	goto	SPI_Wait			; Wen nicht gehe zu SPIWait&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bsf 		SPI_CS			; Chip Select aus (High)&lt;br /&gt;
	return &lt;br /&gt;
SPI_Read&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bcf		SPI_CS&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	banksel	SSPBUF&lt;br /&gt;
	movf	SSPBUF, W&lt;br /&gt;
	movwf	SPI_DATA_READ&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	nop&lt;br /&gt;
	banksel	PORTC&lt;br /&gt;
	bsf		SPI_CS&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Defines ASCII to MAX7456 Charset und Config und Schreibrotienen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
max7456_define				; Defines für den max7456 Zeichensatz&lt;br /&gt;
	#define	m_sp	0x00		; Space&lt;br /&gt;
	#define	m_1		0x01&lt;br /&gt;
	#define	m_2		0x02&lt;br /&gt;
	#define	m_3		0x03&lt;br /&gt;
	#define	m_4		0x04&lt;br /&gt;
	#define	m_5		0x05&lt;br /&gt;
	#define	m_6		0x06&lt;br /&gt;
	#define	m_7		0x07&lt;br /&gt;
	#define	m_8		0x08&lt;br /&gt;
	#define	m_9		0x09&lt;br /&gt;
	#define	m_0		0x0A&lt;br /&gt;
	#define	m_A		0x0B&lt;br /&gt;
	#define	m_B		0x0C&lt;br /&gt;
	#define	m_C		0x0D&lt;br /&gt;
	#define	m_D		0x0E&lt;br /&gt;
	#define	m_E		0x0F&lt;br /&gt;
	#define	m_F		0x10&lt;br /&gt;
	#define	m_G		0x11&lt;br /&gt;
	#define	m_H		0x12&lt;br /&gt;
	#define	m_I		0x13&lt;br /&gt;
	#define	m_J		0x14&lt;br /&gt;
	#define	m_K		0x15&lt;br /&gt;
	#define	m_L		0x16&lt;br /&gt;
	#define	m_M	0x17&lt;br /&gt;
	#define	m_N		0x18&lt;br /&gt;
	#define	m_O		0x19&lt;br /&gt;
	#define	m_P		0x1A&lt;br /&gt;
	#define	m_Q		0x1B&lt;br /&gt;
	#define	m_R		0x1C&lt;br /&gt;
	#define	m_S		0x1D&lt;br /&gt;
	#define	m_T		0x1E&lt;br /&gt;
	#define	m_U		0x1F&lt;br /&gt;
	#define	m_V		0x20&lt;br /&gt;
	#define	m_W	0x21&lt;br /&gt;
	#define	m_X		0x22&lt;br /&gt;
	#define	m_Y		0x23&lt;br /&gt;
	#define	m_Z		0x24&lt;br /&gt;
	#define	m_a		0x25&lt;br /&gt;
	#define	m_b		0x26&lt;br /&gt;
	#define	m_c		0x27&lt;br /&gt;
	#define	m_d		0x28&lt;br /&gt;
	#define	m_e		0x29&lt;br /&gt;
	#define	m_f		0x2A&lt;br /&gt;
	#define	m_g		0x2B&lt;br /&gt;
	#define	m_h		0x2C&lt;br /&gt;
	#define	m_i		0x2D&lt;br /&gt;
	#define	m_j		0x2E&lt;br /&gt;
	#define	m_k		0x2F&lt;br /&gt;
	#define	m_l		0x30&lt;br /&gt;
	#define	m_m		0x31&lt;br /&gt;
	#define	m_n		0x32&lt;br /&gt;
	#define	m_o		0x33&lt;br /&gt;
	#define	m_p		0x34&lt;br /&gt;
	#define	m_q		0x35&lt;br /&gt;
	#define	m_r		0x36&lt;br /&gt;
	#define	m_s		0x37&lt;br /&gt;
	#define	m_t		0x38&lt;br /&gt;
	#define	m_u		0x39&lt;br /&gt;
	#define	m_v		0x3A&lt;br /&gt;
	#define	m_w		0x3B&lt;br /&gt;
	#define	m_x		0x3C&lt;br /&gt;
	#define	m_y		0x3D&lt;br /&gt;
	#define	m_z		0x3E&lt;br /&gt;
	#define	m_KLa	0x3F	; (&lt;br /&gt;
	#define	m_KLz	0x40		; )&lt;br /&gt;
	#define	m_.		0x41&lt;br /&gt;
	#define	m_?		0x42&lt;br /&gt;
	#define	m_sem	0x43		; ;&lt;br /&gt;
	#define	m_:		0x44&lt;br /&gt;
	#define	m_ko	0x45		; ,&lt;br /&gt;
	#define	m_ag	0x46		; Agostroff&lt;br /&gt;
	#define	m_bs	0x47		; Backslasch&lt;br /&gt;
	#define	m_as	0x48		; Anfürungsstriche&lt;br /&gt;
	#define	m_minus  0x49		; Minus&lt;br /&gt;
	#define	m_ka	0x4A		; &amp;lt;&lt;br /&gt;
	#define	m_ga	0x4B	; &amp;gt;&lt;br /&gt;
	#define	m_at	0x4C	; @ oder at&lt;br /&gt;
	#define	m_wait	0xfb		; Wartezeichen&lt;br /&gt;
	#define	m_ls		0xf9		; Lautsprecher&lt;br /&gt;
	#define	m_lso	0xfa		; Tonsignal&lt;br /&gt;
	#define	m_ff		0xff		; Ausgefültes feld&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_conf					; Max7456 Config&lt;br /&gt;
	movlw	0x00				; VM0 Video Mode Register 0 (Write)&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'01001000'		; 0 , 1=PAL, 00=Auto Sync, 1=Enable OSD, 0=Enable OSD immer, 0=SW RST, 0=Enable Video Buffer&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	movlw	0x01				; VM1 Video Mode Register 1&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'00000100'		; 0 = NA, 000=Background MODE Brightness 100%, 11=Blinking Time 160ms, 00=Blinking Duty Cycle BT:BT&lt;br /&gt;
	movwf	SPI_DATA_WRITE&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	movlw	0x02				; HOS Horizontal Offset Register&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'00101111'		; 00 = NA, 100000 = Horitzontal Offset&lt;br /&gt;
	movwf	SPI_DATA_WRITE&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	movlw	0x03				; VOS Vertical Offset Register&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'00010111'		; 000 = NA, 10000 = Vertical Offset&lt;br /&gt;
	movwf	SPI_DATA_WRITE&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_cls					; max7456 ausgabe Löschen&lt;br /&gt;
	movlw	0x00				; VM0 Video Mode Register 0 (Write)&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	B'01001010'		; 0 , 1=PAL, 00=Auto Sync, 1=Enable OSD, 0=Enable OSD immer, 1=SW RST, 0=Enable Video Buffer&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	call		max7456_conf&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_add_high				; High adressbereich&lt;br /&gt;
	movlw	0x05				; Ersten 256 zeichen Low = 0x00, Letzten 256 Zeichen High=0xff &lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	0xFF&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_add_low				; Low Adressbereich&lt;br /&gt;
	movlw	0x05				; Ersten 256 zeichen Low = 000, Letzten 256 Zeichen High=225 &lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movlw	0x00&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	return&lt;br /&gt;
&lt;br /&gt;
max7456_send_char&lt;br /&gt;
	movlw	0x06				; Zeichen Position links nach rechts erste reihe 0-29, 30-......&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movf	m_pos, W&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	movlw	0x07				; Zeichen Sonderzeichen sihe Define in max7456.inc&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send&lt;br /&gt;
	movf	m_char, W&lt;br /&gt;
	movwf	SPI_DATA_WRITE	&lt;br /&gt;
	call		SPI_Send	&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zeichen Senden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	movlw	D'12'			; Position&lt;br /&gt;
	movwf	m_pos&lt;br /&gt;
	movlw	m_e			; Zeichen (hier das kleine e)&lt;br /&gt;
	movwf	m_char&lt;br /&gt;
	call	max7456_send_char; Schreiben&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
High/low Adressbereich (low = ersten 256 Zeichen, High die letzten 128 Zeichen);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	call		max7456_add_low	; Low Adressbereich&lt;br /&gt;
	;call		max7456_add_high; Low Adressbereich&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= PIC18(F/LF)xxxx =&lt;/div&gt;</summary>
		<author><name>Theborg</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=PIC_ASM_Beispiele&amp;diff=15317</id>
		<title>PIC ASM Beispiele</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=PIC_ASM_Beispiele&amp;diff=15317"/>
				<updated>2009-09-15T20:53:38Z</updated>
		
		<summary type="html">&lt;p&gt;Theborg: /* MAX7456 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= PIC16(F/LF)XXX =&lt;br /&gt;
&lt;br /&gt;
== Schieberegister (z.b. CD4094) ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	; Datenleitungen Schiberegister alles Ausgänge&lt;br /&gt;
	#define		CLK		PORTB, 0&lt;br /&gt;
	#define		D	 	PORTB, 1&lt;br /&gt;
	#define		STR		PORTB, 2&lt;br /&gt;
	#define		T1		PORTB, 6&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 cd4094_send&lt;br /&gt;
	banksel	PORTB&lt;br /&gt;
	bcf		STR&lt;br /&gt;
	btfsc	cdsend, 0&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 0&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 1&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 1&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 2&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 2&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 3&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 3&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 4&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 4&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 5&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 5&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 6&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 6&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 7&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 7&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	bsf		STR&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MAX7456 (S/W OSD) ==&lt;br /&gt;
&lt;br /&gt;
= PIC18(F/LF)xxxx =&lt;/div&gt;</summary>
		<author><name>Theborg</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=PIC_ASM_Beispiele&amp;diff=15316</id>
		<title>PIC ASM Beispiele</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=PIC_ASM_Beispiele&amp;diff=15316"/>
				<updated>2009-09-15T20:52:47Z</updated>
		
		<summary type="html">&lt;p&gt;Theborg: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= PIC16(F/LF)XXX =&lt;br /&gt;
&lt;br /&gt;
== Schieberegister (z.b. CD4094) ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	; Datenleitungen Schiberegister alles Ausgänge&lt;br /&gt;
	#define		CLK		PORTB, 0&lt;br /&gt;
	#define		D	 	PORTB, 1&lt;br /&gt;
	#define		STR		PORTB, 2&lt;br /&gt;
	#define		T1		PORTB, 6&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 cd4094_send&lt;br /&gt;
	banksel	PORTB&lt;br /&gt;
	bcf		STR&lt;br /&gt;
	btfsc	cdsend, 0&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 0&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 1&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 1&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 2&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 2&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 3&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 3&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 4&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 4&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 5&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 5&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 6&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 6&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	btfsc	cdsend, 7&lt;br /&gt;
	bsf		D&lt;br /&gt;
	btfss		cdsend, 7&lt;br /&gt;
	bcf		D&lt;br /&gt;
	bsf		CLK&lt;br /&gt;
	bcf		CLK&lt;br /&gt;
	bsf		STR&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MAX7456 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= PIC18(F/LF)xxxx =&lt;/div&gt;</summary>
		<author><name>Theborg</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=B%C3%BCchertausch&amp;diff=14022</id>
		<title>Büchertausch</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=B%C3%BCchertausch&amp;diff=14022"/>
				<updated>2008-09-27T10:02:39Z</updated>
		
		<summary type="html">&lt;p&gt;Theborg: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;VIP !!!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier können Bücher getauscht werden.&lt;br /&gt;
&lt;br /&gt;
Bitte Bücher nach folgender Vorlage einstellen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
User&lt;br /&gt;
Buch0 - ISBN - Macken/Fehler - Sonstiges&lt;br /&gt;
Buch1....&lt;br /&gt;
Buck2.....&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tausche ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== BlackList ==&lt;br /&gt;
{{FarbigerRahmen|&lt;br /&gt;
Achtung !!! Hier nur User eintragen die grobe Verstöße geliefert haben z.b. Nicht erhaltenen Tauschartikel oder extreme macken, jedem sollte klar sein das Bücher viele Fehler haben können durch des ständige lesen und nachschlagen von Infos gerade bei Technischen Büchern dieses ist normal und sollte nicht so Eng. gesehen werden (Und dran denken dieses ist ein WIKI das Löschen der Blacklist ist hoffnungslos da immer ein Abbild vorhanden ist).&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Theborg</name></author>	</entry>

	</feed>