历史上的今天
今天是:2025年03月12日(星期三)
2018年03月12日 | PIC16F84产生两组PWM输出的实例源程序
2018-03-12 来源:eefocus
PIC16F84产生两组PWM输出的实例源程序
;**********************************************************************
list p=16F84 ; list directive to define processor
#i nclude
__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'
史海拾趣
|
#include #define UCHAR unsigned char #define UINT unsigned int void main() { UCHAR keyScan(); while(1) { keyScan(); } } ...… 查看全部问答> |
|
学计算机组织结构性能设计那本英文教材 教授出了个内存设计图 翻译过来大概如下 用 128K x 8SRAM 1Mb x 1DRAM 256KB x 4DRAM (三个都要用到,多次用到不限制) 设计出 4MBbytes的主内存. 要求画出图; 可 ...… 查看全部问答> |
|
双网卡冗余容错,同IP,同MAC地址,一个工作,另一个热备份。当需要切换时,passthru获取一块网卡的MAC地址保存到 CHAR * ADAPTER->MACADDRESS 成员变量,把其设置到另一个网卡的 ADAPTER->MACADDRESS 中,具体代码怎么实现 ...… 查看全部问答> |
|
多路输出电源普遍采用针对一路输出进行闭环的PWM控制方式,而其他的辅助输出采用间接稳压方式。由于只对主输出进行闭环控制,占空比的改变对辅助输出的负载影响较大,尤其是从轻载到满载变化时,交叉调节的性能变差(通常>5%)。如果对未闭环的辅 ...… 查看全部问答> |
|
Spidermesh 是一个无线自组网系统,一个低功耗、小功率(无线发射功率10毫瓦)、短距离(节点间30-70m)、短数据(小于50字节)无线传感网络系统。它的无线工作频段首选433MHz,所有无线设备都工作在同频半双工、双向数据传输的 ...… 查看全部问答> |
|
期待music_586的加入,【TI模拟技术体验】讨论气氛会越来越好! 其中这个帖子:可调稳压器LM317你应该知道的10个知识点,就是咱们的新版主music_586的原创。 … 查看全部问答> |




