⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 l12.asm

📁 一种lcd驱动算法 主要实现的图像的计算实现
💻 ASM
字号:
;*** SA zaslon z LCD s PIC 16F876/16F876A - S53MV - 02.01.2007 ***

;*** Uporaba portov - takt 24MHz ***
;analogni vhod RA0 - SA VIDEO vhod
;digitalni vhod RA1 - tipka MINMAX
;analogni -Vref RA2 - obmocje A/D
;analogni +Vref RA3 - obmocje A/D
;digitalni vhod	RA4 - 80dB/40dB obmocje
;digitalni vhod RA5 - izklop/vklop mreze
;digitalni vhod RB0 - SA TRIGGER vhod
;digitalni vhod RB1 - LCD D7 busy
;digitalni izhod RB2 - LCD /CS1
;digitalni izhod RB3 - LCD /CS2
;digitalni izhod RB4 - LCD /RSTB
;digitalni izhod RB5 - LCD R/W
;digitalni izhod RB6 - LCD D/I
;digitalni izhod RB7 - LCD E
;digitalni izhod RC0-7 - LCD D0-7

;*** Uporaba RAMa ***
;20	ZANKA stevec stolpcev
;21,22	ZANKA, STOLP vrednosti stolpcev
;23	STOLP stevec vrstic
;24,25	STOLP racunanje pikic
;26,27	ZANKA mreza

;30-6F,B0-EF,130-16F,1B0-1EF	PREKIN vmesnik 4x64 bajtov

;70,71	PREKIN resi W in STATUS
;72	PREKIN stevec vzorcev
;73	PREKIN stevec stolpcev
;74	PREKIN stara vrednost A/D
;75,76	PREKIN min in max
;77	PREKIN resi FSR

;*** Zacetek programa, tocno 4 ukazi, sledi PREKIN ***
	LIST	P=16F876
	ORG	0
ZACETEK	NOP
	CALL	INIPIC	;inicializacija PIC 16F876/16F876A
	CALL	INILCD	;vkljuci LCD oba kontrolerja
	GOTO	ZANKA

;*** Prekinitve: A/D in TRIGGER *** (70,71,72,73,74,75,76,77)
	ORG	4
PREKIN  MOVWF   70      ;resi W
	SWAPF   3,0     ;resi STATUS
	MOVWF   71
	CLRF	3	;pobrisi stran pomnilnika IRP, RP1, RP0
	MOVLW	8C	;postavi TMR0 za naslednjo pretvorbo
	MOVWF	1
	BCF	0B,2	;resetiraj T0IF
	BTFSS	0B,1	;prozenje INT TRIGGER?
	GOTO	PREKIN1
	MOVLW	0FE	;zakasnitev prozenja grobo
	MOVWF	73
	MOVLW	14	;zakasnitev prozenja fino
	MOVWF	72
	CLRF	1	;reset TMR0
	BCF	0B,1	;resetiraj INTF
	GOTO	PREKIN3
PREKIN1	BTFSC	1F,2	;cakaj na konec prejsnje A/D pretvorbe
	GOTO	PREKIN1
	RRF	1E,0	;rezultat A/D pretvorbe deljen/2 v (74)
	BSF	1F,2	;zacni novo A/D pretvorbo
	MOVWF	74
	BCF	74,7
	MOVF	75,0	;isci minimum v (75)
	SUBWF	74,0
	BTFSS	3,0
	ADDWF	75,1
	MOVF	76,0	;isci maksimum v (76)
	SUBWF	74,0
	BTFSC	3,0
	ADDWF	76,1
	DECFSZ	72,1	;stevec vzorcev v stolpcu
	GOTO	PREKIN3
	MOVLW	8
	MOVWF	72
	INCF	73,1	;povecaj stevec stolpcev
	BTFSC	73,7
	GOTO	PREKIN2
	MOVF	4,0	;resi FSR
	MOVWF	77
	RLF	73,0	;izracunaj naslov v (4) in IRP
	ANDLW	3E
	ADDLW	30
	MOVWF	4	
	BTFSC	73,5
	BSF	4,7
	BTFSC	73,6	;postavi IRP
	BSF	3,7
	BTFSS	5,1	;MINMAX pomnilnik vkljucen?
	GOTO	PREKIN4
	MOVF	75,0	;prepisi min in max v vmesnik (4)
	MOVWF	0
	INCF	4,1
	MOVF	76,0
	MOVWF	0
	GOTO	PREKIN5
PREKIN4	MOVF	0,0	;isci minimum v vmesnik
	SUBWF	75,0
	BTFSS	3,0
	ADDWF	0,1
	INCF	4,1
	MOVF	0,0	;isci maksimum v vmesnik+1
	SUBWF	76,0
	BTFSC	3,0
	ADDWF	0,1
PREKIN5	MOVF	77,0	;obnovi FSR
	MOVWF	4
PREKIN2	MOVF	74,0	;novi min in max vrednost prejsnje pretvorbe
	MOVWF	75
	MOVWF	76
PREKIN3	SWAPF	71,0	;obnovi STATUS
	MOVWF	3
	SWAPF	70,1	;obnovi W
	SWAPF	70,0
	RETFIE

;*** Inicializacija PIC 16F876/16F876A ***
INIPIC	CLRF	5	;zacetno stanje vrat
	CLRF	6
	CLRF	7
	BSF	3,5	;postavi PAGE1
	MOVLW	8F	;OPTION: 1=/RBPU, 0=INTEDG, 0=T0CS, 0=T0SE, 1=PSA, 111=PS2-0
	MOVWF	1
	MOVLW	3F	;vhodi RA0-5
	MOVWF	5
	MOVLW	3	;vhodi RB0-1, izhodi RB2-7
	MOVWF	6
	MOVLW	0	;izhodi RC0-7
	MOVWF	7
	MOVLW	0F	;ADCON1: 0=ADFM, 000, 1111=PCFG3-0
	MOVWF	1F
	BCF	3,5	;postavi PAGE0
	MOVLW	81	;ADCON0: 10=ADCS1-0, 000=CHS2-0, 0=GO/DONE, 0, 1=ADON 
	MOVWF	1F
	CLRF	1	;reset TMR0
	BSF	0B,4	;vkljuci INTE
	BSF	0B,5	;vkljuci T0IE
	BSF	0B,7	;vkljuci GIE
	RETURN

;*** Glavna zanka - izpis vmesnika na LCD *** (20,21,22,27,28,29,2A)
ZANKA	INCF	20,1	;stevec stolpcev izpisa
	BTFSS	20,7
	GOTO	ZANKA1
	CALL	INILCD	;vkljuci LCD oba kontrolerja
	MOVLW	0F4	;zacetna vrednost mreze
	MOVWF	26
	CLRF	20
ZANKA1	RLF	20,0	;izracunaj naslov v (4) in IRP
	ANDLW	3E
	ADDLW	30
	MOVWF	4
	BTFSC	20,5
	BSF	4,7
	BCF	3,7	;pobrisi ali postavi IRP
	BTFSC	20,6
	BSF	3,7
	BTFSS	5,4	;izbira obmocja 80dB/40dB RA4?
	GOTO	ZANKA2
	RRF	0,0	;prepisi min/2 v (21) za obmocje 80dB
	MOVWF	21
	BCF	21,7
	INCF	4,1
	RRF	0,0	;prepisi max/2+1 v (22)
	MOVWF	22
	BCF	22,7
	INCF	22,1
	GOTO	ZANKA3
ZANKA2	MOVLW	20	;prepisi min-32 v (21) za obmocje 40dB
	SUBWF	0,0
	MOVWF	21
	INCF	4,1
	MOVLW	1F	;prepisi max-31 v (22)
	SUBWF	0,0
	MOVWF	22
	BTFSC	21,7	;preveri (21)
	CLRF	21
	BTFSC	22,7	;preveri (22)
	CLRF	22
ZANKA3	CLRF	27	;izracun mreze na zaslonu v (27)
	MOVLW	7
	ANDWF	20,0
	BTFSC	3,2
	INCF	26,1
	MOVLW	14
	ADDWF	26,1
	BTFSC	5,5	;izklop mreze RA5?
	BCF	3,0
	BTFSC	3,0
	BSF	27,0	;gornja od 8 pikic v (27)
	CALL	STOLP	;vpisi stolpec na LCD
	GOTO	ZANKA

;*** Vpisi stolpec (21,22) z mrezo (27) na polozaju (20) *** (21,22,23,24,25)
STOLP	MOVLW	0C	;izberi polovico zaslona
	IORWF	6,1
	MOVLW	0FB
	BTFSC	20,6
	MOVLW	0F7
	ANDWF	6,1
	MOVLW	7	;stevec odsekov (23)
	MOVWF	23
STOLP1	MOVLW	0FF	;izracunaj pikice (21) v (24)
	MOVWF	24
	MOVLW	8
	SUBWF	21,1
	BTFSC	3,0
	GOTO	STOLP2
	CLRF	24
	ADDWF	21,1
	BTFSC	3,2
	GOTO	STOLP2
	MOVLW	0F0
	BTFSC	21,2
	MOVWF	24
	BSF	3,0
	BTFSC	21,1
	RRF	24,1
	BSF	3,0
	BTFSC	21,1
	RRF	24,1
	BSF	3,0
	BTFSC	21,0
	RRF	24,1
	CLRF	21
STOLP2	MOVF	20,0	;LCD ukaz Y address = stolpec
	ANDLW	3F
	IORLW	40
	CALL	UKAZ
	MOVLW	0FF	;izracunaj pikice (22) v (25)
	MOVWF	25
	MOVLW	8
	SUBWF	22,1
	BTFSC	3,0
	GOTO	STOLP3
	CLRF	25
	ADDWF	22,1
	BTFSC	3,2
	GOTO	STOLP3
	MOVLW	0F0
	BTFSC	22,2
	MOVWF	25
	BSF	3,0
	BTFSC	22,1
	RRF	25,1
	BSF	3,0
	BTFSC	22,1
	RRF	25,1
	BSF	3,0
	BTFSC	22,0
	RRF	25,1
	CLRF	22
STOLP3	MOVF	23,0	;LCD ukaz X address = vrstica
	IORLW	0B8
	CALL	UKAZ
	MOVF	27,0	;mreza (27) na zaslon
	XORWF	24,0	;pikice (24) na zaslon
	XORWF	25,0	;pikice (25) na zaslon
	BTFSS	20,7	;izloci stolpce >127
	CALL	BAJT	;LCD podatek = 8-bitni odsek
	DECF	23,1
	BTFSS	23,7
	GOTO	STOLP1
	RETURN

;*** Vkljuci in inicializiraj LCD oba kontrolerja ***
INILCD	BSF	6,4	;onesposobi /RSTB
	BSF	6,2	;1=/CS1
	BCF	6,3	;0=/CS2
	MOVLW	3F	;display ON
	CALL	UKAZ
	MOVLW	0C0	;display start line 0
	CALL	UKAZ
	BCF	6,2	;0=/CS1
	BSF	6,3	;1=/CS2
	MOVLW	3F	;display ON
	CALL	UKAZ
	MOVLW	0C0	;display start line 0
	CALL	UKAZ
	RETURN

;*** Preveri BUSY in poslji podatek iz W ***
BAJT	BCF	6,7	;0=enable
	BSF	6,5	;1=read
	BCF	6,6	;0=instruction
	BSF	6,7	;1=enable
	CLRF	7	;nicle na D0-7
	NOP
	BTFSC	6,1	;preveri D7=BUSY
	GOTO	BAJT
	BCF	6,7	;0=enable
	MOVWF	7	;W na D0-7
	BCF	6,5	;0=write
	BSF	6,6	;1=data
	BSF	6,7	;1=enable
	NOP
	NOP
	BCF	6,7	;0=enable
	RETURN

;*** Preveri BUSY in poslji ukaz iz W ***
UKAZ	BCF	6,7	;0=enable
	BSF	6,5	;1=read
	BCF	6,6	;0=instruction
	BSF	6,7	;1=enable
	CLRF	7	;nicle na D0-7
	NOP
	BTFSC	6,1	;preveri D7=BUSY
	GOTO	UKAZ
	BCF	6,7	;0=enable
	MOVWF	7	;W na D0-7
	BCF	6,5	;0=write
	BSF	6,7	;1=enable
	NOP
	NOP
	BCF	6,7	;0=enable
	RETURN

;*** Nastavi konfiguracijo PICa 16F876/16F876A ***
	ORG	2007	;naslov konfiguracijske besede
	DW	3972	
;3: 11=/CP=off
;9: 1=/DEBUG=off, 00=WRT10=off, 1=/CPD=off 
;7: 0=LVP, 1=BODEN=on, 11=/CP=off
;2: 0=/PWRTE=on, 0=WDTE=off, 10=HSoscillator
	END

;*** Konec programa ***

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -