;PIC16F84 synteohjelman perusversio ;lataa yhden taajuuden ;MB1501 tai MB1502 ;70 cm yksikanava RX flo=fs+70MHz ;fo=12.8 MHz ;uusi lataus resetill„ ; ________________ ; enable out -| RA2 RA1 |- data out ; -| RA3 RA0 |- clk out ; -| RA4/TOCKIosc1|- RC ; 5V -| MCLR osc2|- ; gnd-| VDD |- 5V ; -| RB0 Rb7 |- ; -| RB1 RB6 |- ; -| RB2 RB5 |- ; -| RB3 RB4 |- ; ---------------- LIST P=16f84, R=DEC ;prosessori, oletuskantaluku 10 include ;MPASM lukee liitetiedoston __CONFIG _RC_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF ; __CONFIG _CP_OFF & _WDT_OFF & _RC_OSC ;huom. isot kirjaimet ;valikkokoodia ei k„ytetty ;status registers: pc equ 02 ;program counter porta equ 05 ;I/O register portb equ 06 ;I/O register status equ 03 ;status register optreg equ 81h trisa equ 85h ;port "a" direction register trisb equ 86h ;port "b" direction register ;rekisterit, joihin talletetaan ja joista luetaan ulos tarvittavat jakoluvut Ra equ 13 ;ref.jakoluku, alap„„ Ry equ 14 ;ref.jakoluku, yl„p„„ A equ 15 Na equ 16 Ny equ 17 apu equ 18 ;apurekisteri siirto equ 19 ;toinen apurekisteri, databit k„ytt„„ viive1 equ 20 ;viiverekisteri N_alin set 10 ;viiverekisterin asetus ;pinnit clk set 0 ;RA0 dat set 1 ;RA1 en set 2 ;RA2 ;setup org 150 ;portit clrw tris porta ;outputteja movlw b'11111111' ;inputteja tris portb ;pullups portB:hen ;huom. t„ss„ versiossa B-portti ei ole k„yt”ss„ clrw option ;************************************************************************ ;asetetaan jakoluvut ;fv=504.750MHz, fo=12.8MHz, fd=25kHz movlw 2 movwf Ry ;Ry=2 clrw movwf Ra ;Ra=0 clrw movwf Ny ;Ny=0 movlw 157 movwf Na ;Na=157 movlw 94 movwf A ;A=24 ;************************************************************************** ;viive varmuuden vuoksi nop nop nop nop nop nop ;ladataan synte ;k„ytet„„n apurekisteri„ apu, ja siirret„„n aina siirrett„v„ bitti MSB:ksi (7) ;sitten subi databit lataa bitin A-portin dataoutputtiin (1) clrw ;nollaa kaikki outputit movwf porta R: movf Ry,0 ;siirret„„n Ry:n sis„lt” apurekisteriin movwf apu call zero ;prescaler 128/129 rlf apu,1 ;alkup.6.bitti msb rlf apu,1 ;alkup.5.bitti msb call databit rlf apu,1 ;alkup.4.bitti msb call databit rlf apu,1 ;alkup.3.bitti msb call databit rlf apu,1 ;alkup.2.bitti msb call databit rlf apu,1 ;alkup.1.bitti msb call databit rlf apu,1 ;alkup.0.bitti msb call databit movf Ra,0 ;siirret„„n Ra:n sis„lt” apurekisteriin movwf apu call databit rlf apu,1 ;alkup.6.bitti msb call databit rlf apu,1 ;alkup.5.bitti msb call databit rlf apu,1 ;alkup.4.bitti msb call databit rlf apu,1 ;alkup.3.bitti msb call databit rlf apu,1 ;alkup.2.bitti msb call databit rlf apu,1 ;alkup.1.bitti msb call databit rlf apu,1 ;alkup.0.bitti msb call databit nop call one ;control bit nop call enable N: movf Ny,0 ;siirret„„n Ny:n sis„lt” apurekisteriin movwf apu rlf apu,1 ;alkup.6.bitti msb rlf apu,1 ;alkup.5.bitti msb rlf apu,1 ;alkup.4.bitti msb rlf apu,1 ;alkup.3.bitti msb rlf apu,1 ;alkup.2.bitti msb call databit rlf apu,1 ;alkup.1.bitti msb call databit rlf apu,1 ;alkup.0.bitti msb call databit movf Na,0 ;siirret„„n Na:n sis„lt” apurekisteriin movwf apu call databit ;bitti 7 rlf apu,1 ;alkup.6.bitti msb call databit rlf apu,1 ;alkup.5.bitti msb call databit rlf apu,1 ;alkup.4.bitti msb call databit rlf apu,1 ;alkup.3.bitti msb call databit rlf apu,1 ;alkup.2.bitti msb call databit rlf apu,1 ;alkup.1.bitti msb call databit rlf apu,1 ;alkup.0.bitti msb call databit A_: movf A,0 ;siirret„„n A:n sis„lt” apurekisteriin movwf apu rlf apu,1 ;alkup.6.bitti msb call databit rlf apu,1 ;alkup.5.bitti msb call databit rlf apu,1 ;alkup.4.bitti msb call databit rlf apu,1 ;alkup.3.bitti msb call databit rlf apu,1 ;alkup.2.bitti msb call databit rlf apu,1 ;alkup.1.bitti msb call databit rlf apu,1 ;alkup.0.bitti msb call databit nop call zero ;control bit nop call enable nop sleep ;pys„htyy lepoasentoon ;outputit j„„v„t alas ;subit databit ;lataa datan RA1:een ja k„ytt„„ kelloa RA0 ylh„„ll„ movf apu,0 ;siirret„„n apu:n sis„lt” toiseen rekisteriin movwf siirto ;haluttu databitti nyt MSB (7) rrf siirto,1 ;siirret„„n databitti paikalle (6) rrf siirto,1 ;siirret„„n databitti paikalle (5) rrf siirto,1 ;siirret„„n databitti paikalle (4) rrf siirto,1 ;siirret„„n databitti paikalle (3) rrf siirto,1 ;siirret„„n databitti paikalle (2) rrf siirto,1 ;siirret„„n databitti paikalle (1) movf siirto,0 ;siirret„„n sis„lt” ty”rekisteriin andlw b'00000010' ;muut bitit nolliksi movwf porta ;siirt„„ output porttiin nop nop bsf porta,clk ;k„ytt„„ kelloa ylh„„ll„ bcf porta,clk return zero bcf porta,dat ;asettaa 0 nop bsf porta,clk ;k„ytt„„ kelloa ylh„„ll„ bcf porta,clk return one bsf porta,dat ;asettaa 1 nop bsf porta,clk ;k„ytt„„ kelloa ylh„„ll„ bcf porta,clk return enable bsf porta,en ;k„ytt„„ enablea ylh„„ll„ bcf porta,en return ;ei k„yt”ss„ delay delay1 movlw N_alin ;luku w-rekisteriin movwf viive1 ;w -> viive1 nop ;perusluupin lis„viiveet nop nop nop decfsz viive1,1 ;dec 1, tulos viive1:een skip on zero goto delay1 return end