|
;********************************************************************** ; * ; 郎嘿: PWM-C.asm * ; ら戳: 06/14/2001 * ; 郎セ: 1.00 * ; * ; 砞璸: 朝﹙ macross@scanace.com * ; そ嘿: * ; * ; * ;********************************************************************** ; * ; ㄤウ郎: 礚 * ; * ; * ; * ;********************************************************************** ; * ; 弧: * ; 硂絛ㄒ祘Α穦玻ネㄢ虏虫PWM猧块 * ; 砞﹚既竟'PWM_WORK_CFG1' ㎝ 'PWM_WORK_CFG2' * ; 盢穦э跑PIN_PWM1㎝PIN_PWM2㏄戳 * ; 叫猔種,'PWM_WORK_CFG1'㎝'PWM_WORK_CFG2'㎝'PWM_FULL' * ; 既竟砞﹚惠ざ1-255ぇ丁. * ; PWM1块竲PORTB.0 PWM2块竲PORTB.1 * ;********************************************************************** list p=16F84 ; list directive to define processor #i nclude <p16F84.inc> ; processor specific variable definitions
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_OFF & _RC_OSC
; '__CONFIG' directive is used to embed configuration data within .asm file. ; The lables following the directive are located in the respective .inc file. ; See respective data sheet for additional information on configuration word.
;********************** CONST DEFINITIONS****************************** FULL_WORK = 10 ; 程㏄戳箇砞 DEF_WORK1 = 2 ; PWM1㏄戳箇砞 DEF_WORK2 = 8 ; PWM2㏄戳箇砞 PORT_OUT = PORTB ; PWM块梆 PIN_PWM1 = 0 ; PWM1块竲 PIN_PWM2 = 1 ; PWM2块竲 ;********************** VARIABLE DEFINITIONS*************************** CBLOCK 0x0C w_temp ; variable used for context saving status_temp ; variable used for context saving PWM_FULL ; 程㏄戳璸计竟(计) PWM_WORK_CFG1 ; PWM1 ㏄戳砞﹚既竟 PWM_WORK_CFG2 ; PWM2 ㏄戳砞﹚既竟 PWM_WORK_CNT1 ; PWM1 ㏄戳璸计竟(计) PWM_WORK_CNT2 ; PWM2 ㏄戳璸计竟(计) ENDC ;********************************************************************** ;****************** 垂竚祘Α秈翴 *********************** ;********************************************************************** ORG 0x000 ; processor reset vector ResetStart goto main ; go to beginning of program ;********************************************************************** ;****************** い耞狝叭祘Α秈翴 ************************* ;********************************************************************** ORG 0x004 ; interrupt vector location movwf w_temp ; save off current W register contents movf STATUS,w ; move status register into W register movwf status_temp ; save off contents of STATUS register
bsf STATUS,RP0 bcf INTCON,T0IF ; 睲埃璸竟い耞篨腹 bcf STATUS,RP0
decfsz PWM_FULL,F ; 浪琩琌ЧΘ㏄戳 goto ISR_PWM1 bsf PORT_OUT,PIN_PWM1 ; PWM1/PWM2確High筿 bsf PORT_OUT,PIN_PWM2 movlw FULL_WORK ; 穝砞﹚㏄戳璸计竟 movwf PWM_FULL movf PWM_WORK_CFG1,W movwf PWM_WORK_CNT1 movf PWM_WORK_CFG2,W movwf PWM_WORK_CNT2 goto ISR_EXIT ISR_PWM1 decfsz PWM_WORK_CNT1,F ; 浪琩PWM1㏄戳 goto ISR_PWM2 bcf PORT_OUT,PIN_PWM1 ; ㏄戳挡盢块砞Low筿 ISR_PWM2 decfsz PWM_WORK_CNT2,F ; 浪琩PWM2㏄戳 goto ISR_EXIT bcf PORT_OUT,PIN_PWM2 ; ㏄戳挡盢块砞Low筿 ISR_EXIT movf status_temp,w ; retrieve copy of STATUS register movwf STATUS ; restore pre-isr STATUS register contents swapf w_temp,f swapf w_temp,w ; restore pre-isr W register contents retfie ; return from interrupt ;********************************************************************** ;****************** ﹍てPWM ******************************* ;********************************************************************** InitPWM bsf STATUS,RP0 ; 砞﹚PWM1/PWM2竲块 bcf PORT_OUT,PIN_PWM1 bcf PORT_OUT,PIN_PWM2 bcf STATUS,RP0 bsf PORT_OUT,PIN_PWM1 ; 箇砞PWM1/PWM2块蔼筿 bsf PORT_OUT,PIN_PWM2 movlw FULL_WORK ; 砞﹚既竟ぇ箇砞 movwf PWM_FULL movlw DEF_WORK1 movwf PWM_WORK_CFG1 movwf PWM_WORK_CNT1 movlw DEF_WORK2 movwf PWM_WORK_CFG2 movwf PWM_WORK_CNT2 retlw 0 ;********************************************************************** ;****************** ﹍て璸竟 ******************************* ;********************************************************************** InitTimer bsf STATUS,RP0 bsf OPTION_REG,T0CS ; 氨ゎ历竟猧块 bsf OPTION_REG,PSA ; 砞﹚ぃㄏノ猧箇埃竟 bsf INTCON,GIE ; ゴ秨办い耞秨闽(い耞羆秨闽) bcf INTCON,T0IF ; 睲埃璸竟い耞篨腹 bcf STATUS,RP0 retlw 0 ;********************************************************************** ;****************** 币笆璸竟 ******************************* ;********************************************************************** StartTimer bsf STATUS,RP0 bcf OPTION_REG,T0CS ; 砞﹚历竟猧块(1/4 osc) bsf INTCON,T0IE ; ゴ秨璸竟い耞 bcf STATUS,RP0 retlw 0 ;********************************************************************** ;****************** 氨ゎ璸竟 ******************************* ;********************************************************************** StopTimer bsf STATUS,RP0 bsf OPTION_REG,T0CS ; 氨ゎ历竟猧块 bcf INTCON,T0IE ; 闽璸竟い耞 bcf STATUS,RP0 retlw 0 ;********************************************************************** ;****************** 祘Α秈翴 ******************************* ;********************************************************************** main bcf STATUS,RP0 ; select Page 0 for Port Access call InitPWM call InitTimer call StartTimer goto $ ;********************************************************************** END ; directive 'end of program'
|