ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
2 мая
684668 Топик полностью
MBedder, терминатор (03.07.2016 13:24, просмотров: 254) ответил Крок на Б...! (это я про TRISD, вроде бы все обнулял. Рассеянность). Ну а вот OCxTMR молотят не всегда, к сожалению. Или опять рассеянность.
Он молотит, когда выбран Clock Source и выставлен нужный режим. Кроме того, нужно вывести выход ОСх на нужную ногу и не прозабыть сбросить соответствующий бит TRIS. Попробуй запустить такой код (не проверял - я на даче, железа нету) ; OC1 edge aligned PWM pulse generation on RD2 example ; Should generate a 20% duty cycle PWM with period of 1000*Tcy on RD2 .global __reset .include "p33Exxxx.inc" ; Move immediate value to any near register file (including any SFR) macro (trashes W0) .macro mvi value,file mov \value,w0 mov w0,\file .endm oc_per = 1000 ; Desired OC2 PWM cycle length oc_duty = 20 ; Desired OC2 PWM duty cycle, % __reset: mov #__SP_init,w15 ; Initalize the Stack Pointer mvi #__SPLIM_init,SPLIM ; Initialize the Stack Pointer Limit Register nop ; Add NOP to follow SPLIM initialization bclr TRISD,#TRISD2 ; TRISx bits are all ones (ports are input) upon reset, so make some outputs mvi #oc_per,OC2RS ; Set OC2 PWM period mvi #(oc_duty*oc_per)/100,OC2R ; Set OC2 PWM duty cycle mvi #(7<<OCTSEL0)|(6<<OCM0),OC2CON1 ; Select OC2 clock source and mode (e.g. Fp and edge aligned PWM) mvi #(0x1F<<SYNCSEL0),OC2CON2 ; Make OC2RS to determine OC2 PWM period mvi #(17<<RP66R0),RPOR1 ; Map OC2 output to RP66 (= RD2) pin bra . ; Endless loop (note a period character after BRA)