?? l12.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 + -