;****************************************************************************** ; This file is a basic template for assembly code for a PIC18F2550. Copy * ; this file into your project directory and modify or add to it as needed. * ; * ; Refer to the MPASM User's Guide for additional information on the * ; features of the assembler. * ; * ; Refer to the PIC18Fx455/x550 Data Sheet for additional * ; information on the architecture and instruction set. * ; * ;****************************************************************************** ; Hitachi HM55B kompassimodulin lukeminen ja tiedon tuominen LCD-näyttöön. * ; Filename:kompassi.asm * ; Date: 12.9.2011 * ; * ; * ; * ; * ; * ;****************************************************************************** ; * ; Files Required: P18F2550.INC * ; * ;****************************************************************************** LIST P=18F2550 ;directive to define processor #include ;processor specific variable definitions ;****************************************************************************** ;Configuration bits ;Microchip has changed the format for defining the configuration bits, please ;see the .inc file for futher details on notation. Below are a few examples. config PLLDIV = 1 ;config CPUDIV = OSC3_PLL4 ;config USBDIV = 2 config FOSC = HS ;XT_XT ;config FCMEM = OFF ;config IESO = OFF config PWRT = ON ;Käyttöjännitteen ylös nousun odotus ON/OFF config BOR = OFF ;Programmable Brown-out Reset (BOR) ;config BORV = 21 config VREGEN = OFF ;USB regulaattori ON/OFF config WDT = OFF ;Vahtikoira ajastin, joka aktivoituu resetoimalla prosessorin jos prosessori jumiutuu. ON/OFF config WDTPS = 32768 ;Vahtikoiran ajastus. config MCLRE = OFF ;MCLRE Pää resetti pinnissä ON/OFF config LPT1OSC = OFF ;Oscillaattorin ajaminen pienellä teholla. Pieni teho altistaa helpommin häiriölle. ON/OFF config PBADEN = OFF config CCP2MX = OFF config STVREN = ON ;Pinon ylivuodon resetti. ON/OFF config LVP = OFF ;Matala jännite ohjelmointi. Jos päällä osa B-portin pinneistä ei toimi. ;config ICPRT = OFF ;config XINST = OFF config DEBUG = OFF ;Muistin luku/kirjoitussuojabittejä. config CP0 = OFF config CP1 = OFF config CP2 = OFF config CP3 = OFF config CPB = OFF config CPD = OFF config WRT0 = OFF config WRT1 = OFF config WRT2 = OFF config WRT3 = OFF config WRTB = OFF config WRTC = OFF config WRTD = OFF config EBTR0 = OFF config EBTR1 = OFF config EBTR2 = OFF config EBTR3 = OFF config EBTRB = OFF ;****************************************************************************** ;Variable definitions ; These variables are only needed if low priority interrupts are used. ; More variables may be needed to store other special function registers used ; in the interrupt routines. CBLOCK 0x080 WREG_TEMP ;variable used for context saving STATUS_TEMP ;variable used for context saving BSR_TEMP ;variable used for context saving ENDC CBLOCK 0x000 ;Viiveen rekisterit. d1 d2 d3 KELLOTAAJUUS ;Tällä säädetään LCD-näytön viiveet toimimaan suuremmilla kuin 1Mhz kellotaajuuksilla. TEMPKELLOTAAJUUS ;Väliaikainen rekisteri KELLOTAAJUUS rekisterin datalle. ;LCD-näytön ohjaus rekistereitä. OHJAUSKASKY ;Tähän tulee kaikki ohjauskäskyt, jotka menee OHJAUSKOMENTO ja KIRJOITUSKOMENTO aliohjemmille. ENITENM4 ;Tähän jaetaan annetun tavun 4 eniten merkitsevää bittiä. VAHITENM4 ;Tähän jaetaan annetun tavun 4 vähiten merkitsevää bittiä. ;Väliaikaiset rekisterit. TEMP TEMPPI ;DB eli taulukon rekisterit TAULUKKO ;Kompansin lukemisen rekisterit. KOMPASSIBITTI ;Tallennetaan bitin tila luetaessa kompassi modulia. XKOMPASSIH ;Kompassin ylempi tavu X-akselilla. XKOMPASSIL ;Kompassin alempi tavu X-akselilla. XETUMERKKI ;Kompassin X-akselin etumerkki. YKOMPASSIH ;Kompassin ylempi tavu Y-akselilla. YKOMPASSIL ;Kompassin alempi tavu Y-akselilla. YETUMERKKI ;Kompassin Y-akselin etumerkki. ;X ja Y-akselin numeromuoto näihin rekistereihin. YKKOSETX KYMMENETX SADATX TUHANNETX YKKOSETY KYMMENETY SADATY TUHANNETY ENDC ;LCD-näytön bitit. ;Bitit jotka tarvitaan LCD-näytön ohjailussa. ;Liittyy LCD-näytön portin LCDOHJAUSBITIT rekisterin määrittelyyn. E equ 3 RS equ 1 RW equ 2 LCDKIIREINEN equ 7 ;Kompansin ohjausbitit B-portissa. EN equ 0 CLK equ 1 DOUT equ 2 DIN equ 3 ;LCD-näytön porttien määrittely kahteen eri porttiin. LCDKASKYTAVU equ PORTB ;Tähän ohjataan LCD-näytön 8 bittinen ohjauskäsky 2 osassa 4 bittinä. LCDOHJAUSBITIT equ PORTA ;Tähän ohjataan LCD-näytön ohjausbitit. LCDKASKYSUUNTAREKISTERI equ TRISB ;Suuntarekisterin määrittely uudelleen LCD-näytön aliohjelman takia. LCDOHJAUSSUUNTAREKISTERI equ TRISA ;Suuntarekisterin määrittely uudelleen LCD-näytön aliohjelman takia. KOMPASSIPORTTI equ PORTB ;Kompassin luennan portti. ;****************************************************************************** ;EEPROM data ; Data to be programmed into the Data EEPROM is defined here ORG 0xf00000 DE "Test Data",0,1,2,3,4,5 ;****************************************************************************** ;Reset vector ; This code will start executing when a reset occurs. ORG 0x0000 goto PORTIT ;Porttien alustukseen. ;****************************************************************************** ;High priority interrupt vector ; This code will start executing when a high priority interrupt occurs or ; when any interrupt occurs if interrupt priorities are not enabled. ORG 0x0008 bra HighInt ;Hypätään korkeamman tason keskeytykseen jos se on asetettu päälle. ;****************************************************************************** ;Low priority interrupt vector and routine ; This code will start executing when a low priority interrupt occurs. ; This code can be removed if low priority interrupts are not used. ORG 0x0018 movff STATUS,STATUS_TEMP ;save STATUS register movff WREG,WREG_TEMP ;save working register movff BSR,BSR_TEMP ;save BSR register ; *** low priority interrupt code goes here *** movff BSR_TEMP,BSR ;restore BSR register movff WREG_TEMP,WREG ;restore working register movff STATUS_TEMP,STATUS ;restore STATUS register retfie ;****************************************************************************** ;High priority interrupt routine ; The high priority interrupt code is placed here to avoid conflicting with ; the low priority interrupt vector. HighInt: ; *** high priority interrupt code goes here *** retfie FAST ;****************************************************************************** PORTIT ;Kytketään toimintoja pois päältä pinneistä. clrf PORTA clrf LATA clrf PORTB clrf LATB clrf PORTC clrf LATC BANKSEL ADCON0 ; Select Bank of ADCON0 clrf ADCON0 BANKSEL ADCON1 ; Select Bank of ADCON1 movlw b'00001111' ; Configure all pins movwf ADCON1 ; as digital inputs movlw 07h ; Turn off movwf CMCON ; comparators ;configuration bit = 0); otherwise, read as ‘0’. ;3: Unimplemented in 28-pin devices; read as ‘0’. ;Keskeytykset pinneistä pois päältä. BANKSEL CCP1CON clrf CCP1CON ; CCP moduli off BANKSEL CCP2CON clrf CCP2CON ; CCP moduli off ;Lopuksi asetellaan porttien pinnit joko sisääntuloiksi tai ulostuloiksi. ;Portin pinni saadaan sisääntuloksi 1 ja ulostuloksi 0 . ;A-portti BANKSEL TRISA movlw b'11110001' ;Bitit 7,6,5,4,3,2,1,0 movwf TRISA ;B-portti BANKSEL TRISB movlw b'00000100' ;Bitit 7,6,5,4,3,2,1,0 movwf TRISB ;C-portti BANKSEL TRISC movlw b'11111111' ;Bitit 7,6,5,4,3,2,1,0 movwf TRISC BANKSEL PORTA bcf INTCON,GIE ;Estetään kaikki keskeytykset. goto MAIN ;****************************************************************************** ;LCD-näytön ohjausaliohjelmisto ;Tarvittavia rekistereitä. ;OHJAUSKASKY ;Tähän tulee kaikki ohjauskäskyt, jotka menee OHJAUSKOMENTO ja KIRJOITUSKOMENTO aliohjemmille. ;ENITENM4 ;VAHITENM4 ;d1 ;d2 ;d3 ; ;Aliohjelmien esittely: ;LCDKAYNNISTYS Käynnistää näytön 4-bititillä ohjattavaksi. ;OHJAUSKOMENTO Suorittaa LCD-näytön ohjaukseenliittyvät komennot, kuten tyhjennys, kursorin siirto, uudelle riville siirtyminen jne. ;KIRJOITUSKOMENTO Kirjoittaa halutun merkin näyttöön. ;LCDVARATTU Tarkistaa koska LCD-näyttö on suorittanut kirjoituksen KIRJOITUSKOMENTO aliohjelman jälkeen. ;**************************************** ;LCD-näytön käynnistys viiveitä. ;***************************************** VIIVE15MILLISEKUNTTIA ;Viive 15ms. ;Viive mitoitettu 1Mhz kellotaajuuden mukaan. movf KELLOTAAJUUS,W ;Joten viive pitää uusia riittävän monta kertaa, movwf TEMPKELLOTAAJUUS ;että saadaan haluttu viiveen pituus mikro-ohjaimen taajuuden mukaan. VIIVE15MS ;3743 cycles movlw 0xEC movwf d1 movlw 0x03 movwf d2 VIIVE15MS_0 decfsz d1, f goto VIIVE15MS_0 decfsz d2, f goto VIIVE15MS_0 ;3 cycles nop nop decfsz TEMPKELLOTAAJUUS, f goto VIIVE15MS ;Uusitaan viive. return ;**************************************************************************************** VIIVE4_2MILLISEKUNTTIA ;Viive 4,2ms. ;Viive mitoitettu 1Mhz kellotaajuuden mukaan. movf KELLOTAAJUUS,W ;Joten viive pitää uusia riittävän monta kertaa, movwf TEMPKELLOTAAJUUS ;että saadaan haluttu viiveen pituus mikro-ohjaimen taajuuden mukaan. VIIVE4_2MS ;1043 cycles movlw 0xD0 movwf d1 movlw 0x01 movwf d2 VIIVE4_2MS_0 decfsz d1, f goto VIIVE4_2MS_0 decfsz d2, f goto VIIVE4_2MS_0 ;3 cycles nop nop decfsz TEMPKELLOTAAJUUS, f goto VIIVE4_2MS ;Uusitaan viive. return ;****************************************************************************************** VIIVE1MILLISEKUNTTIA ;Viive 1ms. ;Viive mitoitettu 1Mhz kellotaajuuden mukaan. movf KELLOTAAJUUS,W ;Joten viive pitää uusia riittävän monta kertaa, movwf TEMPKELLOTAAJUUS ;että saadaan haluttu viiveen pituus mikro-ohjaimen taajuuden mukaan. VIIVE1MS ;244 cycles movlw 0x51 movwf d1 VIIVE1MS_0 decfsz d1, f goto VIIVE1MS_0 ;2 cycles nop decfsz TEMPKELLOTAAJUUS, f goto VIIVE1MS ;Uusitaan viive. return ;****************************************************************************************** VIIVE100MIKROSEKUNTTIA ;Viive 100ms. ;Viive mitoitettu 1Mhz kellotaajuuden mukaan. movf KELLOTAAJUUS,W ;Joten viive pitää uusia riittävän monta kertaa, movwf TEMPKELLOTAAJUUS ;että saadaan haluttu viiveen pituus mikro-ohjaimen taajuuden mukaan. VIIVE100US ;19 cycles movlw 0x06 movwf d1 VIIVE100US_0 decfsz d1, f goto VIIVE100US_0 ;2 cycles nop decfsz TEMPKELLOTAAJUUS, f goto VIIVE100US ;Uusitaan viive. return ;********************************************************************************************** LCDKAYNNISTYS movlw 0x64 ;Asetetaan KELLOTAAJUUS rekisteri. movwf KELLOTAAJUUS bcf LCDOHJAUSBITIT,RS ;RS-ohjausbitti nollaksi. bcf LCDOHJAUSBITIT,RW ;RW-ohjausbitti nollaksi. call VIIVE15MILLISEKUNTTIA ;Odotetaan vähintään 15 ms virran kytkennän jälkeen. call PUOLISEK call PUOLISEK bsf LCDOHJAUSBITIT,E movlw b'00110000' movwf LCDKASKYTAVU call VIIVE100MIKROSEKUNTTIA bcf LCDOHJAUSBITIT,E clrf LCDKASKYTAVU CALL VIIVE15MILLISEKUNTTIA ;Odotetaan vähintään 15 ms virran kytkennän jälkeen. bsf LCDOHJAUSBITIT,E movlw b'00110000' movwf LCDKASKYTAVU call VIIVE100MIKROSEKUNTTIA bcf LCDOHJAUSBITIT,E clrf LCDKASKYTAVU call VIIVE1MILLISEKUNTTIA ;Odotetaan vähintään 1 ms. bsf LCDOHJAUSBITIT,E movlw b'00110000' movwf LCDKASKYTAVU call VIIVE100MIKROSEKUNTTIA bcf LCDOHJAUSBITIT,E clrf LCDKASKYTAVU ;Ja sitten käynnistetään LCD-moduli 4-bittisenä. Jos halutaan käynnistää 8-bittisenä, niin jätetään tämä kohta pois. call VIIVE1MILLISEKUNTTIA ;Odotetaan vähintään 1 ms. bsf LCDOHJAUSBITIT,E movlw b'00110000' movwf LCDKASKYTAVU call VIIVE100MIKROSEKUNTTIA bcf LCDOHJAUSBITIT,E clrf LCDKASKYTAVU call VIIVE100MIKROSEKUNTTIA bsf LCDOHJAUSBITIT,E movlw b'00100000' movwf LCDKASKYTAVU call VIIVE100MIKROSEKUNTTIA bcf LCDOHJAUSBITIT,E clrf LCDKASKYTAVU call VIIVE15MILLISEKUNTTIA ;Odotetaan vähintään 15 ms virran kytkennän jälkeen. ;---Nyt näyttö on käynnistynyt 4 bittisenä, joten seuraavat 8-bittiset käskyt pitää antaa 2 osassa eli 4 bitin paloina. Joista ensin annetaan aina ylimmät neljä bittiä, sitten alimmat 4. call RIVIMAARAJAMERKKIKOKO call VIIVE15MILLISEKUNTTIA ;Odotetaan vähintään 15 ms. ;Näyttö pitäisi olla toimintakunnossa. return ;**************************************************** ;OHJAUSKASKY ;ENITENM4 ;VAHITENM4 OHJAUSKOMENTO ;Muutetaan OHJAUSKASKY-rekisteri ENITENM4 ja VAHITENM4 rekistereihin. movf OHJAUSKASKY,W movwf VAHITENM4 swapf VAHITENM4 bcf VAHITENM4,0 bcf VAHITENM4,1 bcf VAHITENM4,2 bcf VAHITENM4,3 movf OHJAUSKASKY,W movwf ENITENM4 ;swapf ENITENM4 bcf ENITENM4,0 bcf ENITENM4,1 bcf ENITENM4,2 bcf ENITENM4,3 ;Neljä eniten merkitsevää bittiä. bsf LCDOHJAUSBITIT,E ;movf ENITENM4,W ;movwf LCDKASKYTAVU btfsc ENITENM4,4 bsf LCDKASKYTAVU,4 btfss ENITENM4,4 bcf LCDKASKYTAVU,4 btfsc ENITENM4,5 bsf LCDKASKYTAVU,5 btfss ENITENM4,5 bcf LCDKASKYTAVU,5 btfsc ENITENM4,6 bsf LCDKASKYTAVU,6 btfss ENITENM4,6 bcf LCDKASKYTAVU,6 btfsc ENITENM4,7 bsf LCDKASKYTAVU,7 btfss ENITENM4,7 bcf LCDKASKYTAVU,7 call VIIVE100MIKROSEKUNTTIA bcf LCDOHJAUSBITIT,E ;clrf LCDKASKYTAVU bcf LCDKASKYTAVU,4 bcf LCDKASKYTAVU,5 bcf LCDKASKYTAVU,6 bcf LCDKASKYTAVU,7 call VIIVE100MIKROSEKUNTTIA ;Neljä vähiten merkitsevää bittiä. bsf LCDOHJAUSBITIT,E ;movf VAHITENM4,W ;movwf LCDKASKYTAVU btfsc VAHITENM4,4 bsf LCDKASKYTAVU,4 btfss VAHITENM4,4 bcf LCDKASKYTAVU,4 btfsc VAHITENM4,5 bsf LCDKASKYTAVU,5 btfss VAHITENM4,5 bcf LCDKASKYTAVU,5 btfsc VAHITENM4,6 bsf LCDKASKYTAVU,6 btfss VAHITENM4,6 bcf LCDKASKYTAVU,6 btfsc VAHITENM4,7 bsf LCDKASKYTAVU,7 btfss VAHITENM4,7 bcf LCDKASKYTAVU,7 call VIIVE100MIKROSEKUNTTIA bcf LCDOHJAUSBITIT,E ;clrf LCDKASKYTAVU bcf LCDKASKYTAVU,4 bcf LCDKASKYTAVU,5 bcf LCDKASKYTAVU,6 bcf LCDKASKYTAVU,7 call LCDVARATTU return ;***************************************** ;OHJAUSKASKY ;ENITENM4 ;VAHITENM4 KIRJOITUSKOMENTO ;Muutetaan OHJAUSKASKY-rekisteri ENITENM4 ja VAHITENM4 rekistereihin. movf OHJAUSKASKY,W movwf VAHITENM4 swapf VAHITENM4 bcf VAHITENM4,0 bcf VAHITENM4,1 bcf VAHITENM4,2 bcf VAHITENM4,3 movf OHJAUSKASKY,W movwf ENITENM4 ;swapf ENITENM4 bcf ENITENM4,0 bcf ENITENM4,1 bcf ENITENM4,2 bcf ENITENM4,3 bsf LCDOHJAUSBITIT,RS ;Neljä eniten merkitsevää bittiä. bsf LCDOHJAUSBITIT,E ;movf ENITENM4,W ;movwf LCDKASKYTAVU btfsc ENITENM4,4 bsf LCDKASKYTAVU,4 btfss ENITENM4,4 bcf LCDKASKYTAVU,4 btfsc ENITENM4,5 bsf LCDKASKYTAVU,5 btfss ENITENM4,5 bcf LCDKASKYTAVU,5 btfsc ENITENM4,6 bsf LCDKASKYTAVU,6 btfss ENITENM4,6 bcf LCDKASKYTAVU,6 btfsc ENITENM4,7 bsf LCDKASKYTAVU,7 btfss ENITENM4,7 bcf LCDKASKYTAVU,7 call VIIVE100MIKROSEKUNTTIA bcf LCDOHJAUSBITIT,E ;clrf LCDKASKYTAVU bcf LCDKASKYTAVU,4 bcf LCDKASKYTAVU,5 bcf LCDKASKYTAVU,6 bcf LCDKASKYTAVU,7 call VIIVE100MIKROSEKUNTTIA ;Neljä vähiten merkitsevää bittiä. bsf LCDOHJAUSBITIT,E ;movf VAHITENM4,W ;movwf LCDKASKYTAVU btfsc VAHITENM4,4 bsf LCDKASKYTAVU,4 btfss VAHITENM4,4 bcf LCDKASKYTAVU,4 btfsc VAHITENM4,5 bsf LCDKASKYTAVU,5 btfss VAHITENM4,5 bcf LCDKASKYTAVU,5 btfsc VAHITENM4,6 bsf LCDKASKYTAVU,6 btfss VAHITENM4,6 bcf LCDKASKYTAVU,6 btfsc VAHITENM4,7 bsf LCDKASKYTAVU,7 btfss VAHITENM4,7 bcf LCDKASKYTAVU,7 call VIIVE100MIKROSEKUNTTIA bcf LCDOHJAUSBITIT,E bcf LCDOHJAUSBITIT,RS clrf LCDKASKYTAVU call VIIVE100MIKROSEKUNTTIA call LCDVARATTU return ;******************************************* ;Tämä aliohjelma odottaa kunnes LCD-näyttö on käsitellyt annetun käskyn/merkin. LCDVARATTU BANKSEL LCDKASKYSUUNTAREKISTERI bsf LCDKASKYSUUNTAREKISTERI,LCDKIIREINEN BANKSEL PORTA bsf LCDOHJAUSBITIT,RW POLLAUS call VIIVE100MIKROSEKUNTTIA bsf LCDOHJAUSBITIT,E call VIIVE100MIKROSEKUNTTIA btfss LCDKASKYTAVU,LCDKIIREINEN ;Tarkastetaan onko bitti LCDKIIREINEN nolla, jos ei ole niin hypätään seuraavn käskyn yli. goto MENINOLLAAN ;Hyppy kohtaan MENINOLLAAN. bcf LCDOHJAUSBITIT,E call VIIVE100MIKROSEKUNTTIA bsf LCDOHJAUSBITIT,E call VIIVE100MIKROSEKUNTTIA bcf LCDOHJAUSBITIT,E goto POLLAUS MENINOLLAAN bcf LCDOHJAUSBITIT,E bcf LCDOHJAUSBITIT,RW BANKSEL LCDKASKYSUUNTAREKISTERI bcf LCDKASKYSUUNTAREKISTERI,LCDKIIREINEN BANKSEL PORTA return ;********************************************** ;Tässä päivitetään näytön tekstit. NAYTTO_PAIVITYS1 call KURSORIKOTIASEMAAN movlw A'X' movwf OHJAUSKASKY call KIRJOITUSKOMENTO movlw A':' movwf OHJAUSKASKY call KIRJOITUSKOMENTO movf XETUMERKKI,W movwf OHJAUSKASKY call KIRJOITUSKOMENTO movf TUHANNETX,W movwf OHJAUSKASKY call KIRJOITUSKOMENTO movf SADATX,W movwf OHJAUSKASKY call KIRJOITUSKOMENTO movf KYMMENETX,W movwf OHJAUSKASKY call KIRJOITUSKOMENTO movf YKKOSETX,W movwf OHJAUSKASKY call KIRJOITUSKOMENTO movlw A' ' movwf OHJAUSKASKY call KIRJOITUSKOMENTO movlw A' ' movwf OHJAUSKASKY call KIRJOITUSKOMENTO movlw A' ' movwf OHJAUSKASKY call KIRJOITUSKOMENTO movlw A' ' movwf OHJAUSKASKY call KIRJOITUSKOMENTO movlw A' ' movwf OHJAUSKASKY call KIRJOITUSKOMENTO movlw A' ' movwf OHJAUSKASKY call KIRJOITUSKOMENTO movlw A' ' movwf OHJAUSKASKY call KIRJOITUSKOMENTO movlw A' ' movwf OHJAUSKASKY call KIRJOITUSKOMENTO movlw A' ' movwf OHJAUSKASKY call KIRJOITUSKOMENTO movlw 0xA8 ;Toiselle riville movwf OHJAUSKASKY call OHJAUSKOMENTO movlw A'Y' movwf OHJAUSKASKY call KIRJOITUSKOMENTO movlw A':' movwf OHJAUSKASKY call KIRJOITUSKOMENTO movf YETUMERKKI,W movwf OHJAUSKASKY call KIRJOITUSKOMENTO movf TUHANNETY,W movwf OHJAUSKASKY call KIRJOITUSKOMENTO movf SADATY,W movwf OHJAUSKASKY call KIRJOITUSKOMENTO movf KYMMENETY,W movwf OHJAUSKASKY call KIRJOITUSKOMENTO movf YKKOSETY,W movwf OHJAUSKASKY call KIRJOITUSKOMENTO movlw A' ' movwf OHJAUSKASKY call KIRJOITUSKOMENTO movlw A' ' movwf OHJAUSKASKY call KIRJOITUSKOMENTO movlw A' ' movwf OHJAUSKASKY call KIRJOITUSKOMENTO movlw A' ' movwf OHJAUSKASKY call KIRJOITUSKOMENTO movlw A' ' movwf OHJAUSKASKY call KIRJOITUSKOMENTO movlw A' ' movwf OHJAUSKASKY call KIRJOITUSKOMENTO movlw A' ' movwf OHJAUSKASKY call KIRJOITUSKOMENTO movlw A' ' movwf OHJAUSKASKY call KIRJOITUSKOMENTO movlw A' ' movwf OHJAUSKASKY call KIRJOITUSKOMENTO return ;************************************************* ;TESTI TESTI_NAYTTO_PAIVITYS1 call KURSORIKOTIASEMAAN movf XETUMERKKI,W movwf OHJAUSKASKY call KIRJOITUSKOMENTO movf TUHANNETX,W movwf OHJAUSKASKY call KIRJOITUSKOMENTO movf SADATX,W movwf OHJAUSKASKY call KIRJOITUSKOMENTO movf KYMMENETX,W movwf OHJAUSKASKY call KIRJOITUSKOMENTO movf YKKOSETX,W movwf OHJAUSKASKY call KIRJOITUSKOMENTO movlw A'X' movwf OHJAUSKASKY call KIRJOITUSKOMENTO movlw A'0' btfsc XKOMPASSIH,1 movlw A'1' movwf OHJAUSKASKY call KIRJOITUSKOMENTO movlw A'0' btfsc XKOMPASSIH,0 movlw A'1' movwf OHJAUSKASKY call KIRJOITUSKOMENTO movlw A'0' btfsc XKOMPASSIL,7 movlw A'1' movwf OHJAUSKASKY call KIRJOITUSKOMENTO movlw A'0' btfsc XKOMPASSIL,6 movlw A'1' movwf OHJAUSKASKY call KIRJOITUSKOMENTO movlw A'0' btfsc XKOMPASSIL,5 movlw A'1' movwf OHJAUSKASKY call KIRJOITUSKOMENTO movlw A'0' btfsc XKOMPASSIL,4 movlw A'1' movwf OHJAUSKASKY call KIRJOITUSKOMENTO movlw A'0' btfsc XKOMPASSIL,3 movlw A'1' movwf OHJAUSKASKY call KIRJOITUSKOMENTO movlw A'0' btfsc XKOMPASSIL,2 movlw A'1' movwf OHJAUSKASKY call KIRJOITUSKOMENTO movlw A'0' btfsc XKOMPASSIL,1 movlw A'1' movwf OHJAUSKASKY call KIRJOITUSKOMENTO movlw A'0' btfsc XKOMPASSIL,0 movlw A'1' movwf OHJAUSKASKY call KIRJOITUSKOMENTO movlw 0xA8 ;Toiselle riville movwf OHJAUSKASKY call OHJAUSKOMENTO movf YETUMERKKI,W movwf OHJAUSKASKY call KIRJOITUSKOMENTO movf TUHANNETY,W movwf OHJAUSKASKY call KIRJOITUSKOMENTO movf SADATY,W movwf OHJAUSKASKY call KIRJOITUSKOMENTO movf KYMMENETY,W movwf OHJAUSKASKY call KIRJOITUSKOMENTO movf YKKOSETY,W movwf OHJAUSKASKY call KIRJOITUSKOMENTO movlw A'Y' movwf OHJAUSKASKY call KIRJOITUSKOMENTO movlw A'0' btfsc YKOMPASSIH,1 movlw A'1' movwf OHJAUSKASKY call KIRJOITUSKOMENTO movlw A'0' btfsc YKOMPASSIH,0 movlw A'1' movwf OHJAUSKASKY call KIRJOITUSKOMENTO movlw A'0' btfsc YKOMPASSIL,7 movlw A'1' movwf OHJAUSKASKY call KIRJOITUSKOMENTO movlw A'0' btfsc YKOMPASSIL,6 movlw A'1' movwf OHJAUSKASKY call KIRJOITUSKOMENTO movlw A'0' btfsc YKOMPASSIL,5 movlw A'1' movwf OHJAUSKASKY call KIRJOITUSKOMENTO movlw A'0' btfsc YKOMPASSIL,4 movlw A'1' movwf OHJAUSKASKY call KIRJOITUSKOMENTO movlw A'0' btfsc YKOMPASSIL,3 movlw A'1' movwf OHJAUSKASKY call KIRJOITUSKOMENTO movlw A'0' btfsc YKOMPASSIL,2 movlw A'1' movwf OHJAUSKASKY call KIRJOITUSKOMENTO movlw A'0' btfsc YKOMPASSIL,1 movlw A'1' movwf OHJAUSKASKY call KIRJOITUSKOMENTO movlw A'0' btfsc YKOMPASSIL,0 movlw A'1' movwf OHJAUSKASKY call KIRJOITUSKOMENTO return ;************************************************* ;Ensinmäiset käskyt LCD-näytölle käynnistyksen jälkeen. ENSINMAISETKASKYTLCDLLE call SAMMUTANAYTTO call TYHJENNANAYTTO call MERKKIMUISTINOSOITIN call KURSORIKOTIASEMAAN call NAYTTOPAALLE1 return ;************************************************* ;Erilaisia käskyjä LCD-näytölle. ;Bittien merkitykset. HUOM! Bitit erotettu toisistaan pisteillä. Esim. 0.0.0.0.0.0.0.0 ; Bitti => Mitä tarkoittaa. ; 1 => Bitin tila aina. ; 0 => Bitin tila aina. ; * => Oletusasetus LCD-näytössä valmiina. ; x => Ei merkitystä ko. tilanteessa ; 1/D => *1=Lisäys/0=Vähennys ; R/L => Siirtosuunta *1=Oikealle/0=Vasemmalle ; S => Näytön siirto 1=Päällä/*0=Pois ; 8/4 => Dataväylän leveys *1=8 bit/0=4 bit ; D => Näyttö 1=Päällä/*0=Pois ; 2/1 => Näyttö 1=2 rivinen/*0=1 rivinen ; U => Kursori 1=Käytössä/*0=Pois ; 10/7 => Merkkikoko 1=5x10/*0=5x7 pistettä ; B => Kursori vilkutus 1=Päällä/*0=Pois ; D/C Siirto 1=Näyttö/*0=Kursori TYHJENNANAYTTO ; Tyhjennä näyttömuisti 0.0.0.0.0.0.0.1 movlw b'00000001' ; Tyhjennetään näyttö. movwf OHJAUSKASKY call OHJAUSKOMENTO call VIIVE15MS return KURSORIKOTIASEMAAN ; Näyttö ja kursori alkutilaan 0.0.0.0.0.0.1.x movlw b'00000010' ; Siirretään kursori kotia. Tähän voi joutua joissakin näytöissä laittaan 000000011, jotta kursori palaa kotiasemaan. movwf OHJAUSKASKY call OHJAUSKOMENTO call VIIVE15MS return MERKKIMUISTINOSOITIN ; Näyttömuistin osoitteen ominaisuudet. 1/D => *1=Lisäys/0=Vähennys, S => Näytön siirto 1=Päällä/*0=Pois ; 0.0.0.0.0.1.1/D.S movlw b'00000110' ; movwf OHJAUSKASKY call OHJAUSKOMENTO call VIIVE15MS return SAMMUTANAYTTO ;Sammuta näyttö. ; D = Moduli päälle(1) pois(0), U = Kursori käytössä(1) pois(0), B = Vilkutus käytössä(1) pois(0) ; 0.0.0.0.1.D.U.B movlw b'00001000' movwf OHJAUSKASKY call OHJAUSKOMENTO call VIIVE15MS return NAYTTOPAALLE1 ;Kytketään moduli päälle ilman kursoria ja sen vilkkumista. ; D = Moduli päälle(1) pois(0), U = Kursori käytössä(1) pois(0), B = Vilkutus käytössä(1) pois(0) ; 0.0.0.0.1.D.U.B movlw b'00001100' movwf OHJAUSKASKY call OHJAUSKOMENTO call VIIVE15MS return NAYTTOPAALLE2 ;Kytketään moduli päälle kursorilla ja ilman sen vilkkumista. ; D = Moduli päälle(1) pois(0), U = Kursori käytössä(1) pois(0), B = Vilkutus käytössä(1) pois(0) ; 0.0.0.0.1.D.U.B movlw b'00001110' movwf OHJAUSKASKY call OHJAUSKOMENTO call VIIVE15MS return NAYTTOPAALLE3 ;Kytketään moduli päälle vilkkuvalla kursorilla. ; D = Moduli päälle(1) pois(0), U = Kursori käytössä(1) pois(0), B = Vilkutus käytössä(1) pois(0) ; 0.0.0.0.1.D.U.B movlw b'00001111' movwf OHJAUSKASKY call OHJAUSKOMENTO call VIIVE15MS return RIVIMAARAJAMERKKIKOKO ;Asetetaan rivien määrä merkkimatriisin koko. ; Tekstirivien määrä 2/1, 0=1 rivi ja 1=2 rivi näyttö, ja merkkikoko 10/7, 0=5x7 ja 1=5x10 pisteen matriisi. ; 0.0.1.1.2/1.10/7.x.x movlw b'00111000' ;2 rivinen näyttö 5x7 merkkimatriisi käyttöön. movwf OHJAUSKASKY call OHJAUSKOMENTO call VIIVE15MS return ;********************************************************************************************* ;Viive näytön käynnistymiseen 0,5s 4Mhz. PUOLISEK ;499994 cycles movlw 0x05 movwf TEMPPI PUOLISEK1 movlw 0x03 movwf d1 movlw 0x18 movwf d2 movlw 0x02 movwf d3 PUOLISEK_0 decfsz d1, f goto PUOLISEK_0 decfsz d2, f goto PUOLISEK_0 decfsz d3, f goto PUOLISEK_0 decfsz TEMPPI, f goto PUOLISEK1 ;Uusitaan viive. ;2 cycles ;goto $+1 ;4 cycles (including call) return ;***************************************************************************** ;Kompassin lukemisen aliohjelmat. ;Luetaan Hitachi HM55B kompassimodulin data. ;Kompansin ohjausbitit B-portissa. ; EN equ 0 ; CLK equ 1 ; DOUT equ 2 ; DIN equ 3 ;Kompansin lukemisen rekisterit. ; XKOMPASSIH ;Kompassin ylempi tavu X-akselilla. ; XKOMPASSIL ;Kompassin alempi tavu X-akselilla. ; XETUMERKKI ;Kompassin X-akselin etumerkki. ; ; YKOMPASSIH ;Kompassin ylempi tavu Y-akselilla. ; YKOMPASSIL ;Kompassin alempi tavu Y-akselilla. ; YETUMERKKI ;Kompassin Y-akselin etumerkki. ; KOMPASSIPORTTI equ TRISB ;Kompassin luennan portti. ;*********************************************** ;*Kompassin lukemisen aliohjelmien aliohjelmat.* ;*********************************************** KOMPASSI_KELLOPULSSI_VIIVE ;7493 cycles movlw 0x02 movwf TEMPPI KOMPASSI_KELLOPULSSI_VIIVE_X movlw 0xDA movwf d1 movlw 0x02;0x06 movwf d2 KOMPASSI_KELLOPULSSI_VIIVE_0 decfsz d1, f goto KOMPASSI_KELLOPULSSI_VIIVE_0 decfsz d2, f goto KOMPASSI_KELLOPULSSI_VIIVE_0 decfsz TEMPPI, f goto KOMPASSI_KELLOPULSSI_VIIVE_X return PELKKA_CLK bsf KOMPASSIPORTTI,CLK bcf KOMPASSIPORTTI,DIN call KOMPASSI_KELLOPULSSI_VIIVE call KOMPASSI_KELLOPULSSI_VIIVE bcf KOMPASSIPORTTI,CLK bcf KOMPASSIPORTTI,DIN call KOMPASSI_KELLOPULSSI_VIIVE call KOMPASSI_KELLOPULSSI_VIIVE return CLK_JA_DIN bsf KOMPASSIPORTTI,CLK bsf KOMPASSIPORTTI,DIN call KOMPASSI_KELLOPULSSI_VIIVE call KOMPASSI_KELLOPULSSI_VIIVE bcf KOMPASSIPORTTI,CLK bcf KOMPASSIPORTTI,DIN call KOMPASSI_KELLOPULSSI_VIIVE call KOMPASSI_KELLOPULSSI_VIIVE return CLK_JA_LUKU bsf KOMPASSIPORTTI,CLK call KOMPASSI_KELLOPULSSI_VIIVE call KOMPASSI_KELLOPULSSI_VIIVE bcf KOMPASSIBITTI,0 btfsc KOMPASSIPORTTI,DOUT bsf KOMPASSIBITTI,0 bcf KOMPASSIPORTTI,CLK call KOMPASSI_KELLOPULSSI_VIIVE call KOMPASSI_KELLOPULSSI_VIIVE return ;********************************** ;*Kompassin lukemisen aliohjelmat.* ;********************************** KOMPASSI_ALUSTUS bsf KOMPASSIPORTTI,EN bcf KOMPASSIPORTTI,CLK bcf KOMPASSIPORTTI,DIN call KOMPASSI_KELLOPULSSI_VIIVE call KOMPASSI_KELLOPULSSI_VIIVE call KOMPASSI_KELLOPULSSI_VIIVE call KOMPASSI_KELLOPULSSI_VIIVE return KOMPASSI_RESET movlw 0x04 movwf TEMP bcf KOMPASSIPORTTI,EN bcf KOMPASSIPORTTI,CLK call KOMPASSI_KELLOPULSSI_VIIVE call KOMPASSI_KELLOPULSSI_VIIVE KOMPASSI_RESET_0 call PELKKA_CLK decfsz TEMP, f goto KOMPASSI_RESET_0 bsf KOMPASSIPORTTI,EN call KOMPASSI_KELLOPULSSI_VIIVE call KOMPASSI_KELLOPULSSI_VIIVE return KOMPASSI_LUKU_KAYNNISTYS movlw 0x03 movwf TEMP bcf KOMPASSIPORTTI,EN bcf KOMPASSIPORTTI,CLK call KOMPASSI_KELLOPULSSI_VIIVE call KOMPASSI_KELLOPULSSI_VIIVE call CLK_JA_DIN KOMPASSI_LUKU_KAYNNISTYS_0 call PELKKA_CLK decfsz TEMP, f goto KOMPASSI_LUKU_KAYNNISTYS_0 call KOMPASSI_MITTAUKSEN_TILA return KOMPASSI_MITTAUKSEN_TILA bsf KOMPASSIPORTTI,EN call KOMPASSI_KELLOPULSSI_VIIVE call KOMPASSI_KELLOPULSSI_VIIVE bcf KOMPASSIPORTTI,EN call KOMPASSI_KELLOPULSSI_VIIVE call CLK_JA_DIN call CLK_JA_DIN call PELKKA_CLK call PELKKA_CLK clrf XKOMPASSIH clrf XKOMPASSIL clrf YKOMPASSIH clrf YKOMPASSIL call CLK_JA_LUKU bcf XKOMPASSIH,1 btfsc KOMPASSIBITTI,0 bsf XKOMPASSIH,1 call CLK_JA_LUKU bcf XKOMPASSIH,0 btfsc KOMPASSIBITTI,0 bsf XKOMPASSIH,0 call CLK_JA_LUKU bcf XKOMPASSIL,7 btfsc KOMPASSIBITTI,0 bsf XKOMPASSIL,7 call CLK_JA_LUKU bcf XKOMPASSIL,6 btfsc KOMPASSIBITTI,0 bsf XKOMPASSIL,6 ;Tarkastetaan voidaanko lukea tulos. movlw 0x03 xorwf XKOMPASSIH,W btfss STATUS,Z ; Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. goto KOMPASSI_MITTAUKSEN_TILA clrf XKOMPASSIH clrf XKOMPASSIL clrf YKOMPASSIH clrf YKOMPASSIL call KOMPASSI_LUKEMINEN return KOMPASSI_LUKEMINEN ;Luetaan X-akseli. call CLK_JA_LUKU bcf XKOMPASSIH,2 btfsc KOMPASSIBITTI,0 bsf XKOMPASSIH,2 call CLK_JA_LUKU bcf XKOMPASSIH,1 btfsc KOMPASSIBITTI,0 bsf XKOMPASSIH,1 call CLK_JA_LUKU bcf XKOMPASSIH,0 btfsc KOMPASSIBITTI,0 bsf XKOMPASSIH,0 call CLK_JA_LUKU bcf XKOMPASSIL,7 btfsc KOMPASSIBITTI,0 bsf XKOMPASSIL,7 call CLK_JA_LUKU bcf XKOMPASSIL,6 btfsc KOMPASSIBITTI,0 bsf XKOMPASSIL,6 call CLK_JA_LUKU bcf XKOMPASSIL,5 btfsc KOMPASSIBITTI,0 bsf XKOMPASSIL,5 call CLK_JA_LUKU bcf XKOMPASSIL,4 btfsc KOMPASSIBITTI,0 bsf XKOMPASSIL,4 call CLK_JA_LUKU bcf XKOMPASSIL,3 btfsc KOMPASSIBITTI,0 bsf XKOMPASSIL,3 call CLK_JA_LUKU bcf XKOMPASSIL,2 btfsc KOMPASSIBITTI,0 bsf XKOMPASSIL,2 call CLK_JA_LUKU bcf XKOMPASSIL,1 btfsc KOMPASSIBITTI,0 bsf XKOMPASSIL,1 call CLK_JA_LUKU bcf XKOMPASSIL,0 btfsc KOMPASSIBITTI,0 bsf XKOMPASSIL,0 ;Luetaan Y-akseli. call CLK_JA_LUKU bcf YKOMPASSIH,2 btfsc KOMPASSIBITTI,0 bsf YKOMPASSIH,2 call CLK_JA_LUKU bcf YKOMPASSIH,1 btfsc KOMPASSIBITTI,0 bsf YKOMPASSIH,1 call CLK_JA_LUKU bcf YKOMPASSIH,0 btfsc KOMPASSIBITTI,0 bsf YKOMPASSIH,0 call CLK_JA_LUKU bcf YKOMPASSIL,7 btfsc KOMPASSIBITTI,0 bsf YKOMPASSIL,7 call CLK_JA_LUKU bcf YKOMPASSIL,6 btfsc KOMPASSIBITTI,0 bsf YKOMPASSIL,6 call CLK_JA_LUKU bcf YKOMPASSIL,5 btfsc KOMPASSIBITTI,0 bsf YKOMPASSIL,5 call CLK_JA_LUKU bcf YKOMPASSIL,4 btfsc KOMPASSIBITTI,0 bsf YKOMPASSIL,4 call CLK_JA_LUKU bcf YKOMPASSIL,3 btfsc KOMPASSIBITTI,0 bsf YKOMPASSIL,3 call CLK_JA_LUKU bcf YKOMPASSIL,2 btfsc KOMPASSIBITTI,0 bsf YKOMPASSIL,2 call CLK_JA_LUKU bcf YKOMPASSIL,1 btfsc KOMPASSIBITTI,0 bsf YKOMPASSIL,1 call CLK_JA_LUKU bcf YKOMPASSIL,0 btfsc KOMPASSIBITTI,0 bsf YKOMPASSIL,0 ;Luetaan X ja Y-akselien etumerkit ja käänteisluvut rekistereistä jos etumerkki on miinus. btfss YKOMPASSIH,2 goto YPLUS movlw '-' movwf YETUMERKKI ;Kompassin Y-akselin etumerkki. comf YKOMPASSIL comf YKOMPASSIH bcf YKOMPASSIH,7 ;Ja koska luku 11-bittinen niin laitetaan 2*8 bitin rekistrin korkeimmasta tavusta ylimääräset bitit nolliksi. bcf YKOMPASSIH,6 ;Koska ne kääntyi ykkösiksi comf käskyssä. bcf YKOMPASSIH,5 bcf YKOMPASSIH,4 bcf YKOMPASSIH,3 goto YPLUSOHI YPLUS movlw '+' movwf YETUMERKKI ;Kompassin Y-akselin etumerkki. YPLUSOHI btfss XKOMPASSIH,2 goto XPLUS movlw '-' movwf XETUMERKKI ;Kompassin X-akselin etumerkki. comf XKOMPASSIL comf XKOMPASSIH bcf XKOMPASSIH,7 ;Ja koska luku 11-bittinen niin laitetaan 2*8 bitin rekistrin korkeimmasta tavusta ylimääräset bitit nolliksi. bcf XKOMPASSIH,6 ;Koska ne kääntyi ykkösiksi comf käskyssä. bcf XKOMPASSIH,5 bcf XKOMPASSIH,4 bcf XKOMPASSIH,3 return XPLUS movlw '+' movwf XETUMERKKI ;Kompassin X-akselin etumerkki. return ;****************************************************************************** ;****************************************************************************** ;Lasketaan kompassin X ja Y-akseleiden luvut. KOMPASSI_XY_LASKENTA movlw A'0' ;Ladataan w rekisteriin luku 0. movwf YKKOSETX ;Ladataan w rekisterin arvo rekisteriin. movlw A'0' ;Ladataan w rekisteriin luku 0. movwf KYMMENETX ;Ladataan w rekisterin arvo rekisteriin. movlw A'0' ;Ladataan w rekisteriin luku 0. movwf SADATX ;Ladataan w rekisterin arvo rekisteriin. movlw A'0' ;Ladataan w rekisteriin luku 0. movwf TUHANNETX ;Ladataan w rekisterin arvo rekisteriin. movlw A'0' ;Ladataan w rekisteriin luku 0. movwf YKKOSETY ;Ladataan w rekisterin arvo rekisteriin. movlw A'0' ;Ladataan w rekisteriin luku 0. movwf KYMMENETY ;Ladataan w rekisterin arvo rekisteriin. movlw A'0' ;Ladataan w rekisteriin luku 0. movwf SADATY ;Ladataan w rekisterin arvo rekisteriin. movlw A'0' ;Ladataan w rekisteriin luku 0. movwf TUHANNETY ;Ladataan w rekisterin arvo rekisteriin. incf XKOMPASSIH incf YKOMPASSIH incfsz XKOMPASSIL, f goto OHIX decf XKOMPASSIL OHIX incfsz YKOMPASSIL, f goto OHIY decf YKOMPASSIL OHIY goto EIYLIX ;Alustus tehty jatketaan laskentaan. KOMPASSI_XY_AKSELI_LASKENTA_X incf YKKOSETX movlw A':' xorwf YKKOSETX,W ; btfss STATUS,Z ;Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. goto EIYLIX ;Ei yli 9. movlw A'0' ;Ladataan w rekisteriin luku 0. movwf YKKOSETX ;Ladataan w rekisterin arvo rekisteriin. incf KYMMENETX movlw A':' xorwf KYMMENETX,W ; btfss STATUS,Z ;Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. goto EIYLIX ;Ei yli 9. movlw A'0' ;Ladataan w rekisteriin luku 0. movwf KYMMENETX ;Ladataan w rekisterin arvo rekisteriin. incf SADATX movlw A':' xorwf SADATX,W ; btfss STATUS,Z ;Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. goto EIYLIX ;Ei yli 9. movlw A'0' ;Ladataan w rekisteriin luku 0. movwf SADATX ;Ladataan w rekisterin arvo rekisteriin. incf TUHANNETX movlw A':' xorwf TUHANNETX,W ; btfss STATUS,Z ;Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. goto EIYLIX ;Ei yli 9. movlw A'0' ;Ladataan w rekisteriin luku 0. movwf TUHANNETX ;Ladataan w rekisterin arvo rekisteriin. EIYLIX decfsz XKOMPASSIL, f goto KOMPASSI_XY_AKSELI_LASKENTA_X decfsz XKOMPASSIH, f goto KOMPASSI_XY_AKSELI_LASKENTA_X goto EIYLIY KOMPASSI_XY_AKSELI_LASKENTA_Y incf YKKOSETY movlw A':' xorwf YKKOSETY,W ; btfss STATUS,Z ;Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. goto EIYLIY ;Ei yli 9. movlw A'0' ;Ladataan w rekisteriin luku 0. movwf YKKOSETY ;Ladataan w rekisterin arvo rekisteriin. incf KYMMENETY movlw A':' xorwf KYMMENETY,W ; btfss STATUS,Z ;Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. goto EIYLIY ;Ei yli 9. movlw A'0' ;Ladataan w rekisteriin luku 0. movwf KYMMENETY ;Ladataan w rekisterin arvo rekisteriin. incf SADATY movlw A':' xorwf SADATY,W ; btfss STATUS,Z ;Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. goto EIYLIY ;Ei yli 9. movlw A'0' ;Ladataan w rekisteriin luku 0. movwf SADATY ;Ladataan w rekisterin arvo rekisteriin. incf TUHANNETY movlw A':' xorwf TUHANNETY,W ; btfss STATUS,Z ;Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. goto EIYLIY ;Ei yli 9. movlw A'0' ;Ladataan w rekisteriin luku 0. movwf TUHANNETY ;Ladataan w rekisterin arvo rekisteriin. EIYLIY decfsz YKOMPASSIL, f goto KOMPASSI_XY_AKSELI_LASKENTA_Y decfsz YKOMPASSIH, f goto KOMPASSI_XY_AKSELI_LASKENTA_Y return ;Paluu tästä aliohjelmasta. ;****************************************************************************** ;****************************************************************************** ALUSTUKSET call LCDKAYNNISTYS ;Käynnistää näytön 4-bititillä ohjattavaksi. call ENSINMAISETKASKYTLCDLLE return ;***************************************************************** VILKUTUS bsf PORTB,2 call PUOLISEK bcf PORTB,2 call PUOLISEK bsf PORTB,2 call PUOLISEK bcf PORTB,2 call PUOLISEK LYHYTVILKUTUS bsf PORTB,2 call PUOLISEK bcf PORTB,2 call PUOLISEK bsf PORTB,2 call PUOLISEK bcf PORTB,2 return ;****************************************************************************** ;Pääohjelma MAIN ;Kompassi lukeman virhetesti alkaa. ;movlw 0x01 ;movwf XKOMPASSIH ;movlw 0x00 ;movwf XKOMPASSIL ;movlw 0x01 ;movwf YKOMPASSIH ;movlw 0x00 ;movwf YKOMPASSIL ;call KOMPASSI_XY_LASKENTA ;Kompassi lukeman virhetesti päättyy. call ALUSTUKSET call KOMPASSI_ALUSTUS call KOMPASSI_RESET LOOPPI call KOMPASSI_RESET call KOMPASSI_LUKU_KAYNNISTYS call TESTI_NAYTTO_PAIVITYS1 call KOMPASSI_XY_LASKENTA ;call NAYTTO_PAIVITYS1 ;call PUOLISEK goto LOOPPI ;****************************************************************************** ;End of program END