Поклонники продукции Microchip Technology Inc тусуются тут.
Ответить

Мигалка на 16f628a. Нужна ваша консультация

Чт авг 09, 2012 14:20:27

Итак, хрон я все таки сделал :)) немного подправив прошивку все отлично заработало :)
Так как остался еще один мк 16f628a продолжаю его изучение, обучаюсь так скать написанию прошивок.
Вот накатал простенький код, который мигает свеодиодом. в коде задана частота и скважность импульсов.
Пожалуйста, посмотрите его, и если есть ошибки/недочеты укажите. Вроде все правильно.
Код:
   list        p=16f628A
   #include <P16F628.inc>
   __CONFIG    _PWRTE_ON & _WDT_OFF & _XT_OSC & _BODEN_OFF & _LVP_OFF

;****************************************************************************;
;   Блок переменных
;****************************************************************************;
cblock 70H
        SecL            ; Младший разряд счетчика таймера
        SecM            ; Средний разряд счетчика таймера
        SecH            ; Старший разряд счетчика таймера
endc
;****************************************************************************;
;   Блок дефайнов
;****************************************************************************;
#define Port_Led        PORTB   ; Порт светодиода
#define Tris_Led        TRISB   ; TRIS порта светодиода
#define Bit_Num_Led     0       ; № бита порта леда
;****************************************************************************;



;****************************************************************************;
;****************************************************************************;
;****************************************************************************;
org     0                   ; Вектор сброса
goto    main                ; Переход на начало программы
;****************************************************************************;
; delay
; Подпрограмма паузы
;
; Входные параметры :
;                       SecL, SecM, SecH
;****************************************************************************;
delay
    decfsz      SecL,F          ; Декремент SecL до 0
    goto        delay
    decfsz      SecM,F          ; Декремент SecM до 0
    goto        delay
    decfsz      SecH,F          ; Декремент SecH до 0
    goto        delay
return                          ; Возврат из ПП
;****************************************************************************;
;   Начало программы
;****************************************************************************;
main       

    bcf     STATUS,   RP0           ; 0-ой банк
    movlw   .7                      ; Отключаем компараторы
    movwf   CMCON                   ; В CMCON запысываем .7
   
    banksel Tris_Led                ; Настраиваем ПИН светодиода на выход
    bcf     Tris_Led, Bit_Num_Led   ;
    banksel Port_Led                ; Сбрасываем ПИН светодиода
    bcf     Port_Led, Bit_Num_Led   ;

;----------;
;   Основной цикл
;----------;
main_loop:

    movlw       .50                 ; Загрузка счетчика
    movwf       SecL                ; SecL
    movlw       .50                 ; Загрузка счетчика
    movwf       SecM                ; SecМ
    movlw       .2                  ; Загрузка счетчика
    movwf       SecH                ; SecH
    call    delay
   
    bsf   Port_Led, Bit_Num_Led     ; Зажечь светодиод
   
    movlw       .100                 ; Загрузка счетчика
    movwf       SecL                ; SecL
    movlw       .100                 ; Загрузка счетчика
    movwf       SecM                ; SecМ
    movlw       .4                  ; Загрузка счетчика
    movwf       SecH                ; SecH
    call    delay
   
    bcf   Port_Led, Bit_Num_Led     ; Погасить светодиод

goto    main_loop
;----------;
;
;----------;
;****************************************************************************;
end
;****************************************************************************;

Некст задача: теперь хочу его заставить мигать только по нажатию кнопки. Постает вопрос: как мне нужно организвать код для такого действия?

Re: Мигалка на 16f628a. Нужна ваша консультация

Чт авг 09, 2012 15:33:39

mmm... для этой цели (генерация временных интервалов) в 628 таймеров предостаточно...
а кнопик как кнопик просто добавь его опознание хош в примитиве, хош в максимуме (с антидребезгом и блокировкой повторного исполнения до полного отпускания) :sleep:
и #define ... ... стараюсь не пользоваться - в ассемблерах pic-avr-mcs51 у данной директивы различное назначение ... :cry:

Re: Мигалка на 16f628a. Нужна ваша консультация

Чт авг 09, 2012 17:23:21

можно кусочек кода для примера (кнопка)?

Re: Мигалка на 16f628a. Нужна ваша консультация

Чт авг 09, 2012 20:06:36

Вот накатал простенький код, который мигает свеодиодом.
Что то кодик знакомый :)) А сами ли Вы его накатали ? :)))

Re: Мигалка на 16f628a. Нужна ваша консультация

Чт авг 09, 2012 20:23:47

код под схемку пишется однако...
надо хош какую-нибудь для начала сочинить...
у меня есть вот такая, но... это pic18f1320 (хоша по разводке подобен 628) а доводить "до ума" вломкии... :sleep:
Вложения
ttmk1320.pdf
(232.36 KiB) Скачиваний: 345

Re: Мигалка на 16f628a. Нужна ваша консультация

Чт авг 09, 2012 20:38:18

почти сам. Написал его по примеру с гугла, подробно разбирая.
Кстати, BOB51, я тоже с донецка, точнее завтра в универе буду)

Re: Мигалка на 16f628a. Нужна ваша консультация

Чт авг 09, 2012 21:11:02

virus33 писал(а):почти сам.
ссылка :)))

По теме : Минусы в этом коде - программа всегда зациклена, выполняя задержки. Добавить что-то в неё свое почти нереально.
Переходите на таймеры.

Re: Мигалка на 16f628a. Нужна ваша консультация

Чт авг 09, 2012 22:13:21

жабко токмо что у средне-младших токмо один вектор входа на все прерывания... даже у 18-й их всего два с двумя приоритетами... совсем тоскно по сравнению с mcs51 :roll:

Re: Мигалка на 16f628a. Нужна ваша консультация

Пт авг 17, 2012 00:29:37

virus33Я бы кнопку прицепил к 6-му выводу PIC16F628A. Разрешил бы прерывание от внешнего источника по входу INT, в векторе прерывания отслеживал прерывание INT, и запускал бы таймер RP0. А далее, играясь таймером, добился бы необходимого мерцания светодиода. :)
Ответить