|
Виж темите без отговор | Виж активните теми
Дата и час: Вто Юли 28, 2026 1:39 am
|
Страница 1 от 1
|
[ 8 мнения ] |
|
Проблем: програмата ми се стартира отново и отново
| Автор |
Съобщение |
|
dan
Ранг: Форумен бог
Регистриран на: Вто Май 29, 2007 2:23 pm Мнения: 3714 Местоположение: Високо в планината
|
 Проблем: програмата ми се стартира отново и отново
Здравейте!
Проблема ми е следния:
искам да направя плавно тръгване на постояннотоков двигател, като за целта използвам pwm модула на pic16f684. Постепенно увеличавам коефициента на запълване на импулса, достигам пълна мощност, но не мога да накарам изхода да стане '1', а започва да се инкрементира отново.Проблема обаче възниква още при инициализацията на ПВМ модула. ето и кода:
 |  |  |  | Код: PROCESSOR 16F684 LIST p=16F684 #include <p16f684.inc> __CONFIG _CP_OFF & _WDT_OFF & _MCLRE_ON & _INTOSCIO #define B0 bcf STATUS,RP0;izbor na banka 0 #define B1 bsf STATUS,RP0;izbor na banka 1 W EQU 0 F EQU 1 DUTY EQU 20H CIKYL EQU 21H CIKYL1 EQU 22H ORG H'00' GOTO START START
B0 CLRF PORTC ;Init PORTC MOVLW 07h ;Set RC<4,1:0> to MOVWF CMCON0 ;digital I/O B1 CLRF ANSEL ;digital I/O MOVLW 00H ;Set RC<3:2> as OUT MOVWF TRISC B0 BSF PORTC,5 B1 BCF OPTION_REG,5;TMR0 INTERNAL CLOCK BCF OPTION_REG,7;PULL-UPS ENABLED
BCF OPTION_REG,3;PRESCALER ASS. TO TMR0
BSF OPTION_REG,0;PRESCALER=256 BSF OPTION_REG,1 BCF OPTION_REG,2
GOTO MAIN
SETUP_PWM B1 BSF TRISC,5 MOVLW D'199' ; MOVWF PR2 ;2 MOVLW B'00001110';PWM ACTIV-LOW, DUTY'S LSbits=0 B0 MOVWF CCP1CON ;3 ;4 MOVLW D'25' ;PRIMERNA NA4ALNA STOJNOST MOVWF CCPR1L BCF PIR1, TMR2IF;5.1 BCF T2CON,T2CKPS0;5.2 BCF T2CON,T2CKPS1;5.2 BSF T2CON,TMR2ON;5.3 CHAKAJ BTFSS PIR1,1;4AKAME TAJMERA DA SE NAPYLNI GOTO CHAKAJ B1 BCF TRISC,5;SET PWM OUTPUT
RETURN MAIN
CALL SETUP_PWM;
B0 CLRF CCP1CON NOP B1 BCF TRISC,5 BCF ANSEL,5 B0 BCF PORTC,5 END |  |  |  |  |
Ще съм много благодарен за всяка помощ. 
|
| Чет Мар 06, 2008 7:48 pm |
|
 |
|
ji4ka
Ранг: Форумен бог
Регистриран на: Чет Фев 01, 2007 4:04 am Мнения: 1539
|
Нямаш край на MAIN. Тури едно goto $-1 преди END. Това END е директива на асемблера (компилатора.).
|
| Пет Мар 07, 2008 2:58 am |
|
 |
|
dan
Ранг: Форумен бог
Регистриран на: Вто Май 29, 2007 2:23 pm Мнения: 3714 Местоположение: Високо в планината
|
@ji4ka:
Благодаря за отговора.
А защо да не напиша goto $ ? С goto $-1 ще се изпълнява последната инструкция постоянно, нали?
|
| Пет Мар 07, 2008 11:41 am |
|
 |
|
ji4ka
Ранг: Форумен бог
Регистриран на: Чет Фев 01, 2007 4:04 am Мнения: 1539
|
Няма значение - важно е да зацикли програмата на място защото иначе програмния брояч си нараства и като стигне края на паметта започва отначало.
|
| Пет Мар 07, 2008 9:59 pm |
|
 |
|
Ки4о
Ранг: Форумен бог
Регистриран на: Съб Юли 22, 2006 9:50 pm Мнения: 1638
|
Като не искаш да ти се изпълнява последната инструкция,т.е да влезеш в празен цикъл:
B0
BCF PORTC,5
NOP
NOP
goto $-1
END
|
| Пет Мар 07, 2008 10:32 pm |
|
 |
|
stanleyhacker
Ранг: Новодошъл
Регистриран на: Чет Дек 02, 2004 7:22 pm Мнения: 140
|
goto $-1 не изпълнява последната инструкция, а пак отива на него.
|
| Пон Мар 10, 2008 11:53 am |
|
 |
|
Ugeen
Ранг: Новодошъл
Регистриран на: Пон Яну 16, 2006 5:20 pm Мнения: 122 Местоположение: гр. Горна Оряховица
|
Не знам как ти работи програмата без goto,а освен това таймера по принцип си работи така,брои,препълва и пак почва от начало,освен ако ти не вземеш мерки да направиш изхода си независим от него когато е стигнал края.Според мен не си си построил програмата правилно,Трябвало е да иползваш прекъсване от таймера което ти установява изхода в 1 след като PWM а е стигнал края.Провери си да не ти е включен WDT,тогава наистина ще ти се ресетва постоянно програмата.
|
| Пон Мар 10, 2008 11:02 pm |
|
 |
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 12:02 pm Мнения: 9119 Местоположение: Разград
|
Най елегантното решение според мен би било :
GIE=0 (ако въобще се ползват прекъсвания)
SLEEP
|
| Вто Мар 11, 2008 5:10 pm |
|
|
|
Страница 1 от 1
|
[ 8 мнения ] |
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 3 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|