please dont rip this site
		;
		;*********************************************************************
		; pwmcmd.asm	- PWM subruotines for cmd monitor   Disti Cert 98
		;*********************************************************************
		;
		; created  2/28/98 -mls
		; modified 3/21/98 -jea
		;
		;*********************************************************************
		; pwm interface functions
		;*********************************************************************
SetPWM1	; load percent duty cycle value into pwm1
		;*********************************************************************
		;
		; 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	"PWM1=n\r", CmdPC, "Set pwm1 duty cycle as percent\r\n"
	CurCmdMenuAdr = $				; set current CmdMenu addr for next entry
	org CmdPC						; begin cmd code gen at inline address
		;
		; This routine accepts a command with a value between 0 and 99 and 
		;  sets the PWM number 1 to that percent duty cycle by writing to 
		;  PW1DCH. Hint: Because the period register was loaded with 99, one 
		;  count is 1%. After the value is written to the register, a 
		;  confirmation message is returned. This message acutally reads the
		;  duty cycle register and is therefore useful as a stand alone report
		;  if called at that point. 
		;
		call	InitPWM1			; init pwm1
		bsf	ALUSTA, 7				; make sure FSR doesn't increment
		movlw	cmdPrmBuff			; load parameter buffer address
		movwf	FSR1				;  into FSR1 
		movlw	.100				; test if > 100%, if so clip
		cpfsgt	INDF1				; if cmd value > 100, leave 100 in WREG
		movfp	INDF1, WREG			;  else put cmd value in WREG
		movlb	3					; set bank for PWM duty cycle control
		movwf	PW1DCH				; and move to duty cycle register
		; fall through to display pwm duty cycle
		;
		;*********************************************************************
DspPWM1	; displays current duty cycle value in pwm1
		;*********************************************************************
		;
		; 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	"PWM1\r", CmdPC, "Read pwm1 duty cycle\r\n"
	CurCmdMenuAdr = $				; set current CmdMenu addr for next entry
	org CmdPC						; begin cmd code gen at inline address
		;
		CpyTbl2Out	Pwm1D			; init beginning of output string
		CpyTbl2Out	DcD				; include duty cycle text
		movlb	3					; be sure bank 3 still selected
		movfp	PW1DCH, WREG		; move stored % to WREG
		call	Dec2Buf				; convert into output buffer
		CpyTbl2Out	PcD				; add finishing 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.
Pwm1D	; constant string for pwm1 display
	data "\nPWM1", 0
Pwm2D	; constant string for pwm2 display
	data "\nPWM2", 0
DcD		; constant string for duty cycle display
	data " Duty Cycle = ", 0
PcD		; constant string for % display
	data "%\n\r", 0
		;
		;*********************************************************************
InitPWM1; Initialize the pwm1 peripheral
		;*********************************************************************
		;
		; Instructions:  Set up PWM1 to use timer 1. Use the value decimal 99 
		;  in the period register to facilitate percent calculations. Be 
		;  careful not to change other functions when you write to TCON1 and 
		;  TCON2.
		; 
		movlb	2					; select bank for PR1
		movlw	.99					; make period 100 for easy percent calcs
		movwf	PR1					; and apply to PWM1
		movlb	3					; select bank for other control registers
		clrf	PW1DCL				; clear LSbs of the duty cycle register
		clrf	PW1DCH				; zero duty cycle
		bcf		TCON1,3				; insure T1 & 2 are separate 8 bit timers
		movlw	b'00010001'			; mask to turn on timer one and PWM1
		iorwf	TCON2				; write only my bits, do not change others
		return						; return with pwm initialized
		;
		;*********************************************************************
SetPWM2	; load percent duty cycle value into pwm1
		;*********************************************************************
		;
		; 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	"PWM2=n\r", CmdPC, "Set pwm2 duty cycle as percent\r\n"
	CurCmdMenuAdr = $				; set current CmdMenu addr for next entry
	org CmdPC						; begin cmd code gen at inline address
		;
		; Same function as above, except for PWM2. Reuses string constants. 
		; 
		call	InitPWM2			; init pwm2
		bsf	ALUSTA, 7				; make sure FSR doesn't increment
		movlw	cmdPrmBuff			; load parameter buffer address
		movwf	FSR1				;  into FSR1 
IncTgt	; entry point for IncPWM2
		movlw	.100				; test if > 100%, if so clip
		cpfsgt	INDF1		; if cmd value greater than 100, leave 100 in WREG... 
		movfp	INDF1, WREG	;  else put cmd value in WREG...
DecTgt	; entry point for DecPWM2
		movlb	3					; set bank for PWM duty cycle control
		movwf	PW2DCH				; and move to duty cycle register
		; fall through to display pwm duty cycle
		;
		;*********************************************************************
DspPWM2	; displays current duty cycle for PWM2
		;*********************************************************************
		;
		; 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	"PWM2\r", CmdPC, "Read pwm2 duty cycle\r\n"
	CurCmdMenuAdr = $				; set current CmdMenu addr for next entry
	org CmdPC						; begin cmd code gen at inline address
		;
		CpyTbl2Out	Pwm2D		; init beginning of output string
		CpyTbl2Out	DcD			; include duty cycle text
		movlb	3				; be sure bank 3 still selected
		movfp	PW2DCH, WREG	; move stored % to WREG
		call	Dec2Buf			; convert into output buffer
		CpyTbl2Out	PcD			; add finishing text
		return					; return from Cmd
		;
		;*********************************************************************
IncPWM2	; Increase duty cycle for PWM2 by input parameter amount
		;*********************************************************************
		;
		; 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	"PWM2+=n\r", CmdPC, "Increase pwm2 duty cycle by n%\r\n"
	CurCmdMenuAdr = $				; set current CmdMenu addr for next entry
	org CmdPC						; begin cmd code gen at inline address
		; 
		; This routine accepts a percentage increment and adds it to the duty
		;  cycle of PWM2. It also uses SetPWM2 to test validity and report. 
		movlb	3					; set bank bits
		bsf	ALUSTA, 7				; make sure FSR doesn't increment
		movlw	cmdPrmBuff			; load parameter buffer address
		movwf	FSR1				;  into FSR1 
		movfp	PW2DCH, WREG		; move stored % to WREG
		addwf	INDF1, f			;  sum cmd value and existing value
		goto IncTgt					; go validate, store, and report
		;
		;*********************************************************************
DecPWM2	; Decrease duty cycle for PWM2 by input parameter amount
		;*********************************************************************
		;
		; 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	"PWM2-=n\r", CmdPC, "Decrease pwm2 duty cycle by n%\r\n"
	CurCmdMenuAdr = $				; set current CmdMenu addr for next entry
	org CmdPC						; begin cmd code gen at inline address
		; 
		; This routine accepts a percentage decrement and subtracts it from 
		;  the duty cycle of PWM2. It tests for and prevents underflow and 
		;  also uses SetPWM2 to test validity and report. 
		movlb	3					; set bank bits
		bsf	ALUSTA, 7				; make sure FSR doesn't increment
		movlw cmdPrmBuff			; load parameter buffer address
		movwf	FSR1				;  into FSR1 
		movfp	INDF1, WREG			; move CHANGE % to WREG
		cpfslt	PW2DCH				; if current duty cycle < decr amount skip
		goto 	$+2					; else sub dec amount
		movfp	PW2DCH,	WREG		; set equal, sub for zero, then go store
		subwf	PW2DCH, w			; sub dec amount from duty cycle
		goto DecTgt					; go store and report
		;
		;*********************************************************************
InitPWM2; Initialize the pwm2 peripheral
		;*********************************************************************
		;
		; Instructions:  Set up PWM2 to use timer 1. Use the value decimal 99 
		;  in the period register to facilitate percent calculations. Be 
		;  careful not to change other functions when you write to TCON1 and 
		;  TCON2.
		; 
		movlb	2					; select bank for PR2
		movlw	.99					; make period 100 for easy percent calcs
		movwf	PR2					; and apply to PWM2
		movlb	3					; select bank for other control registers
		clrf	PW2DCL				; clear LSbs of the duty cycle register
		clrf	PW2DCH				; zero duty cycle
		bcf		TCON1,3				; insure T1 & 2 are separate 8 bit timers
		movlw	b'00100001'			; mask to turn on timer one and PWM2
		iorwf	TCON2				; write only my bits, do not change others
		return						; return with pwm initialize

; end of file pwmcmd.asm *****************************************************



file: /Techref/piclist/andrewspicos/pwmcmd.htm, 9KB, , updated: 2002/11/1 18:07, local time: 2024/12/24 22:11,
TOP NEW HELP FIND: 
18.223.238.150: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://linistepper.com/techref/piclist/andrewspicos/pwmcmd.htm"> piclist andrewspicos pwmcmd</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?