; PROGRAM TIL STYRING AF PULSER TIL PI DETEKTOR ; REV. 4.0 ; REV. 13/06-98 ; AF MARK PAULS ; ; Ved opstart allerførste gang holdes RA4 (port A.4) høj og ; derved intialiseres rec, puls, wait tiden i EE prommen. ; Hvis RA4 er lav under start aflæses EE prommen istedet. ; Bemærk at RA4 har dobbelt funktion idet den ved høj (efter ; start kan bruges (via RA0,RA1) til justering af antal pulser ; HUSK at sætte lav igen inden næste ON/OFF. ; ; ; ; LIST P=16C84, F=INHX8M include "p16c84.inc" ; ; uP PIC16C84 include modul ver. 1.00 ;----------------- DIV ----------------- ORG 0 ;Dummy origin goto INIT; ;hop til INIT ;-------------Constanter-------------- d1 equ .20 ; pulstid i us d2 equ .10 ; (wait before rec.) vent på respons i us d3 equ .5 ; modtag i ms d4 equ .40 ; (ms wait before next) vent ms inden n‘ste puls delay equ .6; ; delay til 1 ms timer loop equ 0Ch ; RAM 0C xus equ 10h ; RAM 10 xms equ 11h ; RAM 11 puls_time equ 15h ; RAM 15 w_b_r equ 16h ; RAM 16 rec_time equ 17h ; RAM 17 w_b_n equ 18h ; RAM 18 ; RAM 11 ;benyttes af x ms timer ; RAM 12,13 ;benyttes af us timer ; RAM 14 ;8 flag, F0..F7 ; RAM 15 ;puls_time ; RAM 16 ;w_b_r ; RAM 17 ;rec_time ; RAM 18 ;w_b_n ; ; EEADR 00 ;s‘ttes 0 ved opstart ;---------------- TIMER ------------------ wait_1us; ; ca 1us wait nop; return wait_xus ;vent x mikrosek. J4 call wait_1us decfsz xus,1 ;T‘l xus-1 goto J4 return wait_1ms; ;1 ms timer movlw .5 ;antal gennemloeb for 1 ms movwf 13 ;flyt w til RAM 13 J2 movlw delay; ;w = delay (korrigering) movwf 12 ;flyt w til RAM 12 J1 decfsz 12,1 ;T‘l RAM12-1 eller fors‘t goto J1 ;repeat decfsz 13 ;T‘l RAM13-1 eller slut goto J2 ;repeat return wait_xms; ;Vent x millisek J3 call wait_1ms decfsz xms,1 ;T‘l xms-1 goto J3 return ;----------- EEPROM MODUL TIL PIC16C84 ;Rev 1.00 ;d.27/07-95 ; note: use timer wadr equ 2Fh ; adresse i RAM 2F value equ 2Eh ; Data i RAM 2E WR_EEPROM ; skriv EEPROM (data i RAM 2E+adr i RAM 2E) movf wadr,W ; w=adr movwf EEADR ; EEADR=w movf value,W ; w=data movwf EEDATA ; EEDATA=w ; --- write sequnce bsf STATUS,RP0 ; EEPROM write enable bcf INTCON,GIE ; disable interupts movlw 0x55 ; w=55h movwf EECON2 ; EECON2=w movlw 0xAA ; w=AAh movwf EECON2 ; EECON2=w bsf EECON1,WR ; EECON1=write movlw .100 ;load tid skrivning movwf xms ;flyt w til xms call wait_xms ;vent i ms ; --- end ;return RD_EEPROM ; adr.skal v‘re i RAM 2F movf wadr,W ; data afleveres i RAM 2E movwf EEADR ; EEADR=w (adr) bsf STATUS,RP0 ; bank 1 bsf EECON1,RD ; set RD bit (slukker selv) bcf STATUS,RP0 ; bank 0 movf EEDATA,W ; w=data movwf value ; data=w ; --- end return ;-------------- END EEPROM MODUL ;------------ DATA ÆNDRINGER ----------- Update btfsc 5,4 ;tjek først bit 4 goto pulsjust ;juster antal pulser btfsc 5,0 ;Hvis bit 0 er sat incf rec_time,1 ;"step up" rec. time + 1 btfsc 5,1 ;Hvis bit 1 er sat decfsz rec_time,1 ;"step down" rec. time - 1 btfsc 5,2 ;Hvis bit 2 er sat incf w_b_r,1 ;"step up" wait before rec + 1 btfsc 5,3 ;Hvis bit 3 er sat decfsz w_b_r,1 ;"step down" wait before - 1 goto slut ;ellers slut ;hvis 5.4 pulsjust btfsc 5,0 ;Hvis bit 0 og 4 er sat incf puls_time,1 ;"step up" puls + 1 btfsc 5,1 ;Hvis bit 1 og 4 er sat decfsz puls_time,1 ;"step down" puls - 1 GOTO slut ;hop til slut slut ;opsæt adresse + data til EEPROM ændring ;gem antal pulser movf puls_time,W ;flyt til W movwf value ;value = rec_time movwf wadr ;set adresse movlw 01h ;til 01 hex i EE CALL WR_EEPROM ;skriv i EE ;gem ventetid før modtagning movf w_b_r,W ;flyt til W movwf value ;value = rec_time movwf wadr ;set adresse movlw 02h ;til 02 hex i EE CALL WR_EEPROM ;skriv i EE ;gem modtager tid movf rec_time,W ;flyt til W movwf value ;value = rec_time movwf wadr ;set adresse movlw 03h ;til 03 hex i EE CALL WR_EEPROM ;skriv i EE ;timer start movlw 04h movwf loop ;sæt 2 i RAM 0C T_1 nop ;VENT 1 sek movlw .255; ;1/4 sek load movwf xms ;flyt w til xms call wait_xms ;vent i w_b_n ms decfsz loop,1 ;loop goto T_1 ;end return DEFAULT movlw d1 ; w= delay 1 movwf puls_time ; Puls tid = w movwf d2 ; w= delay 2 movwf w_b_r ; wait before receive movwf value ; data (EE) = w movlw d3 ; w= delay 3 movwf rec_time ; record time movwf value ; data (EE) = w movlw d4 ; w= delay 4 movwf w_b_n ; ventetid (slettes sidenhen) CALL Update ; skriv til EE goto MAIN ;--------------INIT------------------- INIT ;output init movlw B'11111111' ;set w= 0D movwf PORTB ;flyt w til port B movlw B'00000000' ;set w= 00 tris PORTB ;set alle I/O retning til ud ;input init movlw B'11111' ;set bit 0..4 til input tris PORTA ;sæt port A ;init RAM/EEPROM btfsc PORTA,4 ;Hvis port A bit 0 læs default goto DEFAULT movlw 01h; ;w=01h movwf wadr ;adr=w call RD_EEPROM ;Læs EE movf value,W ;w=data fra EEPROM movwf puls_time ;puls=w movlw 02h; ;w=02h movwf wadr ;adr=w call RD_EEPROM ;Læs EE movf value,W ;w=data fra EEPROM movwf w_b_r ;wait before receive movlw 03h; ;w=03h movwf wadr ;adr=w call RD_EEPROM ;Læs EE movf value,W ;w=data fra EEPROM movwf rec_time ;record time movlw d4 ;w=d4 (slettes sidenhen) movwf w_b_n ;ventetid (slettes sidenhen) goto MAIN; ;HOP TIL HOVEDLØKKE ;---------------- PULS ------------------- puls bcf PORTB,0 ;s‘t bit 3 = 0 (output) movf puls_time,0 ;flyt puls_time til w movwf xus ;flyt tid til RAM11 call wait_xus ;vent i x us bsf PORTB,0 return ;--------------- MODTAG ------------------ Receiver bcf PORTB,3 ;s‘t bit 0 = 0 (modtager åbner) movf rec_time,0 ;flyt tid i us til w movwf xus ;flyt tid i RAM16 call wait_xus ;vent i x us bsf PORTB,3 ;luk modtager return ;-----------------MAIN-------------- MAIN ; Puls call puls ;kald puls rutine ; vent movf w_b_r,W ;load w med ventetid movwf xus ;flyt w til xus call wait_xus ;vent i w_b_r us ; modtag call Receiver ;åben modtager ; vent movf w_b_n,W ;load tid til næste puls movwf xms ;flyt w til xms call wait_xms ;vent i w_b_n ms ; aflæs input btfsc 5,0 ;hvis up aktiv call Update ;kald update btfsc 5,1 ;hvis down aktiv call Update ;kald update btfsc 5,2 ;hvis up aktiv call Update ;kald update btfsc 5,3 ;hvis down aktiv call Update ;kald update ; repeat goto MAIN end ;SLUT