|
Помогите с PIC16F84A |
|
|
|
Dec 3 2006, 16:54
|
Участник

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

|
Помогите с усовершенствованием кода Код ;******************************************************************************* ************* ;* Мигание светодиода *************************************** ;******************************************************************************* *************
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 Как дописать, чтоб светики мигали поочередно, а не вместе...??? Кто знает отзовись и помоги юному пиковщику.... Не допру сам никак
|
|
|
|
|
 |
Ответов
|
Dec 4 2006, 19:44
|
    
Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731

|
Главное, чтобы во благо  . Чтобы менять частоту мигания, задействуйте таймер, настройте прескалер для получения желаемой частоты переполнения таймера (скорее всего придется расширить таймер программным счетчиком), и по прерыванию таймера (точнее, по желаемому состоянию программного счетчика) переключайте светодиоды. Кнопками можно изменять частоту мигания. Можно добавить еще одну - для изменения характера мигания. Творите  . ЗЫЖ pull-up'ы (внутренние привязочные резисторы по PORTB), надеюсь, включены? Без привязки кнопки обработать не удастся.
|
|
|
|
|
Dec 4 2006, 22:28
|
Участник

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

|
Цитата(xemul @ Dec 4 2006, 18:44)  Главное, чтобы во благо  . Чтобы менять частоту мигания, задействуйте таймер, настройте прескалер для получения желаемой частоты переполнения таймера (скорее всего придется расширить таймер программным счетчиком), и по прерыванию таймера (точнее, по желаемому состоянию программного счетчика) переключайте светодиоды. Кнопками можно изменять частоту мигания. Можно добавить еще одну - для изменения характера мигания. Творите  . ЗЫЖ pull-up'ы (внутренние привязочные резисторы по PORTB), надеюсь, включены? Без привязки кнопки обработать не удастся. А вы можете привести пожалуста простенькое дополнение к уже существующей проге, только с использованием таймера...буду бескрайне благодарен...нужно просто увидеть пример, а потом поковырятся в нем....огромное спасибо!!!!
|
|
|
|
|
Dec 25 2006, 01:12
|
Местный
  
Группа: Свой
Сообщений: 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
|
|
|
|
Сообщений в этой теме
Asekart Помогите с PIC16F84A Dec 3 2006, 16:54 xemul Цитата(Asekart @ Dec 3 2006, 16:54) ...
К... Dec 3 2006, 17:04 Asekart Цитата(xemul @ Dec 3 2006, 16:04) Цитата(... Dec 3 2006, 18:09  xemul Цитата(Asekart @ Dec 3 2006, 18:09) Цитат... Dec 3 2006, 19:44   Asekart Цитата(xemul @ Dec 3 2006, 18:44) Цитата(... Dec 3 2006, 23:32    Asekart Первый мигает, второй горит! - вот что выйдет ... Dec 4 2006, 02:42     xemul Цитата(Asekart @ Dec 4 2006, 02:42) Первы... Dec 4 2006, 14:55      Asekart Цитата(xemul @ Dec 4 2006, 13:55) Цитата(... Dec 4 2006, 19:21   Asekart Цитата(DL36 @ Dec 25 2006, 01:12) Цитата(... Dec 27 2006, 09:46    DL36 Цитата(Asekart @ Dec 27 2006, 10:46) Огро... Dec 27 2006, 11:12 Spag Помогите пожалуйста с программой для PIC16F84A. За... Dec 16 2011, 20:40 fox2trot Цитата(Spag @ Dec 17 2011, 00:40) Програм... Jan 17 2012, 06:45 xemul Цитата(Spag @ Dec 17 2011, 00:40) Поперем... Jan 17 2012, 11:33
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|