реклама на сайте
подробности

 
 
> Помогите с PIC16F84A
Asekart
сообщение Dec 3 2006, 16:54
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 17
Регистрация: 3-12-06
Из: SV-IX
Пользователь №: 23 068



Помогите с усовершенствованием кода help.gif
Код
;*******************************************************************************
*************
;*                   Мигание светодиода               ***************************************
;*******************************************************************************
*************

list p=16f84
  
   #include <p16F84a.inc>

__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC


count1 EQU  0x0C
count2 EQU  0x0D
ledset EQU  0x0E


   ORG 0x000
  
   clrf PORTA
   clrf PORTB
      bsf STATUS, RP0
   movlw b'11111100'
   movwf PORTA
   movlw b'00000101'
   movwf PORTB

   bcf OPTION_REG,7
   bcf STATUS,RP0
   clrf ledset

loop   movlw b'00000011'
   xorwf ledset, f
   movf ledset, w
   movwf PORTA
      
      movlw 0x00

   movwf count1
cycle1 movlw 0xFF
      movwf count2
cycle2 decfsz count2, f
      goto cycle2
      
      incfsz count1, f
      goto cycle1
    
      goto loop
      
      end

Значит эта прога заставляет мигать 2 диода...за ножки отвечает эта строчка, она рассчитана и она была дописана мной для двух светиков
movlw b'11111100' ; последние 2 нуля показывают что на 17 и 18 ножках светики
movwf PORTA
Далее инвертируется этот адресс в строчке

movlw b'00000011' ; тут инвертируется значние и выходит так что на 17 и 18 ножках логическая 1....

xorwf ledset, f
movf ledset, w
movwf PORTA

Как дописать, чтоб светики мигали поочередно, а не вместе...??? Кто знает отзовись и помоги юному пиковщику.... Не допру сам никак smile3046.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
xemul
сообщение Dec 4 2006, 19:44
Сообщение #2



*****

Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731



Главное, чтобы во благоsmile.gif.
Чтобы менять частоту мигания, задействуйте таймер, настройте прескалер для получения желаемой частоты переполнения таймера (скорее всего придется расширить таймер программным счетчиком), и по прерыванию таймера (точнее, по желаемому состоянию программного счетчика) переключайте светодиоды.
Кнопками можно изменять частоту мигания. Можно добавить еще одну - для изменения характера мигания. Творитеsmile.gif.

ЗЫЖ pull-up'ы (внутренние привязочные резисторы по PORTB), надеюсь, включены? Без привязки кнопки обработать не удастся.
Go to the top of the page
 
+Quote Post
Asekart
сообщение Dec 4 2006, 22:28
Сообщение #3


Участник
*

Группа: Новичок
Сообщений: 17
Регистрация: 3-12-06
Из: SV-IX
Пользователь №: 23 068



Цитата(xemul @ Dec 4 2006, 18:44) *
Главное, чтобы во благоsmile.gif.
Чтобы менять частоту мигания, задействуйте таймер, настройте прескалер для получения желаемой частоты переполнения таймера (скорее всего придется расширить таймер программным счетчиком), и по прерыванию таймера (точнее, по желаемому состоянию программного счетчика) переключайте светодиоды.
Кнопками можно изменять частоту мигания. Можно добавить еще одну - для изменения характера мигания. Творитеsmile.gif.

ЗЫЖ pull-up'ы (внутренние привязочные резисторы по PORTB), надеюсь, включены? Без привязки кнопки обработать не удастся.

А вы можете привести пожалуста простенькое дополнение к уже существующей проге, только с использованием таймера...буду бескрайне благодарен...нужно просто увидеть пример, а потом поковырятся в нем....огромное спасибо!!!!
Go to the top of the page
 
+Quote Post
DL36
сообщение Dec 25 2006, 01:12
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 460
Регистрация: 5-10-06
Из: Херсон
Пользователь №: 21 006



Цитата(Asekart @ Dec 4 2006, 23:28) *
А вы можете привести пожалуста простенькое дополнение к уже существующей проге, только с использованием таймера...буду бескрайне благодарен...нужно просто увидеть пример, а потом поковырятся в нем....огромное спасибо!!!!

Посмотрел, вспомнил себя, нашел старый проект покромсал. Только лучше использовать PIC16F628A поновее будет.
Тут тебе файл с рабочим таймером, и твои светодиоды мигают, поочереди. Попытался файл прикрепить не прошло будет так.
Код
    list p=16f84A
    include <p16f84A.inc>

    __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC



sys_t        EQU  0x0C;
led            EQU  0x0D;
sys_k        EQU  0xF0;Константа счета

;-----------------------------------------------------------------
; Вектор сброса
;-----------------------------------------------------------------
RESET_VECTOR    org    0x000        ;Адрес вектора сброса

                                ;Банк 1
                                 ;Сброс при включении питания?
        goto    start            ;Да
        goto    OTHER_RESET        ;НЕТ, WDT или сброс MCLR
;------------------------------------------------------------------
;
;Подпрограмма обработки прерываний перифирийных устройств
;Определяется источник прерывания. Разрешены следующие

;    4.Прерывание по переполнению TMR1
;
INT_VECTOR    org    0x004        ;Адрес первичного вектора прерываний
        
VECTOR_INT
;--------------------------------------------------------------------
;    Сохранение регистров и переменных

;
        
;---------------------------------------------------------------------
;
    bcf     STATUS, RP0    ;Банк 0
    btfss    STATUS, NOT_TO;
    goto    ERROR_WDT    ;Сработал сторожевой таймер

    btfsc    INTCON, T0IF;Переполнение таймера 1?
    goto    T1_Overfl    ;ДА, обслуживание

    ;Тут вставляются другие проверки

                
T1_Overfl
    movlw    sys_k        ;Загрузить таймер  
    movwf    TMR0        ;
    clrf    sys_t        ;Сбрасываем флаг

;    Восстанавливаем


;--------------------------------------------------------------------
;     Конец обработки прерывания
;----------------------------------------------------------------
    bcf        INTCON, T0IF;Переполнение таймера 1?
    retfie                ;Выходим, с разрешением прерываний

;main org
;// Обработка ошибок
ERROR_WDT
    clrf    STATUS        ;
    clrf    INTCON        ;Запретить
                        ;прерывания
    clrwdt                ;
    goto $-1            ;Зациклить на ошибке


;Проверка типа сброса
OTHER_RESET     
    btfss STATUS, NOT_TO;Сброс WDT?
WDT_TIMEOUT
    goto ERROR_WDT        ;Да, превышение WDT.
    goto start            ;Внешний сброс
    goto ERROR_WDT
ERROR1
    nop
    nop
    goto ERROR1            ;

;-----------------------------------------------------------------
;
; Начало, инициализация микроконтроллера
;
;-----------------------------------------------------------------
        
start
        clrf    STATUS        ;
        clrf    INTCON        ;Запретить
        clrwdt                ;
;---------------------------------------------------------------------
;    Начальная установка ПОРТОВ
        clrf    STATUS        ;Установить банк 0
          clrf     PORTA
           clrf     PORTB
        movlw    b'11111100'    ;
        bsf        STATUS,    RP0    ;Установить банк 1
        movwf    TRISA        ; 0-1 выход адреса
           movlw     b'00000001'
        banksel PORTA
           movwf     PORTA
        movwf    led


;------------------------------------------------------------------------
;    Инициация таймера TMR0
;------------------------------------------------------------------------    
        clrf     TMR0        ;
        clrf     INTCON        ;
        movlw    b'11000111'        ;
        banksel    OPTION_REG    ;
        movwf    OPTION_REG    ;
        
        movlw    sys_k        ;
        banksel TMR0        ;
        movwf    TMR0        ;значение 1/8 секунды при
        banksel    INTCON        ;

        bsf        INTCON, T0IE;Разрешить
        bsf        INTCON, GIE    ;Разрешить прерывания перифирийных устройств


main;Главный цикл

        banksel PORTA
        btfsc    sys_t, 0
        goto    main        ;
        comf    led, W
        movwf    led
        movwf     PORTA
        bsf        sys_t, 0
        goto    main        ;
        end


Сообщение отредактировал DL36 - Dec 25 2006, 01:16
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 31st July 2025 - 03:23
Рейтинг@Mail.ru


Страница сгенерированна за 0.01982 секунд с 7
ELECTRONIX ©2004-2016