please dont rip this site
;
;*++ mls28FEB98		analog subroutines for cmd monitor: Disti Cert 98
;
		; modified 3/21/98 -jea
		;
		;*********************************************************************
		; A/D interface functions
		;*********************************************************************
ReadAD	; This routine uses ReadADn to get the A/D value from 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	"ANn\r", CmdPC, "Read A/D channel n\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	SetupAD				; init A/D
		movlw	cmdPrmBuff			; load parameter buffer address
		movwf	FSR1				;  into FSR1 
		movfp	INDF1, WREG			; put channel selection into WREG
		call	ReadADn				; read specified analog channel
		; generate output string
		CpyTbl2Out	AnD				; init beginning of output buffer
		movlb	5					; be sure bank 5 stil selected
		swapf	ADCON0, w			; move channel to w and swap ends
		andlw	0x00F				; mask extraneous bits
		call	Dec2Buf				; convert channel into output buffer
		CpyTbl2Out	EqtD			; add = text
		movfp	ADRESH, WREG		; get 0, 1, 2, or 3 from MSbyte
		andlw	0x03				; mask out upper bits
		call	Dec2Buf				; convert msb of value with no leading 0
		movfp	ADRESL, WREG		; get lsb of a/d value
		call	Hex2Buf				; convert lsb as a hex number
		CpyTbl2Out	FsD				; add trailing text
		return						; return from Cmd
		; 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.
AnD		; constant string for analog channel
	data	"\nAN",0
EqtD	; constant string for =
	data	" = ",0
FsD		; constant string for trailing text
	data	" hex, of 3FF Full Scale\n\r",0
		; 
		; 
		;*********************************************************************
ReadTmp	; This routine uses ReadADn to read the thermister on A/D channel 4
		;*********************************************************************
		;
		; 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	"T\r", CmdPC, "Read thermnister on A/D channel 4\r\n"
	CurCmdMenuAdr = $				; set current CmdMenu addr for next entry
	org CmdPC						; begin cmd code gen at inline address
		;
		; This routine uses ReadADn to get the raw ADC count. Channel 
		;  selection is passed in the WREG (4 for the Thermistor). The 
		;  following assumption may be used to convert from raw ADC to 
		;  degrees F: within a small range around room temperature, the ADC 
		;  count changes one count per degree F; the 10 bit count at 77 deg F 
		;  is dec 930. Hint: the two MSbs are always set at room temperature
		;  together they are worth 256 + 512 = 768. 
		;
		call	SetupAD				; init A/D
		movlw	4					; select channel 4
		call	ReadADn				; get raw adc count (ignore 2 MSBs)
		CpyTbl2Out	ThrmD
		movlb	5					; bank select
		movlw	0x055				; in addition to two msbs (being ignored)
		subwf	ADRESL, W			;  subtract 85 from lsb for temperature F
		call 	Dec2Buf				; convert into output buffer
		CpyTbl2Out	DegD			; add trailing text
		return						; return from Cmd
		; 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 CpyTbl2Buf and CpyTblCont macros 
		;  with the addresses given by the labels.
ThrmD	; constant string for thermister
	data	"\nThermistor temp = ", 0
DegD	; constant string for trailing text
	data	" deg Fahrenheit\n\r", 0
		;
		;*********************************************************************
ReadADn	; Read the A/D channel specified in W
		;*********************************************************************
		;
		; This subroutine selects the channel, waits for settling time, starts
		;  the conversion, waits for completion, then returns - leaving the 
		;  result in ADRESx. It is called while WREG contains channel (0 - 11)
		;  inclusive leaves right justified result in ADRESL and 'H and
		;  insures channel selected does not exceed 11.
		; 
		movlb	5					; AD work in Bank 5
		andlw	0x0F				; test and limit channel to valid range
		movwf	ADRESH				; temporary storage
		btfsc	ADRESH, 3 			; 12 or greater is invlalid: 
		bcf		ADRESH, 2 			;  if 8 set insure 4 is not
		swapf	ADRESH, W			; value belongs in upper nibble
		iorlw	0x01				; also turn on AD without starting conv
		movwf	ADCON0				; load into A/D control reg
		; delay settle time, ~50 uSec: ~200 instruction cycles at 16 MHz
		movlw	0x040				; 64 * 3 * .25 uSec = 48uSec
		movwf	ADRESH				; temporary storage
		decfsz	ADRESH				; decrement until 0
		goto	$-1					;  until then wait
		bsf	ADCON0, 2				; start conversion
		btfsc	ADCON0, 2			; loop til conversion complete
		goto	$-1
		return						; return with results in ADRESx
		;
		;*********************************************************************
SetupAD	; Init the A/D peripheral
		;*********************************************************************
		;
		; Instructions: (Don't forget to select Bank)
		; ADCON0
		;  Select AN0, Turn on AD, do not start AD
		; ADCON1
		;  The processor clock is 16MHz; select the AD conversion clock so 
		;   Tad is fast, but in spec.  Right justify for ease of processing.
		;  Enable all analog inputs. Use Vdd & Vss as Ref rails.
		;  Make sure the relevant data direction bits are set!
		; 
		movlb	5					; select bank 5
		movlw	b'00000001'			; Select AN0, turn on AD, do not start AD
		movwf	ADCON0				; in ADCON0
		movlw	b'01110000'			; Tad clk = Fosc/32 = 2 uSec Tad per.
									; Right justify, Enable all analog inputs
									; Use Vdd & Vss as Ref rails
		movwf	ADCON1				; in ADCON1
		movlw	0x0F				; mask to set digital input
		iorwf	DDRG				; in DDRG for AN0 - AN3
		movlw	0xFF				; mask to set digital input
		iorwf	DDRF				; on DDRF for AN4 - AN11
		return						; return with A/D initialized

; end of file a2dcmd.asm ********************************************************


file: /Techref/piclist/andrewspicos/a2dcmd.htm, 6KB, , updated: 2000/2/17 10:05, local time: 2024/12/21 04:19,
TOP NEW HELP FIND: 
3.145.105.15: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://massmind.org/Techref/piclist/andrewspicos/a2dcmd.htm"> piclist andrewspicos a2dcmd</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 massmind.org!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  .