please dont rip this site
		;
		;**********************************************************************
		; capcmd.asm	- CAPTURE subroutines for cmd monitor
		;**********************************************************************
		;
		; created   04/03/98 -rlf
        ; modified  04/13/98 -rlf
		;
		;*********************************************************************
		; Capture module interface functions
        ;
        ; The routines included in this file will read the period of a signal
        ; applied to CAP0 or CAP1. Timer3 is the timer resource required by the
        ; capture peripherals. Timer3 can be free running or Timer3 can be setup
        ; to start upon the detection of the first rising edge. For this  
        ; implementation Timer3 starts upon the first rising edge on CAP0 or
        ; CAP1. 
        ;
	cblock
		overflow
	endc
        ;  
		;*********************************************************************
ReadCAP ; This routine uses ReadCAP to measure period on channel n 
		;*********************************************************************
		;
 		; install this command in the CmdMenu lookup table
	CmdPC = $						; save current inline assembly PC value
	org CurCmdMenuAdr				; set assembly PC to addr for new entry
	; CmdMenu table entry
	data	"CAPn\r", CmdPC, "Measure capture channel period\r\n"
	CurCmdMenuAdr = $				; set current CmdMenu addr for next entry
	org CmdPC						; begin cmd code gen at inline address
		;
		; The channel selection is passed in the WREG (it is necessary to 
		;  bring it in from the cmd monitor). It is necessary to pass in the 
		;  channel, then convert the results and wrap the appropriate
		;  text around the answer to be returned to the user.
		; Both the  selected Channel and value is returned.
		;
		call	InitCAPn 		    ; init capture module(s)
		movlw	cmdPrmBuff			; load parameter buffer address
		movwf	FSR1				; into FSR1 
		movfp	INDF1, WREG			; else put cmd value in WREG
        call    ReadCAPn            ; read specified capture channel

        btfsc   ALUSTA,Z            ; check return value
        goto    errout              ; display error message

		; generate output string
		CpyTbl2Out	CapnD			; init beginning of output buffer
        movlw   cmdPrmBuff          ; load original parameter buffer address
        movwf   FSR1                ; into FSR1
        movfp   INDF1, WREG         ; put cmd value in WREG
        andlw   0x0F                ; mask out upper nibble
    	call	Dec2Buf				; convert channel into output buffer
        CpyTbl2Out	Eqtx			; add = 0x text

        movlr   0                   ; select GPR bank
        movfp   overflow,WREG       ; retrieve multiple overflow count
        call    Hex2Buf             ; convert overflow byte
        movfp	PRODH, WREG	    	; get MSB of capture
		call	Hex2Buf				; convert msb of value with no leading 0
        movfp   PRODL,WREG          ; get LSB of capture
     	call	Hex2Buf				; convert lsb of value with no leading 0
        CpyTbl2Out  CapEm           ; 
		return						; return from Cmd

errout  CpyTbl2Out	Err				; add trailing text
        return   

        ; This is the end of the functions executable code
 		;
		; These data statements store constant ascii output strings in program 
		;  memory. They're accessed using the CpyTbl2Out macro.
        ;
CapnD   ; constant string for capture channel
	data "\nCAP", 0
Eqtx    ; constant string for =
    data " Period = 0x", 0
CapEm   ; constant string for capture hex display
	data " hex\n\r", 0
Err     ; constant for error message
    data "Invalid Capture Channel Entered\n\r", 0
        ;
        ;
		;*********************************************************************
ReadCAPn; Read period for capture channel specified in W
		;*********************************************************************
		;
		; This subroutine selects the capture channel, starts a 
		;  measurement cycle then returns - leaving the result in 
        ;  CAPxH and CAPxL registers. It is called while WREG contains  
        ;  channel (1 - 4). 
		;
        movlr   0                   ; select GPR bank
        clrf    overflow,1          ; reset overflow register 
        movlb   1                   ; select SFR bank
        bcf     PIR1,TMR3IF         ; reset Timer3 overflow flag      
  
        movlb   2                   ; select SFR bank
        clrf    TMR3H               ; reset Timer3 MSB
        clrf    TMR3L               ; reset Timer3 LSB
        andlw   0x0F                ; ensure upper bits are masked out

        dcfsnz  WREG,0              ; else, is channel 1 ?
        goto    rdcap1              ; yes, measure capture1 period
        dcfsnz  WREG,0              ; else channel 2 ? 
        goto    rdcap2              ; yes, measure capture2 period
;        dcfsnz  WREG,0              ; else channel 3 ?
;        goto    rdcap3              ; yes, measure capture3 period
;        dcfsnz  WREG,0              ; else channel 4 ?
;        goto    rdcap4              ; measure capture4 period
        bsf     ALUSTA,Z            ; no channel match, set error flag
        return                      ; return with error

; ***************************************************************
; ************** READ CAPTURE CHANNEL 1
rdcap1  movlb   2                   ; select SFR bank
        movfp   CA1H,WREG           ; dummy read to transfer Master OV state
        movfp   CA1L,FSR1           ; dummy read to transfer Master OV state

        movlb   3                   ; select SFR bank
        btfss   TCON2,CA1OVF        ; test for overflow
        goto    startcap1           ; no overflow so start capture
        movlb   2                   ; select SFR bank
        movfp   CA1H,WREG           ; dummy read (MSB)
        movfp   CA1L,FSR1           ; dummy read (LSB)
        movlb   1                   ; select SFR bank
        bcf     PIR1,CA1IF          ; reset capture event flag from overflow
     
startcap1
        movlb   1                   ; select SFR bank
        btfss	PIR1,CA1IF			; test for capture event
		goto	$-1                 ; loop til capture event occurs
        movlb   3                   ; select SFR bank
        bsf     TCON2,TMR3ON        ; start timer3
        movlb   1                   ; select SFR bank
        bcf     PIR1,CA1IF          ; reset capture event flag

        movlb   2                   ; select SFR bank 
        movfp   CA1H,FSR1           ; save off count (MSB)
        movfp   CA1L,WREG           ; save off count (LSB)

        movlb   1                   ; select SFR bank 
        btfss   PIR1,TMR3IF         ; test for overflow
        goto    no_ov1              ; no overflow
        bcf     PIR1,TMR3IF         ; reset timer3 overflow flag
        movlr   0                   ; select GPR bank
        incf    overflow,1          ; increment overflow

no_ov1  btfss	PIR1,CA1IF          ; test for capture event			
		goto	$-6                 ; loop til capture event occurs
        bcf     PIR1,CA1IF          ; reset capture event flag
        movlb   3                   ; select SFR bank
        bcf     TCON2,TMR3ON        ; stop timer3
    
        movlb   2                   ; select SFR bank
        movfp   CA1H,PRODH          ; read capture MSB
        movfp   CA1L,PRODL          ; read capture LSB
      
        subwf   PRODL,1             ; compose LSB
        movpf   FSR1,WREG           ; retrieve MSB first read
        subwfb  PRODH,1             ; compose MSB
        btfss   ALUSTA,C            ; test for borrow (MSB)
        decf    overflow,1          ; borrow occurred so decrement overflow       
        bcf     ALUSTA,Z            ; clear channel error flag     
        return						; return with results in PRODH:L

;***************************************************************
; ************** READ CAPTURE CHANNEL 2
rdcap2  movlb   3                   ; select SFR bank
        movfp   CA2H,WREG           ; dummy read to transfer Master OV state
        movfp   CA2L,FSR1           ; dummy read to transfer Master OV state

        btfss   TCON2,CA2OVF        ; test for overflow
        goto    startcap2           ; no overflow so start capture
        movfp   CA2H,WREG           ; dummy read (MSB)
        movfp   CA2L,FSR1           ; dummy read (LSB)
        movlb   1                   ; select SFR bank
        bcf     PIR1,CA2IF          ; reset capture event flag
                     
startcap2
        movlb   1                   ; select SFR bank
        btfss	PIR1,CA2IF			; test for capture event
		goto	$-1                 ; loop til capture event occurs
        movlb   3                   ; select SFR bank
        bsf     TCON2,TMR3ON        ; start timer3
        movlb   1                   ; select SFR bank
        bcf     PIR1,CA2IF          ; reset capture event flag

        movlb   3
        movfp   CA2H,FSR1           ; save off count (MSB)
        movfp   CA2L,WREG           ; save off count (LSB)

        movlb   1                   ; select SFR bank 
        btfss   PIR1,TMR3IF         ; test for overflow
        goto    no_ov2              ; there was no Timer3 overflow
        bcf     PIR1,TMR3IF         ; reset Timer3 overflow flag
        movlr   0                   ; select GPR bank
        incf    overflow,1          ; increment overflow count

no_ov2  btfss	PIR1,CA2IF          ; test for capture event			
		goto	$-6                 ; loop til capture event occurs
        movlb   3                   ; select SFR bank
        bcf     TCON2,TMR3ON        ; stop timer3
        movlb   1                   ; select SFR bank
        bcf     PIR1,CA2IF          ; reset capture event flag
       
        movlb   3
        movfp   CA2H,PRODH          ; read capture MSB
        movfp   CA2L,PRODL          ; read capture LSB

        subwf   PRODL,1             ; compose LSB
        movpf   FSR1,WREG           ; retrieve MSB first read
        subwfb  PRODH,1             ; compose MSB
        btfss   ALUSTA,C            ; test for borrow (MSB)
        decf    overflow,1          ; borrow occurred so decrement overflow       
        bcf     ALUSTA,Z            ; clear channel error flag     
        return						; return with results in PRODH:L


;***************************************************************
; ************** READ CAPTURE CHANNEL 3
rdcap3 

; no code available at this time

		return						; return with results in ??


;***************************************************************
; ************** READ CAPTURE CHANNEL 4
rdcap4 

; no code available at this time

    	return						; return with results in ??

  	    ;
        ;
		;*********************************************************************
InitCAPn; Initialize the capture peripherals
		;*********************************************************************
		;
		; Instructions:  Set up CAPTURE module. Timer3 is the timer resource
        ; used with time-based captures. 
		; 
        movlb   7                   ; select bank for control register
        bsf     TCON3,CA3ED0        ; set capture3 on rising edge
        bsf     TCON3,CA4ED0        ; set capture4 on rising edge

        movlb   3                   ; select bank for control register
        bsf     TCON1,CA1ED0        ; set capture1 on rising edge
        bsf     TCON1,CA2ED0        ; set capture2 on rising edge
        bcf     TCON1,TMR3CS        ; ensure timer3 increments of internal clock
        bsf     TCON2,PR3           ; enable capture1 vs. period
;        bsf     TCON2,TMR3ON        ; start timer3
 		return						; return from capture initialized

; end of file capcmd.asm ******************************************************




file: /Techref/piclist/andrewspicos/capcmd.htm, 11KB, , updated: 2000/2/17 10:52, local time: 2024/3/28 07:50,
TOP NEW HELP FIND: 
3.238.87.31:LOG IN

 ©2024 These pages are served without commercial sponsorship. (No popup ads, etc...).Bandwidth abuse increases hosting cost forcing sponsorship or shutdown. This server aggressively defends against automated copying for any reason including offline viewing, duplication, etc... Please respect this requirement and DO NOT RIP THIS SITE. Questions?
Please DO link to this page! Digg it! / MAKE!

<A HREF="http://techref.massmind.org/techref/piclist/andrewspicos/capcmd.htm"> piclist andrewspicos capcmd</A>

After you find an appropriate page, you are invited to your to this massmind site! (posts will be visible only to you before review) Just type a nice message (short messages are blocked as spam) in the box and press the Post button. (HTML welcomed, but not the <A tag: Instead, use the link box to link to another page. A tutorial is available Members can login to post directly, become page editors, and be credited for their posts.


Link? Put it here: 
if you want a response, please enter your email address: 
Attn spammers: All posts are reviewed before being made visible to anyone other than the poster.
Did you find what you needed?

 

Welcome to massmind.org!

 

Welcome to techref.massmind.org!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  .