;------------------------------------------------------------------------------------------------------- ; ; Filename: testit1.asm ; Date: 21/12 2004 ; File Version: 1.200 ; ; Author: Matti Järvinen ; Company: ; ;------------------------------------------------------------------------------------------------------- ; ; Files required: ; PIC16F877 kortin alustus- ja testausohjelma. ; ;------------------------------------------------------------------------------------------------------- ; ; Notes: ; Ohjelman alku, määrittää piirin tulot ja lähdöt, sekä alustaa piirin toiminnan. ; Ohjelmassa on myös piirin PWM modulin alustus PWM modeen, sekä liitettävän LCD ; modulin alkuasetukset. Moduli 2 rivinen ja 16 merkkiä rivillä. Lisäkorteille tehtävät ; laajennusosien toiminnat voidaan myös testata. ; Relekortille tuleva PWM lähtö ja releitten toiminta. ; A/D kortille tulevat rajakytkintulot ja A/D muuntimen tulot. ; ; Koko ohjelma on kommentoitu mahdollisuuksien mukaan. Toivottavasti niistä saa jotakin ; tolkkua. ; HUOM !! TEKIJÄ EI OTA VASTUUTA OHJELMAN TOIMINNASTA EIKÄ SEN AIHEUTTAMISTA VIRHEISTÄ ; EIKÄ VAHINGOISTA. ; TARKOITETTU VAIN KOKEILUKÄYTTÖÖN. OSAAN PIIRIN TOIMINTOJEN TUTKIMISEEN JA KOKEILEMISEEN. ; ;------------------------------------------------------------------------------------------------------- list p=16f877 ; Prosessoripiirin määritys #include ; Sisällytetään tähän ohjelmaan tiedosto joka sisältää ; valmiiksi määritellyt muuttujat ;------------------------------------------------------------------------------------------------------- ; Määritetään piirin sisäiset konfiguraatio (hieno sana) asetukset. ; Selitetään mitä saadaan selville, tai ainakin siihen suuntaan. ; _CONFIG tämä rivi määrittää konfigurointi asetukset ; _CP_OFF ; _WDT_OFF Vahtikoira Watch Dog ON tai OFF ; _BODEN_OFF ; _PWRTE_ON Ohjelmamuistin kirjoituksen salliminen. ; _HS_OSC Oskillaattorin valinta RC, XT, HS, LP ; _WRT_ENABLE_ON ; _LVP_OFF Määrittää piirin pienellä jännitteellä ohjelmoitavaksi. ; _DEBUG_OFF Debuggerin käyttö. ; _CPD_OFF EEPROM muistin suojaus. ;------------------------------------------------------------------------------------------------------- __CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _HS_OSC & _WRT_ENABLE_ON & _LVP_OFF & _DEBUG_OFF & _CPD_OFF ;------------------------------------------------------------------------------------------------------- ; Rivin alussa määritelty rekisterin nimi seuraavaksi EQU (varmaan tarkoittaa myös jotain, eipä ; sillä sitten niin väliä kunhan nyt siihen kuuluu) ja seuraavana paikka ohjainpiirin muistissa. ; Muuten kaikki kommentit erotellaan puolipisteellä, sen oikealla puolella olevat tekstit ovat kaikki ; kommentteja, ja kääntäjä ei ota niitä mitenkään mukaan käännökseen. Niitä kannattaa käyttää ; mahdollisimman paljon, vaikka ohjelmaa kirjoittaessa ja miettiessä ei niitä tule aina kirjoitettua. ; Siinä vaiheessa on syytä kommentit kirjoittaa kun on saanut jonkin osan toimimaan ja siistii ; muutenkin koodia, jos vielä sattuu muistamaan miksi mikin käsky on siinä kun se on. ; ;------------------------------------------------------------------------------------------------------- ; Muuttujien nimeäminen ja osoitteitten määritys. ;------------------------------------------------------------------------------------------------------- w_temp EQU 0x70 ; Keskeytyksissä käytettävät muttujat status_temp EQU 0x71 ; ;------------------------------------------------------------------------------------------------------- ; Annetaan nimet porteille ja jokaiselle portin bitille erikseen. Samoin rekisterien osoitteille ; annetaan ihan yksilöllinen nimi. Tällä saavutetaan se että, jos rekisterin osoitetta täytyy ; muuttaa jostain syystä ei tarvitse käydä koko ohjelmaa läpi, ja muuttaa jokaista erikseen, vaan ; se käy ainoastaan yhdessä paikassa. ; ;------------------------------------------------------------------------------------------------------- ; PORTA:n nimeäminen ; Koska PORTA on analogitulojen käytössä sille voidaan antaa valmiiksi määritetyn PORTA nimen ; tilalle kuvaavampi nimi JANNITE, ja kaikille eri sisääntuloille hienosti CH ja numero kuvaamaan ; että kyseessä on CANAL, eli kanava ja numero osoittamassa kanavaa. ; Esim. JANNITE,CH0 tarkoittaa määrityksen jälkeen samaa kuin PORTA,0 ja vielä jännittä kanavalla 0. ;------------------------------------------------------------------------------------------------------- JANNITE EQU PORTA ; Portti A CH0 EQU 0 ; Portti A:n CH1 EQU 1 ; bittien CH2 EQU 2 ; nimitykset CH3 EQU 3 DIN4 EQU 4 ; Digitaali tulo, portti DIN4 kuuluu porttiin A ; Määritetään I/O tuloksi toisaalla ohjelmassa. CH5 EQU 5 ;------------------------------------------------------------------------------------------------------- ; PORTE:n nimeäminen ; Samalla periaatteella on nimetty PORTE ja sen eri bitit. ; Eli DTULO,DIN0 vastaa PORTE,0 ja digitaalitulo digital in 0. ;------------------------------------------------------------------------------------------------------- DTULO EQU PORTE ; Portti E DIN0 EQU 0 ; Portti E:n DIN1 EQU 1 ; bittien DIN2 EQU 2 ; nimitykset ;------------------------------------------------------------------------------------------------------- ; PORTB:n nimeäminen ; Sama jatkuu TULO,NAPPI1 vastaa PORTB,1 ja tuloportin nappi 1 ;------------------------------------------------------------------------------------------------------- TULO EQU PORTB ; Portti B NAPPI0 EQU 0 ; Portti B:n NAPPI1 EQU 1 ; bittien NAPPI2 EQU 2 ; nimitykset NAPPI3 EQU 3 NAPPI4 EQU 4 NAPPI5 EQU 5 NAPPI6 EQU 6 NAPPI7 EQU 7 ;------------------------------------------------------------------------------------------------------- ; PORTD:n nimeäminen ; Sama juttu myös tässä LAHTO,VALO4 on yhtäkuin PORTD,4 tai lähtöportin valo 4 ;------------------------------------------------------------------------------------------------------- LAHTO EQU PORTD ; Portti D VALO0 EQU 0 ; Portti D:n VALO1 EQU 1 ; bittien VALO2 EQU 2 ; nimitykset VALO3 EQU 3 VALO4 EQU 4 VALO5 EQU 5 VALO6 EQU 6 VALO7 EQU 7 ;------------------------------------------------------------------------------------------------------- ; PORTC:n nimeäminen ; PORTC:tä käytetään LCD:n ohjaukseen joten voidaan käyttää portille nimeä LCD_PORT ja ohjauksille ; LCD-modulin ohjauksien nimiä LCD_E = ENABLE = bit0 ja LCD_RS = Register Select = bit3 ; Koska LCD-moduli käyttää 4 bitin ohjausmoodissa 4 ylintä bittiä niin samoin voidaan käyttää ; myös tässä 4 ylintä databittiä datalinjana, niitä ei ole erikseen nimetty. ; PWM lähdöt menevät hieman nimen osalta poskelleen, mutta hällä väliä. ; Eli LCD_PORT,MOOTTORI1 on yhtäkuin Moottorin PWM ohjaus 1 ; Hieman hämäävästi LCD_PORT,MOOTTORI1 samaa vastaa PORTC,MOOTTORI1 ihan sama kumpaa käyttää. ;------------------------------------------------------------------------------------------------------- LCD_PORT EQU PORTC ; Portti C LCD:n ohjausportti ; 4 datalinjaa ; RC4,5,6,7 PIN 22,23,24,25 - LCD 11,12,13,14 LCD_E EQU 0 ; LCD Enable RC0 pin15 - LCD/6 LCD_RS EQU 3 ; LCD Rekisterivalinta RC3 pin18 - LCD/4 ; Portti C PWM lähdöt MOOTTORI1 EQU 1 ; Moottorin1 ohjaus PWM lähdöllä MOOTTORI2 EQU 2 ; Moottorin2 ohjaus PWM lähdöllä ;------------------------------------------------------------------------------------------------------- ; Rekisterien nimeäminen. ; Voidaan antaa jollekkin nimitykselle pelkästään sisältö, kuten seuraavat rivit ; Käytössä olevassa LCD-modulissa on kaksi tekstiriviä ja tässä annetaan kummallekkin riville ; ensimmäisen merkin osoite LCD-modulilla LCD_LINE0 = 000 ; ensimmäisen rivin toisen merkin osoite taas on LCD_LINE0+1 = 001 jne. ;------------------------------------------------------------------------------------------------------- LCD_LINE0 EQU 0x000 ; Annetaan LCD:n rivin 1 aloitusosoite LCD_LINE1 EQU 0x040 ; Annetaan LCD:n rivin 2 aloitusosoite ;------------------------------------------------------------------------------------------------------- ; Osoitteelle annetaan yksilöllinen nimi ; Eli LCD_TEMP1 on osoitteessa 021 tai DELAY on osoitteessa 02A. ;------------------------------------------------------------------------------------------------------- LCD_TEMP1 EQU 0x021 ; LCD:n ohjauksen tilapäisrekisteri MRK1 EQU 0x022 ; Näytön kirjoituksen muisti TABLE_INDEX EQU 0x023 ; Tekstitaulukon osoitusrekisteri DELAY EQU 0x02A ; Viiveitten muodostuksessa käytetyt rekisterit DELAY2 EQU 0x02B ; X_DELAY EQU 0x02C ; MOTNOPH EQU 0x040 ; Moottorin nopeus rekisteri 2 ylempää bittiä MOTNOPL EQU 0x041 ; Moottorin nopeus rekisteri 8 alempaa bittiä PWMN1H EQU 0x042 ; Moottorin 1 nopeus rekisteri 2 ylempää bittiä PWMN1L EQU 0x043 ; Moottorin 1 nopeus rekisteri 8 alempaa bittiä PWMN2H EQU 0x044 ; Moottorin 2 nopeus rekisteri 2 ylempää bittiä PWMN2L EQU 0x045 ; Moottorin 2 nopeus rekisteri 8 alempaa bittiä COUNT EQU 0x02D ; BCD muunnoksen käyttämä laskija R0 EQU 0x050 ; Muunnoksen tuloksen talletus R1 EQU 0x051 ; Muunnoksen tuloksen talletus R2 EQU 0x052 ; Muunnoksen tuloksen talletus R3 EQU 0x053 ; Muunnoksen tuloksen talletus R4 EQU 0x054 ; Muunnoksen tuloksen talletus TMP0 EQU 0x05A ; Muunnokselle annettava luku (H_BYTE) TMP1 EQU 0x05B ; Muunnokselle annettava luku (MH_BYTE) TMP2 EQU 0x05C ; Muunnokselle annettava luku (ML_BYTE) TMP3 EQU 0x05D ; Muunnokselle annettava luku (L_BYTE) TMP EQU 0x05F ; Muunnoksen tilapäisrekisteri ;------------------------------------------------------------------------------------------------------- ; Määrityksien jälkeen varsinainen ohjelma alkaa näillä toimilla. ;------------------------------------------------------------------------------------------------------- ORG 0x000 ; Ohjelmalaskurin nollaus. CLRF PCLATH ; Nollataan muistisivun osoitus GOTO MAIN ; Aloitetaan ohjelman suoritus paikasta MAIN ;------------------------------------------------------------------------------------------------------- ; Ohjelmassa sattuva keskeytys aiheuttaa hypyn tänne jossa talletetaan W-rekisterin sisältö ; samoin kuin STATUS-rekisterin sisältökin, keseytyksessä suoritettavan ohjelman ajaksi. ;------------------------------------------------------------------------------------------------------- ORG 0x004 ; Keskeytyksen aloitus osoite movwf w_temp ; W-rekisterin sisällön tallennuspaikka movf STATUS,w ; siiretään STATUS-rek. W-rekisteriin. movwf status_temp ; STATUS-rekisterin sisällön tallennuspaikka ; keskeytyksen ohjelmat BSF LAHTO,VALO3 ; Sytytetään valo movf status_temp,w ; Palautetaan rekisterit movwf STATUS ; keskeytyksen jälkeen. swapf w_temp,f swapf w_temp,w ; retfie ; palataan takaisin keskeytyneeseen ohjelmaan ;------------------------------------------------------------------------------------------------------- ; Tästä alkaa ohjelman suorittaminen rekisterien alkuasetuksilla joilla saadaan porttien ; ominaisuudet ja alkutilat. ;------------------------------------------------------------------------------------------------------- MAIN ; Ohjelman aloitus. CLRF LCD_PORT ; Tyhjennetään LCD-portin lähtö. BSF STATUS,RP0 ; Asetellaan Bank1:ssä (STATUS rekisterin bitti RP0 = 1) MOVLW 0x3F ; W-rekisteriin asetetaan bittikuvio 00111111 MOVWF TRISA ; jolla määrätään Portti A sisäänmenoksi. MOVLW 0xFF ; Bittikuvio 11111111 MOVWF TRISB ; portti B kokonaan SISÄÄNMENO, KYTKIMET MOVLW 0x00 ; Bittikuvio 00000000 MOVWF TRISC ; portti C kokonaan ULOSTULO ; LCD ja PWM MOVLW 0X00 ; Bittikuvio 00000000 MOVWF TRISD ; portti D kokonaan ULOSTULO, VALOT(RELEOHJAUS) MOVLW 0X07 ; Bittikuvio 00000111 MOVWF TRISE ; portti E kokonaan SISÄÄNMENO, ULKOISET KYTKIMET MOVLW 0x82 ; Bittikuvio 10000010 MOVWF ADCON1 ; ADCON1 rekisteriin BCF STATUS,RP0 ; Palataan Bank0:aan(STATUS rekisterin bitti RP0 = 0) CLRF LAHTO ; porttiin D 00000000 CLRF LCD_PORT ; porttiin C 00000000 ;======================================================================================================= ; PWM modulin alustus. Piirin PWM moduli käyttää ajastinta Timer2, seuraavassa sen asetukset. ;------------------------------------------------------------------------------------------------------- BCF T2CON, TMR2ON ; TMR2ON: Timer2 ON bitti ; 0 = Timer2 off = voidaan muuttaa Timer2 asetuksia ; TIMER2 Prescaler: ESIJAKAJAn asetus BCF T2CON, T2CKPS0 ; Timer2 Clock Prescale Select bits BCF T2CON, T2CKPS1 ; 00 = "1" Prescaler value = 1 ; TIMER2 PostScaler: EI KÄYTÖSSÄ BCF T2CON, TOUTPS0 ; on yhtä kuin 0000 BCF T2CON, TOUTPS1 BCF T2CON, TOUTPS2 BCF T2CON, TOUTPS3 ; LADATAAN TIMER2 JAKSO REKISTERI BSF STATUS,RP0 ; Asetellaan Bank1:ssä (STATUS rekisterin bitti RP0 = 1) MOVLW d'255' ; W-rekisteriin "255"=FF MOVWF PR2 ; Siirretään PR2-rekisteriin BCF STATUS,RP0 ; Palataan Bank0:aan (STATUS rekisterin bitti RP0 = 0) ; Asetetaan CCP1 PWM Modeen BSF CCP1CON, CCP1M3 ; 11xx PWM Mode BSF CCP1CON, CCP1M2 ; Asetetaan CCP2 PWM Modeen BSF CCP2CON, CCP1M3 ; 11xx PWM Mode BSF CCP2CON, CCP1M2 BSF T2CON, TMR2ON ; TMR2ON: Timer2 On bitti ; 1 = Timer2 on - Estetään Timer2 asetuksien muuttaminen BCF CCP2CON,CCP1X ; SET THE LSB OF THE 10 BIT DUTY CYCLE From MOTNOPH BTFSC MOTNOPH,6 BSF CCP1CON,CCP1X BCF CCP2CON,CCP1Y BTFSC MOTNOPH,7 BSF CCP1CON,CCP1Y MOVLW 0X05 ; SET THE MSB OF THE 10 BIT DUTY CYCLE From MOTNOPL MOVFW MOTNOPL MOVF MOTNOPL,W ; Moottorin nopeusrekisterin tieto MOVWF CCPR1L ; siirretään PWM1 nopeustiedoksi MOVWF CCPR2L ; siirretään PWM2 nopeustiedoksi BSF STATUS,RP0 ; Asetellaan Bank1:ssä BCF PIE1,6 ; Estetään muuntimen keskeytys BCF STATUS,RP0 ; Palataan Bank0:aan CLRF INTCON ; Nollataan keskeytysliput ;======================================================================================================= ; Seuraavaksi alustetaan LCD-moduli ;======================================================================================================= ; LCDINIT ; Alustetaan LCD-näyttömoduli ; Voidaan vaikuttaa näytön ominaisuuksiin ja näyttömodulin toimintaan ; ( näytön tyyppi, kursori käytössä tai pois, yms.) ;------------------------------------------------------------------------------------------------------- CLRF LCD_PORT ; LCD_PORTIN portin bitit alas MOVLW D'15' CALL X_DELAY1 ; 15 ms käynnistysviive. MOVLW b'00110000' ; 4-bit liitäntä (8bit mode) CALL LCDPUTCMDX ; siirretään vain yläosa MOVLW D'5' CALL X_DELAY1 ; 5 ms odotus. MOVLW b'00110000' ; 4-bit liitäntä (8bit mode) CALL LCDPUTCMDX ; siirretään vain yläosa CALL DELAY1 ; 1 ms odotus. MOVLW b'00100000' ; 4-bit liitäntä (4bit mode) CALL LCDPUTCMDX ; siirretään vain yläosa CALL DELAY1 ; 1 ms odotus. MOVLW b'00101000' ; LCD näytön alkuasetukset bitti5 ; bitti4 = 0 = data leveys 4 bit (1=8 bit) ; bitti3 = 1 = 2 riviä (0=1 rivinen näyttö) ; bitti2 = 0 = 5x7 merkit (1=5x10 merkit) ; bitit 1 ja 0 ei merkitystä CALL LCDPUTCMD ; siirretään kokonaan CALL DELAY1 ; 1 ms odotus. MOVLW b'00001000' ; Näyttön ja kursorin määritys bitti 3=1 ; bitti2 = 0 = näyttö pois (1=näyttö päällä) ; bitti1 = 0 = kursori pois (1=kursori käytössä) ; bitti0 = 0 = vilkutus pois (1=vilkutus käytössä) CALL LCDPUTCMD ; siirretään kokonaan CALL DELAY1 ; 1 ms odotus. MOVLW b'00000110' ; Näytön toiminta asetukset bitti 2=1 ; bitti1 = 1 = osoitteen lisäys (0=osoitteen vähennys) ; bitti0 = 0 = näytön siirto off (1=näytön siirto on) CALL LCDPUTCMD ; siirretään kokonaan CALL DELAY1 ; 1 ms odotus. MOVLW b'00000001' ; Tyhjennetään koko LCDn näyttö ja muisti ; siirretään kursori alkuun CALL LCDPUTCMD ; siirretään kokonaan CALL DELAY1 ; 2 ms odotus. CALL DELAY1 ; Tarvitaan muuten ei teksti näy. MOVLW b'00001100' ; Näyttön ja kursorin määritys bitti 3=1 ; bitti2 = 1 = näyttö päällä (0=näyttö pois) ; bitti1 = 0 = kursori pois (1=kursori käytössä) ; bitti0 = 0 = vilkutus pois (1=vilkutus käytössä) CALL LCDPUTCMD ; siirretään kokonaan CALL DELAY1 ; 1 ms odotus. GOTO TEKSTI ;======================================================================================================= ; Teksti joka ilmestyy näytölle ohjelman käynnistyttyä, merkki kerrallaan. ; -------------------- ; | Matti Järvinen | ; | 27130 EURAJOKI | ; -------------------- ;------------------------------------------------------------------------------------------------------- AIKA70 MOVLW D'70' CALL X_DELAY1 ; 70 ms odotus. RETURN TEKSTI MOVLW LCD_LINE0 ; asetetaan rivin 0 ensimmäisen merkin osoite CALL LCDSDDA ; kursori ensimmäisen rivin alkuun CALL AIKA70 ; 70 ms odotus. MOVLW a'M' CALL LCDPUTCHAR ; näytetään merkki CALL AIKA70 ; 70 ms odotus. MOVLW a'a' CALL LCDPUTCHAR ; näytetään merkki CALL AIKA70 ; 70 ms odotus. MOVLW a't' CALL LCDPUTCHAR ; näytetään merkki CALL AIKA70 ; 70 ms odotus. MOVLW a't' CALL LCDPUTCHAR ; näytetään merkki CALL AIKA70 ; 70 ms odotus. MOVLW a'i' CALL LCDPUTCHAR ; näytetään merkki CALL AIKA70 ; 70 ms odotus. MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki CALL AIKA70 ; 70 ms odotus. MOVLW a'J' CALL LCDPUTCHAR ; näytetään merkki CALL AIKA70 ; 70 ms odotus. MOVLW a'á' ; ( á = ä LCD:n merkkitaulukossa ) CALL LCDPUTCHAR ; näytetään merkki CALL AIKA70 ; 70 ms odotus. MOVLW a'r' CALL LCDPUTCHAR ; näytetään merkki CALL AIKA70 ; 70 ms odotus. MOVLW a'v' CALL LCDPUTCHAR ; näytetään merkki CALL AIKA70 ; 70 ms odotus. MOVLW a'i' CALL LCDPUTCHAR ; näytetään merkki CALL AIKA70 ; 70 ms odotus. MOVLW a'n' CALL LCDPUTCHAR ; näytetään merkki CALL AIKA70 ; 70 ms odotus. MOVLW a'e' CALL LCDPUTCHAR ; näytetään merkki CALL AIKA70 ; 70 ms odotus. MOVLW a'n' CALL LCDPUTCHAR ; näytetään merkki CALL AIKA70 ; 70 ms odotus. MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki CALL AIKA70 ; 70 ms odotus. MOVLW LCD_LINE1 ; asetetaan rivin 1 ensimmäisen merkin osoite CALL LCDSDDA ; kursori ensimmäisen rivin alkuun CALL AIKA70 ; 70 ms odotus. MOVLW a'2' CALL LCDPUTCHAR ; näytetään merkki CALL AIKA70 ; 70 ms odotus. MOVLW a'7' CALL LCDPUTCHAR ; näytetään merkki CALL AIKA70 ; 70 ms odotus. MOVLW a'1' CALL LCDPUTCHAR ; näytetään merkki CALL AIKA70 ; 70 ms odotus. MOVLW a'3' CALL LCDPUTCHAR ; näytetään merkki CALL AIKA70 ; 70 ms odotus. MOVLW a'0' CALL LCDPUTCHAR ; näytetään merkki CALL AIKA70 ; 70 ms odotus. MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki CALL AIKA70 ; 70 ms odotus. MOVLW a'E' CALL LCDPUTCHAR ; näytetään merkki CALL AIKA70 ; 70 ms odotus. MOVLW a'U' CALL LCDPUTCHAR ; näytetään merkki CALL AIKA70 ; 70 ms odotus. MOVLW a'R' CALL LCDPUTCHAR ; näytetään merkki CALL AIKA70 ; 70 ms odotus. MOVLW a'A' CALL LCDPUTCHAR ; näytetään merkki CALL AIKA70 ; 70 ms odotus. MOVLW a'J' CALL LCDPUTCHAR ; näytetään merkki CALL AIKA70 ; 70 ms odotus. MOVLW a'O' CALL LCDPUTCHAR ; näytetään merkki CALL AIKA70 ; 70 ms odotus. MOVLW a'K' CALL LCDPUTCHAR ; näytetään merkki CALL AIKA70 ; 70 ms odotus. MOVLW a'I' CALL LCDPUTCHAR ; näytetään merkki CALL AIKA70 ; 70 ms odotus. MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki MOVLW D'250' CALL X_DELAY1 ; 2s odotus. MOVLW D'250' CALL X_DELAY1 ; MOVLW D'250' CALL X_DELAY1 ; MOVLW D'250' CALL X_DELAY1 ; MOVLW D'250' CALL X_DELAY1 ; MOVLW D'250' CALL X_DELAY1 ; MOVLW D'250' CALL X_DELAY1 ; MOVLW D'250' CALL X_DELAY1 ; ;======================================================================================================= ; Tästä muutetaan ohjelman toimintaa muuttamalla hyppykäskyn osoitetta. ; Omia kokeiluja varten voi tehdä oman osoitteen ja kirjoittaa siihen omaa ohjelmaa jos nyt nämä ; haluaa säilyttää kunnes oma ohjelma toimii. ;------------------------------------------------------------------------------------------------------- GOTO VALIKKO ; Siirrytään VALIKKO ohjelmaan. ;======================================================================================================= ; ASCII numerotaulukko josta LCD:llä esitettävien numeroiden ASCII koodi haetaan. ; Mukana myös HEXa koodit 10...15 ; Taulukkoa käytettäessä, ennen CALL kutsua annetaan W rekisteriin taulukon rivinumero josta haetaan ; vastaava ASCII koodi. Koodi takaisin palatessa W rekisterissä. ;------------------------------------------------------------------------------------------------------- NUMEROT ADDWF PCL,F RETLW a'0' RETLW a'1' RETLW a'2' RETLW a'3' RETLW a'4' RETLW a'5' RETLW a'6' RETLW a'7' RETLW a'8' RETLW a'9' RETLW a'A' RETLW a'B' RETLW a'C' RETLW a'D' RETLW a'E' RETLW a'F' ;======================================================================================================= ; Tulosten siirto LCD näytölle ; Tulokset rekistereissä R0,R1,R2,R3,R4. ; Ascii merkki haetaan taulukosta ja siirretään aliohjelmassa LCD näytölle. ; NAYTATULOS ohjelmasta käytössä vain puolet. Suuremmista luvuista jätetään 6 merkkiä näyttämättä. ; ;======================================================================================================= NAYTATULOS ; SWAPF R0, W ; Siirretään R0 rekisterin yläosa ; W rekisteriin alaosaksi ; CALL SIIRTO ; MOVFW R0 ; siirretään R0 -> W ; CALL SIIRTO ; SWAPF R1, W ; Siirretään R1 rekisterin yläosa ; W rekisteriin alaosaksi ; CALL SIIRTO ; MOVFW R1 ; siirretään R1 -> W ; CALL SIIRTO ; SWAPF R2, W ; Siirretään R2 rekisterin yläosa ; W rekisteriin alaosaksi ; CALL SIIRTO ; MOVFW R2 ; siirretään R2 -> W ; CALL SIIRTO ; näytölle kirjoitus aloitetaan tästä, koska muunnoksen tekemät suuremmat numerot ovat nollia. ; ensimmäistä etunollaa ei poisteta, eli luku on aina kaksi numeroa ennen ja jälkeen pilkun, (00,00) ;-------Poistetaan etunolla. SWAPF R3, W ; Siirretään R3 rekisterin yläosa ; W rekisteriin alaosaksi ANDLW b'00001111' ; W:n sisällöstä poistetaan yläosa MOVWF TMP INCF TMP,F DECFSZ TMP,F GOTO JATKA MOVLW A' ' ; CALL LCDPUTCHAR ; siirretään tyhjä näytölle GOTO VALI ;------- JATKA SWAPF R3, W ; Siirretään R3 rekisterin yläosa ; W rekisteriin alaosaksi CALL SIIRTO VALI MOVFW R3 ; siirretään R3 -> W CALL SIIRTO MOVLW A',' ; CALL LCDPUTCHAR ; siirretään pilkku näytölle SWAPF R4, W ; Siirretään R4 rekisterin yläosa ; W rekisteriin alaosaksi CALL SIIRTO MOVFW R4 ; siirretään R4 -> W CALL SIIRTO RETURN ;======================================================================================================= ; SIIRTO näyttää yhden numeron näytöllä. ;------------------------------------------------------------------------------------------------------- SIIRTO ANDLW b'00001111' ; W:n sisällöstä poistetaan yläosa CALL NUMEROT ; haetaan numero taulukosta NOP CALL LCDPUTCHAR ; ja siirretään LCD näytölle RETURN ;======================================================================================================= ; LCD:n aliohjelmat PIC16F877 kortille. ;======================================================================================================= ; LCDDMODE ; Asetetaan LCD modulin toiminta ; Seuraavat toiminnat muutettavissa W rekisterin b0, b1 ja b2 biteillä ; b0 : 0 = vilkkuva kursori pois käytöstä 1 = vilkkuva kursori käytössä ; b1 : 0 = kursori pois käytöstä 1 = kursori käytössä ; b2 : 0 = tekstiä ei näytetä 1 = näytetään teksti ; (näytön data talletettu DDRAM) ; b3-7 : ei merkitystä ;------------------------------------------------------------------------------------------------------- LCDDMODE ANDLW b'00000111' ; Leikkaa ylemmät bitit IORLW b'00001000' ; Funktio asetus CALL LCDPUTCMD ; siirretään LCD moduliin CALL DELAY1 ; 1 ms odotus. RETURN ;======================================================================================================= ; LCDSDDA ; Asetetaan näyttö RAM osoite. DDRAM data on luettavissa/kirjoitettavissa ; asetuksen jälkeen ; Asetetaan DDRAM osoite W rekisteriin ; b0-6 : käytettävä DDRAM osoite ; b7 : ei merkitystä ;------------------------------------------------------------------------------------------------------- LCDSDDA IORLW b'10000000' ; Funktio asetus CALL LCDPUTCMD ; siirretään LCD moduliin CALL DELAY1 ; Odotellaan 1ms RETURN ;======================================================================================================= ; LCDCLEAR ; Tyhjentää näytön ja siirtää kursorin ensimmäisen rivin alkuun. ;------------------------------------------------------------------------------------------------------- LCDCLEAR MOVLW b'00000001' ; W rekisteriin 01 CALL LCDPUTCMD ; siirretään LCD moduliin CALL DELAY1 ; 1 ms odotus. CALL DELAY1 ; 1 ms odotus. RETURN ;======================================================================================================= ; LCDPUTCHAR ; Lähetetään merkki LCD näytölle ; Merkki oltava W rekisterissä ;------------------------------------------------------------------------------------------------------- LCDPUTCHAR MOVWF LCD_TEMP1 ; W -> LCD_TEMP1 rekisteriin MOVLW b'00001111' ; W rekisterin alaosa "1111" ANDWF LCD_PORT,F ; Tyhjennetään LCD_PORTin yläosa BSF LCD_PORT, LCD_RS ; RS bitti "1" BSF LCD_PORT, LCD_E ; E bitti "1" MOVFW LCD_TEMP1 ; Siirretään LCD_TEMP1 rekisteristä ; W rekisteriin ANDLW b'11110000' ; W rekisterin alaosaan "0000" IORWF LCD_PORT,F ; ja siirretään LCD_PORTin kautta LCD:lle NOP BCF LCD_PORT, LCD_E ; E bitti "0" MOVLW b'00001111' ; W rekisterin alaosa "1111" ANDWF LCD_PORT,F ; Tyhjennetään LCD_PORTin yläosa BSF LCD_PORT, LCD_E ; E bitti "1" SWAPF LCD_TEMP1, W ; Siirretään LCD_TEMP1 rekisterin alaosa ; W rekisteriin yläosaksi ANDLW b'11110000' ; W rekisterin alaosaan "0000" IORWF LCD_PORT,F ; ja siirretään LCD_PORTin kautta LCD:lle NOP BCF LCD_PORT, LCD_E ; E bitti "0" BCF LCD_PORT, LCD_RS ; RS bitti "0" MOVLW b'00001111' ; W rekisterin alaosa "1111" ANDWF LCD_PORT,F ; Tyhjennetään LCD_PORTin yläosa CALL DELAY05 RETURN ;======================================================================================================= ; LCDPUTCMD ; Lähetetään käsky LCD modulille ; Merkki oltava W rekisterissä ;------------------------------------------------------------------------------------------------------- LCDPUTCMD MOVWF LCD_TEMP1 ; Käsky siirretään w rekisteristä ; LCD_TEMP1 rekisteriin MOVLW b'00001111' ; W rekisterin alaosaan "1111" ANDWF LCD_PORT,F ; Tyhjennetään LCD_PORTin yläosa BCF LCD_PORT, LCD_RS ; RS bitti "0" BSF LCD_PORT, LCD_E ; E bitti "1" MOVFW LCD_TEMP1 ; Siirretään LCD_TEMP1 rekisteristä ; W rekisteriin ANDLW b'11110000' ; W rekisterin alaosaan kirjoitetaan "0000" IORWF LCD_PORT,F ; ja siirretään LCD_PORTin kautta LCD:lle NOP BCF LCD_PORT, LCD_E ; E bitti "0" MOVLW b'00001111' ; W rekisterin alaosa "1111" ANDWF LCD_PORT,F ; Tyhjennetään LCD_PORTin yläosa SWAPF LCD_TEMP1, W ; Siirretään LCD_TEMP1 rekisterin alaosa ; W rekisteriin yläosaksi LCDPUTCMDX ; Käytetään lähetettäessä modulille vain alkuosa. ANDLW b'11110000' ; W rekisterin alaosaan "0000" BSF LCD_PORT, LCD_E ; E bitti "1" NOP IORWF LCD_PORT,F ; W siirretään LCD_PORTin kautta LCD:lle NOP BCF LCD_PORT, LCD_E ; E bitti "0" BCF LCD_PORT, LCD_RS ; RS bitti "0" MOVLW b'00001111' ; W rekisterin alaosa "1111" ANDWF LCD_PORT,F ; Tyhjennetään LCD_PORTin yläosa RETURN ;======================================================================================================= ; Viiveitten muodostus ;------------------------------------------------------------------------------------------------------- ; Delay_time = ((DELAY_value * 3) + 4) * Cycle_time (0,4us) ; DELAY_value = (Delay_time - (4 * Cycle_time)) / (3 * Cycle_time) ; ; i.e. (@ 10MHz crystal) ; Delay_time = ((207 * 3) + 4) * 0,4uSec ; = 250uSec ; DELAY_value = (250uSec - (4*0,4uSec)) / (3*0,4uSec) ; = 207 ; ;------------------------------------------------------------------------------------------------------- DELAY1 ; Aika 1ms = 4 X 250us MOVLW D'04' MOVWF DELAY2 DELAY250 MOVLW D'207' ; +1 1 cycle MOVWF DELAY ; +2 1 cycle DELAY250_LOOP DECFSZ DELAY, F ; step 1 1 cycle GOTO DELAY250_LOOP ; step 2 2 cycles DELAY250_END DECFSZ DELAY2, F ; step 1 1 cycle GOTO DELAY250 ; step 2 2 cycles DELAY1_END RETURN ; +3 2 cycles ;------------------------------------------------------------------------------------------------------- X_DELAY1 MOVWF X_DELAY ; +1 1 cycle X_DELAY1_LOOP CALL DELAY1 ; step1 wait 1mSec DECFSZ X_DELAY, F ; step2 1 cycle GOTO X_DELAY1_LOOP ; step3 2 cycles X_DELAY1_END RETURN ; +2 2 cycles ;------------------------------------------------------------------------------------------------------- DELAY05 ; Aika 0,5ms = 2 X 250us MOVLW D'02' MOVWF DELAY2 DELAY050 MOVLW D'207' ; +1 1 cycle MOVWF DELAY ; +2 1 cycle DELAY05_LOOP DECFSZ DELAY, F ; step 1 1 cycle GOTO DELAY05_LOOP ; step 2 2 cycles DELAY05_END DECFSZ DELAY2, F ; step 1 1 cycle GOTO DELAY050 ; step 2 2 cycles DELAY050_END RETURN ; +3 2 cycles ;------------------------------------------------------------------------------------------------------- DELAY50 ; Aika 50ms = 200 X 250us MOVLW D'200' MOVWF DELAY2 DELAY51 MOVLW D'207' ; +1 1 cycle MOVWF DELAY ; +2 1 cycle DELAY51_LOOP DECFSZ DELAY, F ; step 1 1 cycle GOTO DELAY51_LOOP ; step 2 2 cycles DELAY51_END DECFSZ DELAY2, F ; step 1 1 cycle GOTO DELAY51 ; step 2 2 cycles DELAY50_END RETURN ; +3 2 cycles ;======================================================================================================= ; Binari BCD muunnos ohjelmarutiini. ; Tämä ohjelmarutiini muuttaa 32 bittisen binariluvun 10 numeron BCD luvuksi. ; 32 bit binari luku on rekistereissä H_BYTE, MH_BYTE, ML_BYTE ja L_BYTE joista H_BYTE on eniten ; merkitsevä ja L_BYTE vähiten merkitsevä luku. ; ; 10 numeron BCD luku on muunnoksen jälkeen luettavissa rekistereissä R0, R1, R2, R3 ja R4 jossa ; R0 on eniten meritsevä luku. ; Yhdessä rekisterissä on aina 2 numeroa joista vasen on eniten merkitsevä. ; ;------------------------------------------------------------------------------------------------------- B4_BCD BCF STATUS,0 ; nollataan CARRY bitti MOVLW 0x20 ; W- rekisterin sisällöksi 32d MOVWF COUNT ; ja siirretään COUNT laskijaan CLRF R0 ; Tyhjennetään rekisteri R0 CLRF R1 ; Tyhjennetään rekisteri R1 CLRF R2 ; Tyhjennetään rekisteri R2 CLRF R3 ; Tyhjennetään rekisteri R3 CLRF R4 ; Tyhjennetään rekisteri R4 LOOP32 RLF TMP3, F ; Siirretään TMP3 (L_BYTE) vasemmalle 1 bit RLF TMP2, F ; Siirretään TMP2 (ML_BYTE) vasemmalle 1 bit RLF TMP1, F ; Siirretään TMP1 (MH_BYTE) vasemmalle 1 bit RLF TMP0, F ; Siirretään TMP0 (H_BYTE) vasemmalle 1 bit RLF R4, F ; Siirretään R4 vasemmalle 1 bit RLF R3, F ; Siirretään R3 vasemmalle 1 bit RLF R2, F ; Siirretään R2 vasemmalle 1 bit RLF R1, F ; Siirretään R1 vasemmalle 1 bit RLF R0, F ; Siirretään R0 vasemmalle 1 bit DECFSZ COUNT, F ; Vähennetään COUNT laskijasta 1 ; jos tulos on 0 ohitetaan seuraava GOTO ADJDEC ; Jatketaan paikkaan ADJDEC RETLW 0 ADJDEC MOVLW R4 ; Siirretään R4 rekisterin osoite MOVWF FSR ; sisäiseen osoittimeen FSR CALL ADJBCD ; Aliohjelma ADJBCD MOVLW R3 ; Siirretään R3 rekisterin osoite MOVWF FSR ; sisäiseen osoittimeen FSR CALL ADJBCD ; Aliohjelma ADJBCD MOVLW R2 ; Siirretään R2 rekisterin osoite MOVWF FSR ; sisäiseen osoittimeen FSR CALL ADJBCD ; Aliohjelma ADJBCD MOVLW R1 ; Siirretään R1 rekisterin osoite MOVWF FSR ; sisäiseen osoittimeen FSR CALL ADJBCD ; Aliohjelma ADJBCD MOVLW R0 ; Siirretään R0 rekisterin osoite MOVWF FSR ; sisäiseen osoittimeen FSR CALL ADJBCD ; Aliohjelma ADJBCD GOTO LOOP32 ADJBCD MOVLW 3 ; W = 3 ADDWF 0,W ; MOVWF TMP ; BTFSC TMP,3 ; test if result > 7 MOVWF 0 ; MOVLW 30 ; ADDWF 0,W ; MOVWF TMP ; BTFSC TMP,7 ; test if result > 7 MOVWF 0 ; save as MSD RETLW 0 ; ;======================================================================================================= ; Kirjoitetaan LCD näytölle teksti. ; "TESTIVALIKKO" ; "1,2,3,4,5,6,7" ;------------------------------------------------------------------------------------------------------- VALIKKO MOVLW LCD_LINE0 ; LCD näytön rivin 0 ensimmäisen merkin osoite ja CALL LCDSDDA ; kursori ensimmäisen rivin ensimmäiseen merkkiin MOVLW a'T' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'E' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'S' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'T' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'A' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'U' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'S' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'V' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'A' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'L' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'I' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'N' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'N' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'A' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'T' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki PALUU MOVLW LCD_LINE1 ; LCD näytön rivin 1 ensimmäisen merkin osoite ja CALL LCDSDDA ; kursori ensimmäisen rivin ensimmäiseen merkkiin CALL DELAY1 MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'1' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'2' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'3' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'4' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'5' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'6' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki ;------------------------------------------------------------------------------------------------------- ; Päävalikko ; Valintapainikkeet (napit) ; Valinnat Nappi 0. ; Nappi 1. Testataan painikkeet ; Nappi 2. Testataan valot ; Nappi 3. Testataan PWM lähdöt ; Nappi 4. Testataan rajakytkimet ; Nappi 5. Testataan A/D muuntimet ; Nappi 6. Näppäinmatriisin testi ; Nappi 7. ;------------------------------------------------------------------------------------------------------- NAPIT1 BTFSS TULO,NAPPI0 ; Ohita seuraava jos nappia 0 ei paineta GOTO NAPIT1 ; BTFSS TULO,NAPPI1 ; Ohita seuraava jos nappia 1 ei paineta GOTO PAINIKK ; Nappien testaus. BTFSS TULO,NAPPI2 ; Ohita seuraava jos nappia 2 ei paineta GOTO VALOT ; Valojen ja vastaavien releiden testaus. BTFSS TULO,NAPPI3 ; Ohita seuraava jos nappia 3 ei paineta GOTO PWMTEST ; PWM lähtöjen testaus. BTFSS TULO,NAPPI4 ; Ohita seuraava jos nappia 4 ei paineta GOTO RAJAKT ; Rajakytkin testaus BTFSS TULO,NAPPI5 ; Ohita seuraava jos nappia 5 ei paineta GOTO ADTEST ; AD muunnoksen testaus BTFSS TULO,NAPPI6 ; Ohita seuraava jos nappia 6 ei paineta GOTO KEYBTEST ; Näppäinmatriisin testaus BTFSS TULO,NAPPI7 ; Ohita seuraava jos nappia 7 ei paineta GOTO NAPIT1 GOTO NAPIT1 ;------------------------------------------------------------------------------------------------------- ; Ensimmäinen LCD näytön rivi jätetään ennalleen "TESTAUSVALINNAT" ; Kirjoitetaan näytön toiselle riville teksti "Portti RB- " ;------------------------------------------------------------------------------------------------------- PAINIKK MOVLW LCD_LINE1 ; LCD näytön rivin 1 ensimmäisen merkin osoite ja CALL LCDSDDA ; kursori ensimmäisen rivin ensimmäiseen merkkiin CALL DELAY1 MOVLW a'P' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'O' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'R' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'T' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'B' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'-' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'N' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'A' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'P' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'P' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'I' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'-' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki ;------------------------------------------------------------------------------------------------------- ; Valikon valinnat ; Painikkeitten testaus. ; Valinnat Nappi 0. ; Nappi 1. ; Nappi 2. ; Nappi 3. ; Nappi 4. ; Nappi 5. ; Nappi 6. ; Nappi 7. ;------------------------------------------------------------------------------------------------------- VAL BTFSS TULO,NAPPI0 ; Ohita seuraava jos nappia 0 ei paineta GOTO TNAP0 ; BTFSS TULO,NAPPI1 ; Ohita seuraava jos nappia 1 ei paineta GOTO TNAP1 ; BTFSS TULO,NAPPI2 ; Ohita seuraava jos nappia 2 ei paineta GOTO TNAP2 ; BTFSS TULO,NAPPI3 ; Ohita seuraava jos nappia 3 ei paineta GOTO TNAP3 ; BTFSS TULO,NAPPI4 ; Ohita seuraava jos nappia 4 ei paineta GOTO TNAP4 ; BTFSS TULO,NAPPI5 ; Ohita seuraava jos nappia 5 ei paineta GOTO TNAP5 ; BTFSS TULO,NAPPI6 ; Ohita seuraava jos nappia 6 ei paineta GOTO TNAP6 ; BTFSS TULO,NAPPI7 ; Ohita seuraava jos nappia 7 ei paineta GOTO TNAP7 ; GOTO VAL ;------------------------------------------------------------------------------------------------------- ; Painiketta painettaessa lisätään LCDn toisen rivin tekstiin painikkeen numero ja ; painike vapautettaessa kirjoitetaan samaan kohtaan "-" Viiva. ; Kaikkien nappien testaus toimii samalla tavalla, mutta jos napin 7 kanssa samaan aikaan painetaan ; nappia 0, palataan edelliseen valikkoon. ;------------------------------------------------------------------------------------------------------- TNAP0 MOVLW LCD_LINE1+05 ; LCD näytön rivin 1 ensimmäisen merkin osoite + 05 CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'0' CALL LCDPUTCHAR ; näytetään merkki MOVLW LCD_LINE1+0D ; LCD näytön rivin 1 ensimmäisen merkin osoite + 0D CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'0' CALL LCDPUTCHAR ; näytetään merkki TNAP0P BTFSS TULO,NAPPI0 ; Odotellaan kunnes nappi vapautetaan. GOTO TNAP0P MOVLW LCD_LINE1+05 ; LCD näytön rivin 1 ensimmäisen merkin osoite + 05 CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'-' CALL LCDPUTCHAR ; näytetään merkki MOVLW LCD_LINE1+0D ; LCD näytön rivin 1 ensimmäisen merkin osoite + 0D CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'-' CALL LCDPUTCHAR ; näytetään merkki GOTO VAL ;------------------------------------------------------------------------------------------------------- TNAP1 MOVLW LCD_LINE1+05 ; LCD näytön rivin 1 ensimmäisen merkin osoite + 05 CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'1' CALL LCDPUTCHAR ; näytetään merkki MOVLW LCD_LINE1+0D ; LCD näytön rivin 1 ensimmäisen merkin osoite + 0D CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'1' CALL LCDPUTCHAR ; näytetään merkki TNAP1P BTFSS TULO,NAPPI1 ; Odotellaan kunnes nappi vapautetaan. GOTO TNAP1P MOVLW LCD_LINE1+05 ; LCD näytön rivin 1 ensimmäisen merkin osoite + 05 CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'-' CALL LCDPUTCHAR ; näytetään merkki MOVLW LCD_LINE1+0D ; LCD näytön rivin 1 ensimmäisen merkin osoite + 0D CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'-' CALL LCDPUTCHAR ; näytetään merkki GOTO VAL ;------------------------------------------------------------------------------------------------------- TNAP2 MOVLW LCD_LINE1+05 ; LCD näytön rivin 1 ensimmäisen merkin osoite + 05 CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'2' CALL LCDPUTCHAR ; näytetään merkki MOVLW LCD_LINE1+0D ; LCD näytön rivin 1 ensimmäisen merkin osoite + 0D CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'2' CALL LCDPUTCHAR ; näytetään merkki TNAP2P BTFSS TULO,NAPPI2 ; Odotellaan kunnes nappi vapautetaan. GOTO TNAP2P MOVLW LCD_LINE1+05 ; LCD näytön rivin 1 ensimmäisen merkin osoite + 05 CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'-' CALL LCDPUTCHAR ; näytetään merkki MOVLW LCD_LINE1+0D ; LCD näytön rivin 1 ensimmäisen merkin osoite + 0D CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'-' CALL LCDPUTCHAR ; näytetään merkki GOTO VAL ;------------------------------------------------------------------------------------------------------- TNAP3 MOVLW LCD_LINE1+05 ; LCD näytön rivin 1 ensimmäisen merkin osoite + 05 CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'3' CALL LCDPUTCHAR ; näytetään merkki MOVLW LCD_LINE1+0D ; LCD näytön rivin 1 ensimmäisen merkin osoite + 0D CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'3' CALL LCDPUTCHAR ; näytetään merkki TNAP3P BTFSS TULO,NAPPI3 ; Odotellaan kunnes nappi vapautetaan. GOTO TNAP3P MOVLW LCD_LINE1+05 ; LCD näytön rivin 1 ensimmäisen merkin osoite + 05 CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'-' CALL LCDPUTCHAR ; näytetään merkki MOVLW LCD_LINE1+0D ; LCD näytön rivin 1 ensimmäisen merkin osoite + 0D CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'-' CALL LCDPUTCHAR ; näytetään merkki GOTO VAL ;------------------------------------------------------------------------------------------------------- TNAP4 MOVLW LCD_LINE1+05 ; LCD näytön rivin 1 ensimmäisen merkin osoite + 05 CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'4' CALL LCDPUTCHAR ; näytetään merkki MOVLW LCD_LINE1+0D ; LCD näytön rivin 1 ensimmäisen merkin osoite + 0D CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'4' CALL LCDPUTCHAR ; näytetään merkki TNAP4P BTFSS TULO,NAPPI4 ; Odotellaan kunnes nappi vapautetaan. GOTO TNAP4P MOVLW LCD_LINE1+05 ; LCD näytön rivin 1 ensimmäisen merkin osoite + 05 CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'-' CALL LCDPUTCHAR ; näytetään merkki MOVLW LCD_LINE1+0D ; LCD näytön rivin 1 ensimmäisen merkin osoite + 0D CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'-' CALL LCDPUTCHAR ; näytetään merkki GOTO VAL ;------------------------------------------------------------------------------------------------------- TNAP5 MOVLW LCD_LINE1+05 ; LCD näytön rivin 1 ensimmäisen merkin osoite + 05 CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'5' CALL LCDPUTCHAR ; näytetään merkki MOVLW LCD_LINE1+0D ; LCD näytön rivin 1 ensimmäisen merkin osoite + 0D CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'5' CALL LCDPUTCHAR ; näytetään merkki TNAP5P BTFSS TULO,NAPPI5 ; Odotellaan kunnes nappi vapautetaan. GOTO TNAP5P MOVLW LCD_LINE1+05 ; LCD näytön rivin 1 ensimmäisen merkin osoite + 05 CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'-' CALL LCDPUTCHAR ; näytetään merkki MOVLW LCD_LINE1+0D ; LCD näytön rivin 1 ensimmäisen merkin osoite + 0D CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'-' CALL LCDPUTCHAR ; näytetään merkki GOTO VAL ;------------------------------------------------------------------------------------------------------- TNAP6 MOVLW LCD_LINE1+05 ; LCD näytön rivin 1 ensimmäisen merkin osoite + 05 CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'6' CALL LCDPUTCHAR ; näytetään merkki MOVLW LCD_LINE1+0D ; LCD näytön rivin 1 ensimmäisen merkin osoite + 0D CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'6' CALL LCDPUTCHAR ; näytetään merkki TNAP6P BTFSS TULO,NAPPI6 ; Odotellaan kunnes nappi vapautetaan. GOTO TNAP6P MOVLW LCD_LINE1+05 ; LCD näytön rivin 1 ensimmäisen merkin osoite + 05 CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'-' CALL LCDPUTCHAR ; näytetään merkki MOVLW LCD_LINE1+0D ; LCD näytön rivin 1 ensimmäisen merkin osoite + 0D CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'-' CALL LCDPUTCHAR ; näytetään merkki GOTO VAL ;------------------------------------------------------------------------------------------------------- TNAP7 MOVLW LCD_LINE1+05 ; LCD näytön rivin 1 ensimmäisen merkin osoite + 05 CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'7' CALL LCDPUTCHAR ; näytetään merkki MOVLW LCD_LINE1+0D ; LCD näytön rivin 1 ensimmäisen merkin osoite + 0D CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'7' CALL LCDPUTCHAR ; näytetään merkki TNAP7P BTFSS TULO,NAPPI0 ; Jos painetaan myös 0 nappia palataan edelliseen valikkoon GOTO TNAPLOP BTFSS TULO,NAPPI7 ; Odotellaan kunnes nappi 7 vapautetaan. GOTO TNAP7P MOVLW LCD_LINE1+05 ; LCD näytön rivin 1 ensimmäisen merkin osoite + 05 CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'-' CALL LCDPUTCHAR ; näytetään merkki MOVLW LCD_LINE1+0D ; LCD näytön rivin 1 ensimmäisen merkin osoite + 0D CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'-' CALL LCDPUTCHAR ; näytetään merkki GOTO VAL TNAPLOP GOTO PALUU ; Palataan testivalikkoon ;======================================================================================================= ; Kirjoitetaan LCD näytölle "PORTD- RELE " ;------------------------------------------------------------------------------------------------------- VALOT MOVLW LCD_LINE1 ; LCD näytön rivin 1 ensimmäisen merkin osoite ja CALL LCDSDDA ; kursori ensimmäisen rivin ensimmäiseen merkkiin CALL DELAY1 MOVLW a'P' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'O' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'R' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'T' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'D' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'-' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'R' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'E' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'L' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'E' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki ;------------------------------------------------------------------------------------------------------- ; Valikon valinnat ; Valojen ja releitten testaus. ; Valinnat Nappi 0. Valo 0 ja rele 0 ; Nappi 1. Valo 1 ja rele 1 ; Nappi 2. Valo 2 ja rele 2 ; Nappi 3. Valo 3 ja rele 3 ; Nappi 4. Valo 4 ja rele 4 ; Nappi 5. Valo 5 ja rele 5 ; Nappi 6. Valo 6 ja rele 6 ; Nappi 7. Valo 7 ja rele 7 ;------------------------------------------------------------------------------------------------------- LAHT BTFSS TULO,NAPPI0 ; Ohita seuraava jos nappia 0 ei paineta GOTO LNAP0 ; BTFSS TULO,NAPPI1 ; Ohita seuraava jos nappia 1 ei paineta GOTO LNAP1 ; BTFSS TULO,NAPPI2 ; Ohita seuraava jos nappia 2 ei paineta GOTO LNAP2 ; BTFSS TULO,NAPPI3 ; Ohita seuraava jos nappia 3 ei paineta GOTO LNAP3 ; BTFSS TULO,NAPPI4 ; Ohita seuraava jos nappia 4 ei paineta GOTO LNAP4 ; BTFSS TULO,NAPPI5 ; Ohita seuraava jos nappia 5 ei paineta GOTO LNAP5 ; BTFSS TULO,NAPPI6 ; Ohita seuraava jos nappia 6 ei paineta GOTO LNAP6 ; BTFSS TULO,NAPPI7 ; Ohita seuraava jos nappia 7 ei paineta GOTO LNAP7 ; GOTO LAHT ;------------------------------------------------------------------------------------------------------- ; Kirjoitetaan LCD näytölle painiketta vastaavan releen numero, ja kytketään rele, kunnes painike taas ; vapautetaan, jolloin valo sammuu ja rele päästää, LCD näytölle tulee numeron tilalle viiva "-" ;------------------------------------------------------------------------------------------------------- LNAP0 MOVLW LCD_LINE1+05 ; LCD näytön rivin 1 ensimmäisen merkin osoite + 05 CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'0' CALL LCDPUTCHAR ; näytetään merkki MOVLW LCD_LINE1+0D ; LCD näytön rivin 1 ensimmäisen merkin osoite + 0D CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'0' CALL LCDPUTCHAR ; näytetään merkki BSF LAHTO,VALO0 ; SYTYTETÄÄN VALO LNAP0P BTFSS TULO,NAPPI0 ; Odotellaan kunnes nappi vapautetaan. GOTO LNAP0P MOVLW LCD_LINE1+05 ; LCD näytön rivin 1 ensimmäisen merkin osoite + 05 CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'-' CALL LCDPUTCHAR ; näytetään merkki MOVLW LCD_LINE1+0D ; LCD näytön rivin 1 ensimmäisen merkin osoite + 0D CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'-' CALL LCDPUTCHAR ; näytetään merkki BCF LAHTO,VALO0 ; SAMMUTETAAN VALO GOTO LAHT ;------------------------------------------------------------------------------------------------------- LNAP1 MOVLW LCD_LINE1+05 ; LCD näytön rivin 1 ensimmäisen merkin osoite + 05 CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'1' CALL LCDPUTCHAR ; näytetään merkki MOVLW LCD_LINE1+0D ; LCD näytön rivin 1 ensimmäisen merkin osoite + 0D CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'1' CALL LCDPUTCHAR ; näytetään merkki BSF LAHTO,VALO1 ; SYTYTETÄÄN VALO LNAP1P BTFSS TULO,NAPPI1 ; Odotellaan kunnes nappi vapautetaan. GOTO LNAP1P MOVLW LCD_LINE1+05 ; LCD näytön rivin 1 ensimmäisen merkin osoite + 05 CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'-' CALL LCDPUTCHAR ; näytetään merkki MOVLW LCD_LINE1+0D ; LCD näytön rivin 1 ensimmäisen merkin osoite + 0D CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'-' CALL LCDPUTCHAR ; näytetään merkki BCF LAHTO,VALO1 ; SAMMUTETAAN VALO GOTO LAHT ;------------------------------------------------------------------------------------------------------- LNAP2 MOVLW LCD_LINE1+05 ; LCD näytön rivin 1 ensimmäisen merkin osoite + 05 CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'2' CALL LCDPUTCHAR ; näytetään merkki MOVLW LCD_LINE1+0D ; LCD näytön rivin 1 ensimmäisen merkin osoite + 0D CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'2' CALL LCDPUTCHAR ; näytetään merkki BSF LAHTO,VALO2 ; SYTYTETÄÄN VALO LNAP2P BTFSS TULO,NAPPI2 ; Odotellaan kunnes nappi vapautetaan. GOTO LNAP2P MOVLW LCD_LINE1+05 ; LCD näytön rivin 1 ensimmäisen merkin osoite + 05 CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'-' CALL LCDPUTCHAR ; näytetään merkki MOVLW LCD_LINE1+0D ; LCD näytön rivin 1 ensimmäisen merkin osoite + 0D CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'-' CALL LCDPUTCHAR ; näytetään merkki BCF LAHTO,VALO2 ; SAMMUTETAAN VALO GOTO LAHT ;------------------------------------------------------------------------------------------------------- LNAP3 MOVLW LCD_LINE1+05 ; LCD näytön rivin 1 ensimmäisen merkin osoite + 05 CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'3' CALL LCDPUTCHAR ; näytetään merkki MOVLW LCD_LINE1+0D ; LCD näytön rivin 1 ensimmäisen merkin osoite + 0D CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'3' CALL LCDPUTCHAR ; näytetään merkki BSF LAHTO,VALO3 ; SYTYTETÄÄN VALO LNAP3P BTFSS TULO,NAPPI3 ; Odotellaan kunnes nappi vapautetaan. GOTO LNAP3P MOVLW LCD_LINE1+05 ; LCD näytön rivin 1 ensimmäisen merkin osoite + 05 CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'-' CALL LCDPUTCHAR ; näytetään merkki MOVLW LCD_LINE1+0D ; LCD näytön rivin 1 ensimmäisen merkin osoite + 0D CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'-' CALL LCDPUTCHAR ; näytetään merkki BCF LAHTO,VALO3 ; SAMMUTETAAN VALO GOTO LAHT ;------------------------------------------------------------------------------------------------------- LNAP4 MOVLW LCD_LINE1+05 ; LCD näytön rivin 1 ensimmäisen merkin osoite + 05 CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'4' CALL LCDPUTCHAR ; näytetään merkki MOVLW LCD_LINE1+0D ; LCD näytön rivin 1 ensimmäisen merkin osoite + 0D CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'4' CALL LCDPUTCHAR ; näytetään merkki BSF LAHTO,VALO4 ; SYTYTETÄÄN VALO LNAP4P BTFSS TULO,NAPPI4 ; Odotellaan kunnes nappi vapautetaan. GOTO LNAP4P MOVLW LCD_LINE1+05 ; LCD näytön rivin 1 ensimmäisen merkin osoite + 05 CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'-' CALL LCDPUTCHAR ; näytetään merkki MOVLW LCD_LINE1+0D ; LCD näytön rivin 1 ensimmäisen merkin osoite + 0D CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'-' CALL LCDPUTCHAR ; näytetään merkki BCF LAHTO,VALO4 ; SAMMUTETAAN VALO GOTO LAHT ;------------------------------------------------------------------------------------------------------- LNAP5 MOVLW LCD_LINE1+05 ; LCD näytön rivin 1 ensimmäisen merkin osoite + 05 CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'5' CALL LCDPUTCHAR ; näytetään merkki MOVLW LCD_LINE1+0D ; LCD näytön rivin 1 ensimmäisen merkin osoite + 0D CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'5' CALL LCDPUTCHAR ; näytetään merkki BSF LAHTO,VALO5 ; SYTYTETÄÄN VALO LNAP5P BTFSS TULO,NAPPI5 ; Odotellaan kunnes nappi vapautetaan. GOTO LNAP5P MOVLW LCD_LINE1+05 ; LCD näytön rivin 1 ensimmäisen merkin osoite + 05 CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'-' CALL LCDPUTCHAR ; näytetään merkki MOVLW LCD_LINE1+0D ; LCD näytön rivin 1 ensimmäisen merkin osoite + 0D CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'-' CALL LCDPUTCHAR ; näytetään merkki BCF LAHTO,VALO5 ; SAMMUTETAAN VALO GOTO LAHT ;------------------------------------------------------------------------------------------------------- LNAP6 MOVLW LCD_LINE1+05 ; LCD näytön rivin 1 ensimmäisen merkin osoite + 05 CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'6' CALL LCDPUTCHAR ; näytetään merkki MOVLW LCD_LINE1+0D ; LCD näytön rivin 1 ensimmäisen merkin osoite + 0D CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'6' CALL LCDPUTCHAR ; näytetään merkki BSF LAHTO,VALO6 ; SYTYTETÄÄN VALO LNAP6P BTFSS TULO,NAPPI6 ; Odotellaan kunnes nappi vapautetaan. GOTO LNAP6P MOVLW LCD_LINE1+05 ; LCD näytön rivin 1 ensimmäisen merkin osoite + 05 CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'-' CALL LCDPUTCHAR ; näytetään merkki MOVLW LCD_LINE1+0D ; LCD näytön rivin 1 ensimmäisen merkin osoite + 0D CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'-' CALL LCDPUTCHAR ; näytetään merkki BCF LAHTO,VALO6 ; SAMMUTETAAN VALO GOTO LAHT ;------------------------------------------------------------------------------------------------------- LNAP7 MOVLW LCD_LINE1+05 ; LCD näytön rivin 1 ensimmäisen merkin osoite + 05 CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'7' CALL LCDPUTCHAR ; näytetään merkki MOVLW LCD_LINE1+0D ; LCD näytön rivin 1 ensimmäisen merkin osoite + 0D CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'7' CALL LCDPUTCHAR ; näytetään merkki BSF LAHTO,VALO7 ; SYTYTETÄÄN VALO 7 LNAP7P BTFSS TULO,NAPPI0 ; Jos painetaan myös 0 nappia palataan testivalikkoon GOTO LNAPLOP BTFSS TULO,NAPPI7 ; Odotellaan kunnes nappi vapautetaan. GOTO LNAP7P MOVLW LCD_LINE1+05 ; LCD näytön rivin 1 ensimmäisen merkin osoite + 05 CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'-' CALL LCDPUTCHAR ; näytetään merkki MOVLW LCD_LINE1+0D ; LCD näytön rivin 1 ensimmäisen merkin osoite + 0D CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'-' CALL LCDPUTCHAR ; näytetään merkki BCF LAHTO,VALO7 ; SAMMUTETAAN VALO 7 GOTO LAHT LNAPLOP BCF LAHTO,VALO7 ; SAMMUTETAAN VALO 7 BCF LAHTO,VALO0 ; SAMMUTETAAN VALO 0 GOTO PALUU ; Palataan testivalikkoon ;======================================================================================================= ; PWMTEST ohjelmalla testataan PWM lähdöt. ; esimerkiksi kytkemällä lähtöjen liittimiin pieni moottori jonka pyörimisnopeutta voidaan ohjelmalla ; säätää. ;------------------------------------------------------------------------------------------------------- PWMTEST MOVLW LCD_LINE1 ; LCD näytön rivin 1 ensimmäisen merkin osoite ja CALL LCDSDDA ; kursori ensimmäisen rivin ensimmäiseen merkkiin CALL DELAY1 MOVLW a'P' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'O' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'R' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'T' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'C' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'P' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'W' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'M' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'1' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'-' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'2' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki ;------------------------------------------------------------------------------------------------------- ; Valikon valinnat. ; PWM lähtöjen testaus ; Valinnat Nappi 0. ; Nappi 1. PWM 1 testaus ; Nappi 2. PWM 2 testaus ; Nappi 3. ; Nappi 4. ; Nappi 5. ; Nappi 6. ; Nappi 7. ja 0. paluu päävalikkoon ;------------------------------------------------------------------------------------------------------- PWMTE BTFSS TULO,NAPPI0 ; Ohita seuraava jos nappia 0 ei paineta GOTO PWMTE ; BTFSS TULO,NAPPI1 ; Ohita seuraava jos nappia 1 ei paineta GOTO PWMNAP1A ; BTFSS TULO,NAPPI2 ; Ohita seuraava jos nappia 2 ei paineta GOTO PWMNAP2A ; BTFSS TULO,NAPPI3 ; Ohita seuraava jos nappia 3 ei paineta GOTO PWMTE ; BTFSS TULO,NAPPI4 ; Ohita seuraava jos nappia 4 ei paineta GOTO PWMTE ; BTFSS TULO,NAPPI5 ; Ohita seuraava jos nappia 5 ei paineta GOTO PWMTE ; BTFSS TULO,NAPPI6 ; Ohita seuraava jos nappia 6 ei paineta GOTO PWMTE ; BTFSS TULO,NAPPI7 ; Ohita seuraava jos nappia 7 ei paineta GOTO PWMULOS ; GOTO PWMTE ; palataan takaisin tämän valikon alkuun PWMULOS BTFSS TULO,NAPPI0 ; Ohita seuraava jos nappia 0 ei paineta GOTO PALUU ; paluu päävalikkoon GOTO PWMTE ; palataan takaisin tämän valikon alkuun ;======================================================================================================= ; PWM1 lähdön testausohjelma. ; LCD näytölle teksti ; "PWM1 4+ 5- " ;------------------------------------------------------------------------------------------------------- PWMNAP1A MOVLW d'1' MOVWF PWMN1L ; nopeuslaskijaan 1 PWMNAP1 MOVLW LCD_LINE1 ; LCD näytön rivin 1 ensimmäisen merkin osoite ja CALL LCDSDDA ; kursori ensimmäisen rivin ensimmäiseen merkkiin CALL DELAY1 MOVLW a'P' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'W' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'M' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'1' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'4' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'+' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'5' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'-' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki ;------------------------------------------------------------------------------------------------------- ; testausvalikko ; painike 4 lisää tehoa ; painike 5 vähentää tehoa ; painikkeella 7 poistutaan testistä. ; jos painetaan samaan aikaan 0 ja 7, palataan alkuvalikkoon ;------------------------------------------------------------------------------------------------------- PWM1TST BTFSS TULO,NAPPI4 ; Ohita seuraava jos nappia 4 ei paineta GOTO PWM1PLUS ; lisätään laskijaa BTFSS TULO,NAPPI5 ; Ohita seuraava jos nappia 5 ei paineta GOTO PWM1MINUS ; vähennetään laskijaa BTFSS TULO,NAPPI7 ; Ohita seuraava jos nappia 7 ei paineta GOTO PWMNAP1P ; poistutaan testistä GOTO PWM1TST ; palataan takaisin PWM1TST ;------------------------------------------------------------------------------------------------------- ; pulssisuhteen muutos ; näytölle teksti "Lisää " ja lisätään pulssin päälläoloaikaa ;------------------------------------------------------------------------------------------------------- PWM1PLUS MOVLW LCD_LINE1+05 ; LCD näytön rivin 1 ensimmäisen merkin osoite + 05 (desim 5) CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'L' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'i' CALL LCDPUTCHAR ; näytetään merkki MOVLW a's' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'á' ; ( á = ä LCD:n merkkitaulukossa ) CALL LCDPUTCHAR ; näytetään merkki MOVLW a'á' ; ( á = ä LCD:n merkkitaulukossa ) CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki PWM1TSS BTFSC TULO,NAPPI4 ; Ohita seuraava jos nappia 4 painetaan GOTO PWMNAP1 ; Valikon alkuun MOVLW d'10' ; asetetaan aika 10ms CALL X_DELAY1 MOVFW PWMN1L ; laskijasta kopioidaan MOVWF CCPR1L ; PWM1 rekisteriin INCFSZ PWMN1L,F ; lisätään laskijaan PWMN1L laskijaan 1 GOTO PWM1TSS ; palataan takaisin PWM1TSS DECF PWMN1L,F ; jos laskija menee ympäri vähennetään 1 GOTO PWM1TSS ; palataan takaisin PWM1TSS ;------------------------------------------------------------------------------------------------------- ; pulssisuhteen muutos ; näytölle teksti "Vähentää " ja vähennetään pulssin päälläoloaikaa ;------------------------------------------------------------------------------------------------------- PWM1MINUS MOVLW LCD_LINE1+05 ; LCD näytön rivin 1 ensimmäisen merkin osoite + 05 (desim 5) CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'V' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'á' ; ( á = ä LCD:n merkkitaulukossa ) CALL LCDPUTCHAR ; näytetään merkki MOVLW a'h' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'e' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'n' CALL LCDPUTCHAR ; näytetään merkki MOVLW a't' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'á' ; ( á = ä LCD:n merkkitaulukossa ) CALL LCDPUTCHAR ; näytetään merkki MOVLW a'á' ; ( á = ä LCD:n merkkitaulukossa ) CALL LCDPUTCHAR ; näytetään merkki PWM1TSP BTFSC TULO,NAPPI5 ; Ohita seuraava jos nappia 5 painetaan GOTO PWMNAP1 ; Valikon alkuun MOVLW d'10' ; asetetaan aika 10ms CALL X_DELAY1 MOVFW PWMN1L ; laskijasta kopioidaan MOVWF CCPR1L ; PWM1 rekisteriin DECFSZ PWMN1L,F ; vähennetään laskijasta PWMN1L 1 GOTO PWM1TSP ; palataan takaisin PWM1TSP INCF PWMN1L,F ; jos PWMN1L laskija on nolla lisätään 1 GOTO PWM1TSP ; palataan takaisin PWM1TSP ;------------------------------------------------------------------------------------------------------- ; Poistuminen testistä ; vähennetään pulssin päälläoloaika minimiin ennen kuin poistutaan. ;------------------------------------------------------------------------------------------------------- PWMNAP1P MOVLW d'4' ; asetetaan aika 4ms CALL X_DELAY1 MOVFW PWMN1L ; laskijasta kopioidaan MOVWF CCPR1L ; PWM1 rekisteriin DECFSZ PWMN1L,F ; vähennetään laskijasta PWMN1L 1 GOTO PWMNAP1P ; palataan takaisin PWMNAP1P INCF PWMN1L,F ; jos PWMN1L laskija on nolla lisätään 1 PWMNAP1X BTFSS TULO,NAPPI0 ; Jos painetaan myös 0 nappia palataan alkuvalikkoon GOTO PALUU ; palataan alkuvalikkoon BTFSS TULO,NAPPI7 ; Odotellaan kunnes nappi 7 vapautetaan. GOTO PWMNAP1X ; palataan takaisin PWMNAP1X GOTO PWMTEST ; palataan takaisin PWMTEST ;======================================================================================================= ; PWM2 lähdön testausohjelma. ; LCD näytölle teksti ; "PWM2 4+ 5- " ;------------------------------------------------------------------------------------------------------- PWMNAP2A MOVLW d'1' MOVWF PWMN2L ; nopeuslaskijaan 1 PWMNAP2 MOVLW LCD_LINE1 ; LCD näytön rivin 1 ensimmäisen merkin osoite ja CALL LCDSDDA ; kursori ensimmäisen rivin ensimmäiseen merkkiin CALL DELAY1 MOVLW a'P' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'W' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'M' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'2' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'4' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'+' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'5' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'-' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki ;------------------------------------------------------------------------------------------------------- ; testausvalikko ; painike 4 lisää tehoa ; painike 5 vähentää tehoa ; painikkeella 7 poistutaan testistä. ; jos painetaan samaan aikaan 0 ja 7, palataan alkuvalikkoon ;------------------------------------------------------------------------------------------------------- PWM2TST BTFSS TULO,NAPPI4 ; Ohita seuraava jos nappia 4 ei paineta GOTO PWM2PLUS ; Laskijan lisäykseen BTFSS TULO,NAPPI5 ; Ohita seuraava jos nappia 5 ei paineta GOTO PWM2MINUS ; Laskijan vähennykseen BTFSS TULO,NAPPI7 ; Ohita seuraava jos nappia 7 ei paineta GOTO PWMNAP2P ; poistutaan testistä GOTO PWM2TST ; palataan takaisin PWM2TST ;------------------------------------------------------------------------------------------------------- ; pulssisuhteen muutos ; näytölle teksti "Lisää " ja lisätään pulssin päälläoloaikaa ;------------------------------------------------------------------------------------------------------- PWM2PLUS MOVLW LCD_LINE1+05 ; LCD näytön rivin 1 ensimmäisen merkin osoite + 05 (desim 5) CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'L' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'i' CALL LCDPUTCHAR ; näytetään merkki MOVLW a's' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'á' ; ( á = ä LCD:n merkkitaulukossa ) CALL LCDPUTCHAR ; näytetään merkki MOVLW a'á' ; ( á = ä LCD:n merkkitaulukossa ) CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki PWM2TSS BTFSC TULO,NAPPI4 ; Ohita seuraava jos nappia 4 painetaan GOTO PWMNAP2 ; Valikon alkuun MOVLW d'10' ; asetetaan aika 10ms CALL X_DELAY1 MOVFW PWMN2L ; laskijasta kopioidaan MOVWF CCPR2L ; PWM rekisteriin INCFSZ PWMN2L,F ; lisätään PWMN2L laskijaan 1 GOTO PWM2TSS ; palataan takaisin PWM2TSS DECF PWMN2L,F ; jos laskija menee ympäri vähennetään 1 GOTO PWM2TSS ; palataan takaisin PWM2TSS ;------------------------------------------------------------------------------------------------------- ; pulssisuhteen muutos ; näytölle teksti "Vähentää " ja vähennetään pulssin päälläoloaikaa ;------------------------------------------------------------------------------------------------------- PWM2MINUS MOVLW LCD_LINE1+05 ; LCD näytön rivin 1 ensimmäisen merkin osoite + 05 (desim 5) CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'V' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'á' ; ( á = ä LCD:n merkkitaulukossa ) CALL LCDPUTCHAR ; näytetään merkki MOVLW a'h' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'e' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'n' CALL LCDPUTCHAR ; näytetään merkki MOVLW a't' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'á' ; ( á = ä LCD:n merkkitaulukossa ) CALL LCDPUTCHAR ; näytetään merkki MOVLW a'á' ; ( á = ä LCD:n merkkitaulukossa ) CALL LCDPUTCHAR ; näytetään merkki PWM2TSP BTFSC TULO,NAPPI5 ; Ohita seuraava jos nappia 5 painetaan GOTO PWMNAP2 ; Valikon alkuun MOVLW d'10' ; asetetaan aika 10ms CALL X_DELAY1 MOVFW PWMN2L ; laskijasta kopioidaan MOVWF CCPR2L ; PWM2 rekisteriin DECFSZ PWMN2L,F ; vähennetään laskijasta PWMN2L 1 GOTO PWM2TSP ; palataan takaisin PWM2TSP INCF PWMN2L,F ; jos PWMN1L laskija on nolla lisätään 1 GOTO PWM2TSP ; palataan takaisin PWM2TSP ;------------------------------------------------------------------------------------------------------- ; Poistuminen testistä ; vähennetään pulssin päälläoloaika minimiin ennen kuin poistutaan. ;------------------------------------------------------------------------------------------------------- PWMNAP2P MOVLW d'4' ; asetetaan aika 4ms CALL X_DELAY1 MOVFW PWMN2L ; laskijasta kopioidaan MOVWF CCPR2L ; PWM2 rekisteriin DECFSZ PWMN2L,F ; vähennetään laskijasta PWMN2L 1 GOTO PWMNAP2P ; palataan takaisin PWMNAP2P INCF PWMN2L,F ; jos PWMN2L laskija on nolla lisätään 1 PWMNAP2X BTFSS TULO,NAPPI0 ; Jos painetaan myös 0 nappia palataan alkuvalikkoon GOTO PALUU ; palataan päävalikkoon BTFSS TULO,NAPPI7 ; Odotellaan kunnes nappi 7 vapautetaan. GOTO PWMNAP2X ; palataan takaisin PWMNAP2X GOTO PWMTEST ; palataan takaisin PWMTEST ;======================================================================================================= ; Ensimmäinen LCD näytön rivi jätetään ennalleen "TESTIVALIKKO " ; Kirjoitetaan näytön toiselle riville teksti "PORTE RE " ;------------------------------------------------------------------------------------------------------- RAJAKT MOVLW LCD_LINE1 ; LCD näytön rivin 1 ensimmäisen merkin osoite ja CALL LCDSDDA ; kursori ensimmäisen rivin ensimmäiseen merkkiin CALL DELAY1 MOVLW a'P' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'O' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'R' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'T' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'E' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'R' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'E' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki ;------------------------------------------------------------------------------------------------------- ; Rajakytkimien testaus. ; Valinnat Rajakytkin 0. ; Rajakytkin 1. ; Rajakytkin 2. ; Rajakytkin 3. ;------------------------------------------------------------------------------------------------------- RAJAT1 BTFSS DTULO,DIN0 ; Ohita seuraava jos RAJA0 auki GOTO RAJA0 ; BTFSS DTULO,DIN1 ; Ohita seuraava jos RAJA1 auki GOTO RAJA1 ; BTFSS DTULO,DIN2 ; Ohita seuraava jos RAJA2 auki GOTO RAJA2 ; BTFSS PORTA,DIN4 ; Ohita seuraava jos RAJA4 auki GOTO RAJA3 ; BTFSS TULO,NAPPI0 ; Ohita seuraava jos nappia 0 ei paineta GOTO RAJATX ; Poistetaan testauksesta BTFSS TULO,NAPPI7 ; Ohita seuraava jos nappia 7 ei paineta GOTO RAJATX ; Poistutaan testauksesta GOTO RAJAT1 ;------------------------------------------------------------------------------------------------------- RAJA0 MOVLW LCD_LINE1+0A ; LCD näytön rivin 1 ensimmäisen merkin osoite + 0A (desim 10) CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'0' CALL LCDPUTCHAR ; näytetään merkki RAJA0P BTFSS DTULO,DIN0 ; Odotellaan kunnes raja vapautetaan. GOTO RAJA0P MOVLW LCD_LINE1+0A ; LCD näytön rivin 1 ensimmäisen merkin osoite + 0A (desim 10) CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'-' CALL LCDPUTCHAR ; näytetään merkki GOTO RAJAT1 ;------------------------------------------------------------------------------------------------------- RAJA1 MOVLW LCD_LINE1+0A ; LCD näytön rivin 1 ensimmäisen merkin osoite + 0A (desim 10) CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'1' CALL LCDPUTCHAR ; näytetään merkki RAJA1P BTFSS DTULO,DIN1 ; Odotellaan kunnes raja vapautetaan. GOTO RAJA1P MOVLW LCD_LINE1+0A ; LCD näytön rivin 1 ensimmäisen merkin osoite + 0A (desim 10) CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'-' CALL LCDPUTCHAR ; näytetään merkki GOTO RAJAT1 ;------------------------------------------------------------------------------------------------------- RAJA2 MOVLW LCD_LINE1+0A ; LCD näytön rivin 1 ensimmäisen merkin osoite + 0A (desim 10) CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'2' CALL LCDPUTCHAR ; näytetään merkki RAJA2P BTFSS DTULO,DIN2 ; Odotellaan kunnes raja vapautetaan. GOTO RAJA2P MOVLW LCD_LINE1+0A ; LCD näytön rivin 1 ensimmäisen merkin osoite + 0A (desim 10) CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'-' CALL LCDPUTCHAR ; näytetään merkki GOTO RAJAT1 ;------------------------------------------------------------------------------------------------------- RAJA3 MOVLW LCD_LINE1+04 ; LCD näytön rivin 1 ensimmäisen merkin osoite + 04 CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'A' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'R' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'A' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'4' CALL LCDPUTCHAR ; näytetään merkki RAJA3P BTFSS PORTA,DIN4 ; Odotellaan kunnes raja vapautetaan. GOTO RAJA3P MOVLW LCD_LINE1+04 ; LCD näytön rivin 1 ensimmäisen merkin osoite + 04 CALL LCDSDDA ; siiretään kursori em. merkkiin MOVLW a'E' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'R' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'E' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'-' CALL LCDPUTCHAR ; näytetään merkki GOTO RAJAT1 ;------------------------------------------------------------------------------------------------------- RAJATX GOTO PALUU ;======================================================================================================= ; AD muuntimien testaus ja viritys ; LCD näytölle A/D CH(kanavanumero) ja muuntimen tulos. ; Koska ADmuunnin muuntaa 10bitin tarkkuudella ja referenssijännitteenä on piirin käyttöjännite, voidaan ; mennä siitä yli missä aita on matalin eli, levyllä olevalla trimmerillä säädetään näyttämäksi 10V:n ; mitattavalla jännitteellä "10,00". Tarkoittaa sitä ettei ohjelmaan tarvitse rakentaa mitään kertoimia ; tulosta varten. '1111111111'b='3FF'h='1024'd ;------------------------------------------------------------------------------------------------------- ADTEST MOVLW LCD_LINE1 ; LCD näytön rivin 1 ensimmäisen merkin osoite ja CALL LCDSDDA ; kursori ensimmäisen rivin ensimmäiseen merkkiin CALL DELAY1 MOVLW a'A' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'D' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'C' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'H' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'V' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki ;------------------------------------------------------------------------------------------------------- ; AD muuntimien testausvalikko. Valitaan kanava tai 4kanavan samanaikainen mittaus. ;------------------------------------------------------------------------------------------------------- ADCHV BTFSS TULO,NAPPI0 ; Ohita seuraava jos nappia 0 ei paineta GOTO ADCH0 ; AD kanava CH0 BTFSS TULO,NAPPI1 ; Ohita seuraava jos nappia 1 ei paineta GOTO ADCH1 ; AD kanava CH1 BTFSS TULO,NAPPI2 ; Ohita seuraava jos nappia 2 ei paineta GOTO ADCH2 ; AD kanava CH2 BTFSS TULO,NAPPI3 ; Ohita seuraava jos nappia 3 ei paineta GOTO ADCH3 ; AD kanava CH3 BTFSS TULO,NAPPI4 ; Ohita seuraava jos nappia 4 ei paineta GOTO ADCH4 ; AD kanava CH4 BTFSS TULO,NAPPI5 ; Ohita seuraava jos nappia 5 ei paineta GOTO ADCHV ; Ei käytössä BTFSS TULO,NAPPI6 ; Ohita seuraava jos nappia 6 ei paineta GOTO AD4M ; AD4M 4 KANAVA MITTAUS BTFSS TULO,NAPPI7 ; Ohita seuraava jos nappia 7 ei paineta GOTO ADCHV70 ; Paluu päävalikkoon GOTO ADCHV ; Paluu tämän valikon alkuun ADCHV70 BTFSS TULO,NAPPI0 ; Jos painetaan myös 0 nappia palataan testivalikkoon GOTO PALUU ; Palataan alkuvalikkoon BTFSS TULO,NAPPI7 ; Odotellaan kunnes nappi vapautetaan. GOTO ADCHV70 ; Paluu päävalikkoon GOTO ADCHV ; Paluu tämän valikon alkuun ;------------------------------------------------------------------------------------------------------- ; AD muunnoksen ohjelma ;------------------------------------------------------------------------------------------------------- MUUNNOS CALL DELAY05 ; odotellaan 500us. BSF ADCON0,GO ; käynnistetään muunnos CALL DELAY05 ; odotellaan 500us. BSF STATUS,RP0 MOVFW ADRESL ; muunnoksen alaosa tulos siirretään W rekisteriin BCF STATUS,RP0 MOVWF TMP3 ; W rekisteristä TMP0 rekisteriin MOVFW ADRESH ; yläosa tulos siirretään W rekisteriin MOVWF TMP2 ; W rekisteristä TMP1 rekisteriin CALL B4_BCD ; suoritetaan binääri BCD muunnos. MOVLW LCD_LINE1+9 ; LCD näytön rivin 1 ensimmäisen merkin osoite +9 CALL LCDSDDA ; kursori em. merkkiin MOVLW D'50' CALL X_DELAY1 ; 50ms odotus. CALL NAYTATULOS ; näytetään lukema RETURN ;------------------------------------------------------------------------------------------------------- ; AD kanavan 0 testaus. Kytke tuloon 10 V ja säädä trimmerillä lukema 10,00. ;------------------------------------------------------------------------------------------------------- ADCH0 MOVLW LCD_LINE1+06 ; LCD näytön rivin 1 ensimmäisen merkin osoite +6 CALL LCDSDDA ; kursori em. merkkiin CALL DELAY1 MOVLW a'0' CALL LCDPUTCHAR ; näytetään merkki ADCH0A MOVLW b'01000001' ; muunnosaika Fosc/8 '01' kanava '000' start '101' MOVWF ADCON0 ; asetetaan AD muunnin CALL MUUNNOS ; AD muunnos aliohjelma BTFSS TULO,NAPPI7 ; Ohita seuraava jos nappia 7 ei paineta GOTO ADTEST ; Paluu kanava valikkoon GOTO ADCH0A ;------------------------------------------------------------------------------------------------------- ; AD kanavan 1 testaus. Kytke tuloon 10 V ja säädä trimmerillä lukema 10,00. ;------------------------------------------------------------------------------------------------------- ADCH1 MOVLW LCD_LINE1+06 ; LCD näytön rivin 1 ensimmäisen merkin osoite +6 CALL LCDSDDA ; kursori em. merkkiin CALL DELAY1 MOVLW a'1' CALL LCDPUTCHAR ; näytetään merkki ADCH1A MOVLW b'01001001' ; muunnosaika Fosc/32 '10' kanava '001' start '101' MOVWF ADCON0 ; käynnistetään muunnos kanavalta 1 CALL MUUNNOS ; AD muunnos aliohjelma BTFSS TULO,NAPPI7 ; Ohita seuraava jos nappia 7 ei paineta GOTO ADTEST ; Paluu kanava valikkoon GOTO ADCH1A ;------------------------------------------------------------------------------------------------------- ; AD kanavan 2 testaus. Kytke tuloon 10 V ja säädä trimmerillä lukema 10,00. ;------------------------------------------------------------------------------------------------------- ADCH2 MOVLW LCD_LINE1+06 ; LCD näytön rivin 1 ensimmäisen merkin osoite +6 CALL LCDSDDA ; kursori em. merkkiin CALL DELAY1 MOVLW a'2' CALL LCDPUTCHAR ; näytetään merkki ADCH2A MOVLW b'01010001' ; muunnosaika Fosc/8 '01' kanava '010' start '101' MOVWF ADCON0 ; käynnistetään muunnos kanavalta 2 CALL MUUNNOS ; AD muunnos aliohjelma BTFSS TULO,NAPPI7 ; Ohita seuraava jos nappia 7 ei paineta GOTO ADTEST ; Paluu kanava valikkoon GOTO ADCH2A ;------------------------------------------------------------------------------------------------------- ; AD kanavan 3 testaus. Kytke tuloon 10 V ja säädä trimmerillä lukema 10,00. ;------------------------------------------------------------------------------------------------------- ADCH3 MOVLW LCD_LINE1+06 ; LCD näytön rivin 1 ensimmäisen merkin osoite +6 CALL LCDSDDA ; kursori em. merkkiin CALL DELAY1 MOVLW a'3' CALL LCDPUTCHAR ; näytetään merkki ADCH3A MOVLW b'01011001' ; muunnosaika Fosc/8 '01' kanava '011' start '101' MOVWF ADCON0 ; käynnistetään muunnos kanavalta 3 CALL MUUNNOS ; AD muunnos aliohjelma BTFSS TULO,NAPPI7 ; Ohita seuraava jos nappia 7 ei paineta GOTO ADTEST ; Paluu kanava valikkoon GOTO ADCH3A ;------------------------------------------------------------------------------------------------------- ; AD kanavan 4 testaus. Kytke tuloon 10 V ja säädä trimmerillä lukema 10,00. ;------------------------------------------------------------------------------------------------------- ADCH4 MOVLW LCD_LINE1+06 ; LCD näytön rivin 1 ensimmäisen merkin osoite +6 CALL LCDSDDA ; kursori em. merkkiin CALL DELAY1 MOVLW a'4' CALL LCDPUTCHAR ; näytetään merkki ADCH4A MOVLW b'01100001' ; muunnosaika Fosc/8 '01' kanava '100' start '101' MOVWF ADCON0 ; käynnistetään muunnos kanavalta 4 CALL MUUNNOS ; AD muunnos aliohjelma BTFSS TULO,NAPPI7 ; Ohita seuraava jos nappia 7 ei paineta GOTO ADTEST ; Paluu kanava valikkoon GOTO ADCH4A ;======================================================================================================= ; JÄNNITE MITTAUS 4:LLÄ KANAVALLA. 0 , 1 , 2 , 3 ;------------------------------------------------------------------------------------------------------- AD4M CALL LCDCLEAR ; Tyhjennetään näyttö AD4MITT MOVLW b'01000001' ; muunnosaika Fosc/8 '01' kanava '000' start '101' MOVWF ADCON0 ; käynnistetään muunnos kanavalta 0 CALL DELAY05 ; odotellaan 500us. BSF ADCON0,GO ; käynnistetään muunnos CALL DELAY05 ; odotellaan 500us. BSF STATUS,RP0 MOVFW ADRESL ; muunnoksen alaosa tulos siirretään W rekisteriin BCF STATUS,RP0 MOVWF TMP3 ; W rekisteristä TMP0 rekisteriin MOVFW ADRESH ; yläosa tulos siirretään W rekisteriin MOVWF TMP2 ; W rekisteristä TMP1 rekisteriin CALL B4_BCD ; suoritetaan binääri BCD muunnos. MOVLW LCD_LINE0+01 ; LCD näytön rivin 1 ensimmäisen merkin osoite +1 CALL LCDSDDA ; kursori em. merkkiin MOVLW D'50' CALL X_DELAY1 ; 50ms odotus. CALL NAYTATULOS ; näytetään lukema MOVLW LCD_LINE0+06 ; LCD näytön rivin 1 ensimmäisen merkin osoite +6 CALL LCDSDDA ; kursori em. merkkiin MOVLW a'V' CALL LCDPUTCHAR ; näytetään merkki MOVLW b'01001001' ; muunnosaika Fosc/32 '10' kanava '001' start '101' MOVWF ADCON0 ; käynnistetään muunnos kanavalta 1 CALL DELAY05 ; odotellaan 500us. BSF ADCON0,GO ; käynnistetään muunnos CALL DELAY05 ; odotellaan 500us. BSF STATUS,RP0 MOVFW ADRESL ; muunnoksen alaosa tulos siirretään W rekisteriin BCF STATUS,RP0 MOVWF TMP3 ; W rekisteristä TMP0 rekisteriin MOVFW ADRESH ; yläosa tulos siirretään W rekisteriin MOVWF TMP2 ; W rekisteristä TMP1 rekisteriin CALL B4_BCD ; suoritetaan binääri BCD muunnos. MOVLW LCD_LINE0+09 ; LCD näytön rivin 1 ensimmäisen merkin osoite +9 CALL LCDSDDA ; kursori em. merkkiin MOVLW D'50' CALL X_DELAY1 ; 50ms odotus. CALL NAYTATULOS ; näytetään lukema MOVLW LCD_LINE0+0E ; LCD näytön rivin 1 ensimmäisen merkin osoite +14 CALL LCDSDDA ; kursori em. merkkiin MOVLW a'V' CALL LCDPUTCHAR ; näytetään merkki MOVLW b'01010001' ; muunnosaika Fosc/8 '01' kanava '010' start '101' MOVWF ADCON0 ; käynnistetään muunnos kanavalta 2 CALL DELAY05 ; odotellaan 500us. BSF ADCON0,GO ; käynnistetään muunnos CALL DELAY05 ; odotellaan 500us. BSF STATUS,RP0 MOVFW ADRESL ; muunnoksen alaosa tulos siirretään W rekisteriin BCF STATUS,RP0 MOVWF TMP3 ; W rekisteristä TMP0 rekisteriin MOVFW ADRESH ; yläosa tulos siirretään W rekisteriin MOVWF TMP2 ; W rekisteristä TMP1 rekisteriin CALL B4_BCD ; suoritetaan binääri BCD muunnos. MOVLW LCD_LINE1+01 ; LCD näytön rivin 1 ensimmäisen merkin osoite +1 CALL LCDSDDA ; kursori em. merkkiin MOVLW D'50' CALL X_DELAY1 ; 50ms odotus. CALL NAYTATULOS ; näytetään lukema MOVLW LCD_LINE1+06 ; LCD näytön rivin 1 ensimmäisen merkin osoite +6 CALL LCDSDDA ; kursori em. merkkiin MOVLW a'V' CALL LCDPUTCHAR ; näytetään merkki MOVLW b'01100001' ; muunnosaika Fosc/8 '01' kanava '011' start '101' MOVWF ADCON0 ; käynnistetään muunnos kanavalta 3 CALL DELAY05 ; odotellaan 500us. BSF ADCON0,GO ; käynnistetään muunnos CALL DELAY05 ; odotellaan 500us. BSF STATUS,RP0 MOVFW ADRESL ; muunnoksen alaosa tulos siirretään W rekisteriin BCF STATUS,RP0 MOVWF TMP3 ; W rekisteristä TMP0 rekisteriin MOVFW ADRESH ; yläosa tulos siirretään W rekisteriin MOVWF TMP2 ; W rekisteristä TMP1 rekisteriin CALL B4_BCD ; suoritetaan binääri BCD muunnos. MOVLW LCD_LINE1+09 ; LCD näytön rivin 1 ensimmäisen merkin osoite +9 CALL LCDSDDA ; kursori em. merkkiin MOVLW D'50' CALL X_DELAY1 ; 50ms odotus. CALL NAYTATULOS ; näytetään lukema MOVLW LCD_LINE1+0E ; LCD näytön rivin 1 ensimmäisen merkin osoite +14 CALL LCDSDDA ; kursori em. merkkiin MOVLW a'V' CALL LCDPUTCHAR ; näytetään merkki BTFSC TULO,NAPPI7 ; Ohita seuraava jos nappia 7 painetaan GOTO AD4MITT MOVLW LCD_LINE0 ; LCD näytön rivin 0 ensimmäisen merkin osoite ja CALL LCDSDDA ; kursori ensimmäisen rivin ensimmäiseen merkkiin MOVLW a'T' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'E' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'S' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'T' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'A' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'U' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'S' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'V' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'A' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'L' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'I' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'N' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'N' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'A' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'T' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki GOTO ADTEST ; Paluu kanava valikkoon ;======================================================================================================= ; Näppäimistömatriisin testaus. ;------------------------------------------------------------------------------------------------------- ; Näppäimistömatsiisi on kytketty samaan porttiin kun ohjainpiirilevyllä olevat painikkeet. ; Ohjainpiirilevyllä olevia näppäimiä ei ole tarkoituksenmukaista käyttää silloin kun erillinen ; näppäimistö on kytkettynä. Käytetään vain tässä testauksen ajan. Ohjainpiirilevyllä olevat painikkeet ; eivät häiritse erillisen näppäimistön toimintaa, kunhan ei niitä paineta. ; Tässä testauksessa näytölle tulee ainoastaan painettua näppäintä vastaava merkki. ; Testauksesta pääsee takaisin valikkoon painamalla samanaikaisesti "C" ja "0" painikkeita. ; Matriisilevyn liittimet kun katsotaan näppäinten puolelta liitin alareunassa E,F,G,H,J,K,L,M ja ; seuraava kytkentä. ; Yhteinen Näppäimet ; liitin E,0 F,1 G,2 H,3 ; J 4 1, 2, 3, F ; K 5 4, 5, 6, E ; L 6 7, 8, 9, D ; M 7 A, 0, B, C ; ; Näppäinkoodit ; 1 = 11 = 0001 0001 ; 2 = 12 = 0001 0010 ; 3 = 14 = 0001 0100 ; F = 18 = 0001 1000 ; 4 = 21 = 0010 0001 ; 5 = 22 = 0010 0010 ; 6 = 24 = 0010 0100 ; E = 28 = 0010 1000 ; 7 = 41 = 0100 0001 ; 8 = 42 = 0100 0010 ; 9 = 44 = 0100 0100 ; D = 48 = 0100 1000 ; A = 81 = 1000 0001 ; 0 = 82 = 1000 0010 ; B = 84 = 1000 0100 ; C = 88 = 1000 1000 ; ; Saman testauksen voisi toteuttaa lyhyemmälläkin ohjelman osalla. ;------------------------------------------------------------------------------------------------------- KEYBTEST CALL LCDCLEAR ; Tyhjennetään näyttö ; Kirjoitellaan aluksi näytölle tekstiä mitä ollaan tekemässä. MOVLW LCD_LINE0 ; LCD näytön rivin 0 ensimmäisen merkin osoite ja CALL LCDSDDA ; kursori ensimmäisen rivin ensimmäiseen merkkiin MOVLW a'K' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'E' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'Y' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'B' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'O' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'A' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'R' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'D' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'T' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'E' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'S' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'T' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki MOVLW LCD_LINE1 ; LCD näytön rivin 1 ensimmäisen merkin osoite ja CALL LCDSDDA ; kursori ensimmäisen rivin ensimmäiseen merkkiin MOVLW a'P' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'A' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'I' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'N' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'I' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'K' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'E' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'P' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'A' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'I' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'N' CALL LCDPUTCHAR ; näytetään merkki MOVLW a'.' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki ;------- asetetaan portti näppäimistön käyttöön BSF STATUS,RP0 ; Asetellaan Bank1:ssä (STATUS rekisterin bitti RP0 = 1) MOVLW b'00001111' ; alaosa B portista tuloksi ja yläosa lähdöksi MOVWF TRISB BCF STATUS,RP0 ; palataan Bank0:aan (STATUS rekisterin bitti RP0 = 0) MOVLW b'11110000' ; asetetaan portin B yläosan bitit 1111 MOVWF TULO KEYBT1 ; aktivoidaan ensimmäinen näppäinrivi käyttöön BCF TULO,NAPPI4 ; portin B lähtö 4 alas ;------- BTFSC TULO,NAPPI0 ; Ohita seuraava jos nappia 1 painetaan GOTO KEY2 MOVLW LCD_LINE1+0D ; LCD näytön rivin 1 ensimmäisen merkin osoite ja CALL LCDSDDA ; kursori ensimmäisen rivin ensimmäiseen merkkiin MOVLW a'1' CALL LCDPUTCHAR ; näytetään merkki KEY1L BTFSS TULO,NAPPI0 ; Ohita seuraava jos nappia 1 ei paineta GOTO KEY1L MOVLW LCD_LINE1+0D ; LCD näytön rivin 1 ensimmäisen merkin osoite ja CALL LCDSDDA ; kursori ensimmäisen rivin ensimmäiseen merkkiin MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki ;------- KEY2 BTFSC TULO,NAPPI1 ; Ohita seuraava jos nappia 2 painetaan GOTO KEY3 MOVLW LCD_LINE1+0D ; LCD näytön rivin 1 ensimmäisen merkin osoite ja CALL LCDSDDA ; kursori ensimmäisen rivin ensimmäiseen merkkiin MOVLW a'2' CALL LCDPUTCHAR ; näytetään merkki KEY2L BTFSS TULO,NAPPI1 ; Ohita seuraava jos nappia 2 ei paineta GOTO KEY2L MOVLW LCD_LINE1+0D ; LCD näytön rivin 1 ensimmäisen merkin osoite ja CALL LCDSDDA ; kursori ensimmäisen rivin ensimmäiseen merkkiin MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki ;------- KEY3 BTFSC TULO,NAPPI2 ; Ohita seuraava jos nappia 3 painetaan GOTO KEYF MOVLW LCD_LINE1+0D ; LCD näytön rivin 1 ensimmäisen merkin osoite ja CALL LCDSDDA ; kursori ensimmäisen rivin ensimmäiseen merkkiin MOVLW a'3' CALL LCDPUTCHAR ; näytetään merkki KEY3L BTFSS TULO,NAPPI2 ; Ohita seuraava jos nappia 3 ei paineta GOTO KEY3L MOVLW LCD_LINE1+0D ; LCD näytön rivin 1 ensimmäisen merkin osoite ja CALL LCDSDDA ; kursori ensimmäisen rivin ensimmäiseen merkkiin MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki ;------- KEYF BTFSC TULO,NAPPI3 ; Ohita seuraava jos nappia F painetaan GOTO KEY4 MOVLW LCD_LINE1+0D ; LCD näytön rivin 1 ensimmäisen merkin osoite ja CALL LCDSDDA ; kursori ensimmäisen rivin ensimmäiseen merkkiin MOVLW a'F' CALL LCDPUTCHAR ; näytetään merkki KEYFL BTFSS TULO,NAPPI3 ; Ohita seuraava jos nappia F ei paineta GOTO KEYFL MOVLW LCD_LINE1+0D ; LCD näytön rivin 1 ensimmäisen merkin osoite ja CALL LCDSDDA ; kursori ensimmäisen rivin ensimmäiseen merkkiin MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki ;------- KEY4 ; palautetaan ensimmäinen rivi BSF TULO,NAPPI4 ; portin B lähtö 4 ylös ; aktivoidaan toinen rivi BCF TULO,NAPPI5 ; portin B lähtö 5 alas ;------- BTFSC TULO,NAPPI0 ; Ohita seuraava jos nappia 4 painetaan GOTO KEY5 MOVLW LCD_LINE1+0D ; LCD näytön rivin 1 ensimmäisen merkin osoite ja CALL LCDSDDA ; kursori ensimmäisen rivin ensimmäiseen merkkiin MOVLW a'4' CALL LCDPUTCHAR ; näytetään merkki KEY4L BTFSS TULO,NAPPI0 ; Ohita seuraava jos nappia 4 ei paineta GOTO KEY4L MOVLW LCD_LINE1+0D ; LCD näytön rivin 1 ensimmäisen merkin osoite ja CALL LCDSDDA ; kursori ensimmäisen rivin ensimmäiseen merkkiin MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki ;------- KEY5 BTFSC TULO,NAPPI1 ; Ohita seuraava jos nappia 5 painetaan GOTO KEY6 MOVLW LCD_LINE1+0D ; LCD näytön rivin 1 ensimmäisen merkin osoite ja CALL LCDSDDA ; kursori ensimmäisen rivin ensimmäiseen merkkiin MOVLW a'5' CALL LCDPUTCHAR ; näytetään merkki KEY5L BTFSS TULO,NAPPI1 ; Ohita seuraava jos nappia 5 ei paineta GOTO KEY5L MOVLW LCD_LINE1+0D ; LCD näytön rivin 1 ensimmäisen merkin osoite ja CALL LCDSDDA ; kursori ensimmäisen rivin ensimmäiseen merkkiin MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki ;------- KEY6 BTFSC TULO,NAPPI2 ; Ohita seuraava jos nappia 6 painetaan GOTO KEYE MOVLW LCD_LINE1+0D ; LCD näytön rivin 1 ensimmäisen merkin osoite ja CALL LCDSDDA ; kursori ensimmäisen rivin ensimmäiseen merkkiin MOVLW a'6' CALL LCDPUTCHAR ; näytetään merkki KEY6L BTFSS TULO,NAPPI2 ; Ohita seuraava jos nappia 6 ei paineta GOTO KEY6L MOVLW LCD_LINE1+0D ; LCD näytön rivin 1 ensimmäisen merkin osoite ja CALL LCDSDDA ; kursori ensimmäisen rivin ensimmäiseen merkkiin MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki ;------- KEYE BTFSC TULO,NAPPI3 ; Ohita seuraava jos nappia E painetaan GOTO KEY7 MOVLW LCD_LINE1+0D ; LCD näytön rivin 1 ensimmäisen merkin osoite ja CALL LCDSDDA ; kursori ensimmäisen rivin ensimmäiseen merkkiin MOVLW a'E' CALL LCDPUTCHAR ; näytetään merkki KEYEL BTFSS TULO,NAPPI3 ; Ohita seuraava jos nappia E ei paineta GOTO KEYEL MOVLW LCD_LINE1+0D ; LCD näytön rivin 1 ensimmäisen merkin osoite ja CALL LCDSDDA ; kursori ensimmäisen rivin ensimmäiseen merkkiin MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki ;------- KEY7 ; palautetaan toinen rivi BSF TULO,NAPPI5 ; portin B lähtö 5 ylös ; aktivoidaan kolmas rivi BCF TULO,NAPPI6 ; portin B lähtö 6 alas ;------- BTFSC TULO,NAPPI0 ; Ohita seuraava jos nappia 7 painetaan GOTO KEY8 MOVLW LCD_LINE1+0D ; LCD näytön rivin 1 ensimmäisen merkin osoite ja CALL LCDSDDA ; kursori ensimmäisen rivin ensimmäiseen merkkiin MOVLW a'7' CALL LCDPUTCHAR ; näytetään merkki KEY7L BTFSS TULO,NAPPI0 ; Ohita seuraava jos nappia 7 ei paineta GOTO KEY7L MOVLW LCD_LINE1+0D ; LCD näytön rivin 1 ensimmäisen merkin osoite ja CALL LCDSDDA ; kursori ensimmäisen rivin ensimmäiseen merkkiin MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki ;------- KEY8 BTFSC TULO,NAPPI1 ; Ohita seuraava jos nappia 8 painetaan GOTO KEY9 MOVLW LCD_LINE1+0D ; LCD näytön rivin 1 ensimmäisen merkin osoite ja CALL LCDSDDA ; kursori ensimmäisen rivin ensimmäiseen merkkiin MOVLW a'8' CALL LCDPUTCHAR ; näytetään merkki KEY8L BTFSS TULO,NAPPI1 ; Ohita seuraava jos nappia 8 ei paineta GOTO KEY8L MOVLW LCD_LINE1+0D ; LCD näytön rivin 1 ensimmäisen merkin osoite ja CALL LCDSDDA ; kursori ensimmäisen rivin ensimmäiseen merkkiin MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki ;------- KEY9 BTFSC TULO,NAPPI2 ; Ohita seuraava jos nappia 9 painetaan GOTO KEYD MOVLW LCD_LINE1+0D ; LCD näytön rivin 1 ensimmäisen merkin osoite ja CALL LCDSDDA ; kursori ensimmäisen rivin ensimmäiseen merkkiin MOVLW a'9' CALL LCDPUTCHAR ; näytetään merkki KEY9L BTFSS TULO,NAPPI2 ; Ohita seuraava jos nappia 9 ei paineta GOTO KEY9L MOVLW LCD_LINE1+0D ; LCD näytön rivin 1 ensimmäisen merkin osoite ja CALL LCDSDDA ; kursori ensimmäisen rivin ensimmäiseen merkkiin MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki ;------- KEYD BTFSC TULO,NAPPI3 ; Ohita seuraava jos nappia D painetaan GOTO KEYA MOVLW LCD_LINE1+0D ; LCD näytön rivin 1 ensimmäisen merkin osoite ja CALL LCDSDDA ; kursori ensimmäisen rivin ensimmäiseen merkkiin MOVLW a'D' CALL LCDPUTCHAR ; näytetään merkki KEYDL BTFSS TULO,NAPPI3 ; Ohita seuraava jos nappia D ei paineta GOTO KEYDL MOVLW LCD_LINE1+0D ; LCD näytön rivin 1 ensimmäisen merkin osoite ja CALL LCDSDDA ; kursori ensimmäisen rivin ensimmäiseen merkkiin MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki ;------- KEYA ; palautetaan kolmas rivi BSF TULO,NAPPI6 ; portin B lähtö 6 ylös ; aktivoidaan neljäs rivi BCF TULO,NAPPI7 ; portin B lähtö 7 alas ;------- BTFSC TULO,NAPPI0 ; Ohita seuraava jos nappia A painetaan GOTO KEY0 MOVLW LCD_LINE1+0D ; LCD näytön rivin 1 ensimmäisen merkin osoite ja CALL LCDSDDA ; kursori ensimmäisen rivin ensimmäiseen merkkiin MOVLW a'A' CALL LCDPUTCHAR ; näytetään merkki KEYAL BTFSS TULO,NAPPI0 ; Ohita seuraava jos nappia A ei paineta GOTO KEYAL MOVLW LCD_LINE1+0D ; LCD näytön rivin 1 ensimmäisen merkin osoite ja CALL LCDSDDA ; kursori ensimmäisen rivin ensimmäiseen merkkiin MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki ;------- KEY0 BTFSC TULO,NAPPI1 ; Ohita seuraava jos nappia 0 painetaan GOTO KEYB MOVLW LCD_LINE1+0D ; LCD näytön rivin 1 ensimmäisen merkin osoite ja CALL LCDSDDA ; kursori ensimmäisen rivin ensimmäiseen merkkiin MOVLW a'0' CALL LCDPUTCHAR ; näytetään merkki KEY0L BTFSS TULO,NAPPI1 ; Ohita seuraava jos nappia 0 ei paineta GOTO KEY0L MOVLW LCD_LINE1+0D ; LCD näytön rivin 1 ensimmäisen merkin osoite ja CALL LCDSDDA ; kursori ensimmäisen rivin ensimmäiseen merkkiin MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki ;------- KEYB BTFSC TULO,NAPPI2 ; Ohita seuraava jos nappia B painetaan GOTO KEYC MOVLW LCD_LINE1+0D ; LCD näytön rivin 1 ensimmäisen merkin osoite ja CALL LCDSDDA ; kursori ensimmäisen rivin ensimmäiseen merkkiin MOVLW a'B' CALL LCDPUTCHAR ; näytetään merkki KEYBL BTFSS TULO,NAPPI2 ; Ohita seuraava jos nappia B ei paineta GOTO KEYBL MOVLW LCD_LINE1+0D ; LCD näytön rivin 1 ensimmäisen merkin osoite ja CALL LCDSDDA ; kursori ensimmäisen rivin ensimmäiseen merkkiin MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki ;------- KEYC BTFSC TULO,NAPPI3 ; Ohita seuraava jos nappia C painetaan GOTO KEY1 MOVLW LCD_LINE1+0D ; LCD näytön rivin 1 ensimmäisen merkin osoite ja CALL LCDSDDA ; kursori ensimmäisen rivin ensimmäiseen merkkiin MOVLW a'C' CALL LCDPUTCHAR ; näytetään merkki KEYCL BTFSS TULO,NAPPI1 ; Ohita seuraava jos nappia 0 ei paineta GOTO TAKVALIK ; testauksen lopetustoimet BTFSS TULO,NAPPI3 ; Ohita seuraava jos nappia C ei paineta GOTO KEYCL MOVLW LCD_LINE1+0D ; LCD näytön rivin 1 ensimmäisen merkin osoite ja CALL LCDSDDA ; kursori ensimmäisen rivin ensimmäiseen merkkiin MOVLW a' ' CALL LCDPUTCHAR ; näytetään merkki ;------- KEY1 ; palautetaan neljäs rivi BSF TULO,NAPPI7 ; portin B lähtö 7 ylös GOTO KEYBT1 TAKVALIK ; portti B palautetaan ohjainpiirin näppäinten käyttöön. BSF STATUS,RP0 ; Asetellaan Bank1:ssä (STATUS rekisterin bitti RP0 = 1) MOVLW b'11111111' ; B portti kokonaan tuloksi MOVWF TRISB BCF STATUS,RP0 ; palataan Bank0:aan (STATUS rekisterin bitti RP0 = 0) MOVLW b'00000000' ; asetetaan portin B bitit 00000000 GOTO VALIKKO ; palataan päävalikkoon. ;======================================================================================================= ; Tästä jatketaan lisäämällä uusi ohjelman osa. ;------------------------------------------------------------------------------------------------------- OMA ; Nämä tekstit voi poistaa ja kirjoittaa tilalle oman ohjelmansa. ; Tila omalle koodille, muutetaan GOTO TEST1 teksti, GOTO OMA tekstiksi, sen jälkeen kun oma ; ohjelma on valmis testiin. Käännetään koko systeemi MPLAB ohjelmalla, ja testataan aluksi ; MPLAB ohjelman DEBUG osassa, jos toimii niinkuin pitäisi, niin siirretään piiriin ja ; taas kokeillaan toimiiko siinäkin. Jos kaikki toimii niinkuin suunniteltiin. Niin voi ; onnitella itseään ohjelma on valmis. GOTO OMA ;======================================================================================================= END ; Ohjelmarivien loppu