Jump to content

    

Проблемы с активацией

Программа с самого начала:

 

INTOSCIO

list p=16F636 ; list directive to define processor (список директив для определения процессора)

#include <p16F636.inc> ; processor specific variable definitions (определение установок характерных тольком для данного процессора)

 

__CONFIG _WUREN_OFF & _WDT_OFF & _BOD_OFF & _FCMEN_OFF & _IESO_OFF & _CPD_OFF & _MCLRE_ON & _PWRTE_OFF & _WDT_OFF & _INTRC_OSC_CLKOUT

;_WUREN_ON бит, разрешающий пробуждение из спящего режима повходу reset

;_WDT_OFF выключение "собачьего" таймера

;_BOD_OFF функция контроля питания (при хреновом питании сбрасывает)

;_FCMEN_OFF отключение функции слежения за внешним тактовым генератором

;_IESO_OFF выключение быстрого старта (работает при использовании кварцевых генераторов)

;_CPD_OFF cod protection off

;_MCLRE_ON активация возможности сброса

;_PWRTE_ON разрешение включения питания таймера

;_WDT_ON включение Watchdog Timer

;_INTRC_OSC_NOCLKOUT внутренний генератор без вывода данных наружу

;_INTRC_OSC_CLKOUT - внутр. ген. с выводом на RA4.

;_EXTRC_OSC_CLKOUT - CLKOUT function on RA4/T1G/OSC2/CLKOUT, RC on RA5/T1CKI/OSC1/CLKIN

 

;******************* VARIABLE DEFINITIONS *****************************

BANK0 equ 0x20 ;опрделение начала банка памяти 0

BANK0_END equ 0x7F ;опрделение конца банка памяти 0

BANK1 equ 0xA0 ;опрделение начала банка памяти 1

BANK1_END equ 0xBF ;опрделение конца банка памяти 1

 

CBLOCK BANK0

 

; Моя прога

; Ввод переменных

 

status_temp

hall ;переменная для определения состояния датчика холла. состояние считывается с датчика холла с RC5

w_temp ;переменная для сохранения аккумулятора

counter ;счетчик количества промежутков по 0,25сек

state ;регистр определяющий состояние процессора в данный момент.

 

endc

 

;****************** МАКРОСЫ *******************************************

bank_0 macro ; макрос для перехода в Bank0

bcf STATUS,RP0

endm

 

bank_1 macro ; макрос для перехода в Bank1

bsf STATUS,RP0

endm

 

ORG 0x000

 

 

 

bsf STATUS,RP0

movlw b'00000011'

movwf OSCCON

goto init

;______________________________________________________________

;--------------------Вектор прерываний-------------------------

INT_VECTOR

;

exit_int:

swapf 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, enable interrupts

 

;______________________________________________________________

;-----------------------Настройка------------------------------

 

init

BCF STATUS,RP0

clrf CMCON1

clrf PIR1

clrf STATUS;

 

bsf STATUS,RP0

 

movlw b'00010010'

movwf OPTION_REG

movlw b'11100000'

movwf INTCON

movlw b'00011000'

movwf PIE1

movlw b'00110000'

movwf WPUDA

movlw b'00000000'

movwf TRISA

movlw b'00001011'

movwf TRISC

movlw b'00000011'

movwf OSCCON

movlw b'00100000'

movwf WDA

bcf STATUS,RP0

movlw b'00000100'

movwf CMCON0 ;+

clrf status_temp

clrf hall ;переменная для определения состояния датчика холла. состояние считывается с датчика холла с RC5

clrf w_temp ;переменная для сохранения аккумулятора

movlw 0x28 ;10 сек в аккум

MOVWF counter ;ЗАПоминание нужного значения счетчика(на паузу).

clrf state

 

 

sost

bsf PORTA,5

bcf PORTA,5

GOTO sost

 

 

Лишнее удалил и почистил (почти все коментарии и вектор прерываний)

Если кто ошибку заметит - подскажите - буду признателен.

Share this post


Link to post
Share on other sites

что значит не запускается?

если вообще не генерит, смотрите железо, ресет, так как от программы это не зависит, прописано в конфигурации. Посмотрите осциллогрфом что на выходе OSCO - должна быть частота деленная на 4.

А если не на той частоте работает, типа 31кгц, то последовательность конфигурации осциллятора, ее надо соблюдать.

 

для пик16 не знаю, давно с ними не работал, да и то были 628. для пик18ф4520 на 32мгц было так:

main()
{
    GIE = 0;
    CLRWDT();
    // сконфигурирован от внутреннего RC-генератора на частоту 32МГц
    OSCCON = 0b01110000;
    OSCTUNE = 0b11000000;
...

 

ЗЫ pwrtimer все таки рекомендуется включать, если это не режим отладки

Share this post


Link to post
Share on other sites

Прошу прощения за беспокойство.

проблема была не в софте, а в харде(RESET об землю)

Спасибо, что откликнулись.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this