Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Mplab?  (Прочитано 10857 раз)
0 Пользователей и 1 Гость смотрят эту тему.
ФФФ
Гость
« : 14-11-2006 14:47 » 

не знаю в какой раздел помещать...
стоит ли ваще спрашивать? ,но мож кто то работал в этой проге
мне надо написать небольшую прогу для P16F877A,
оч помощнь нуна
(задание : одна из кнопок задает входной символ для регистра сдвига,реализованного на базе порта D
вторая кнопка задает импульс сдвига....сдвиг циклический)


все что есть это пример одной проги

Код:
#INCLUDE "P16F877A.INC"           ;Подключаем файл с символьными обозначениями 
                                                              ; специальных регистров и их битов
COUNT1 EQU 20h                  ;Задаем символьное обозначение ячеек памяти,
COUNT2 EQU 21h                  ; расположенных по адресам 20h, 21h, 22h
COUNT3 EQU 22h
ORG 0                      ;Текущий адрес в ПЗУ - 0
START: BSF STATUS,RP0  ;Делаем активной страницу 1, чтобы получить доступ к
                                                             ; регистру TRISA
    CLRF TRISB          ;Устанавливаем все выводы порта В на вывод
    CLRF TRISD          ;Устанавливаем все выводы порта D на вывод
BCF STATUS,RP0 ;Возвращаемся на страницу 0
CLRF PORTD        ; Устанавливаем все выводы порта D на вывод
BSF PORTB,6        ;Выдаем логическую единицу на RB6
LOOP: BTFSS PORTB,6  ;Пропускаем следующую команду, если бит равен единице
GOTO LOOP1       ; Переход на метку LOOP1
INCF PORTD,F     ;Инкремент регистра PORTD
  CALL DELAY        ;Вызов подпрограммы задержки
GOTO LOOP          ;Бесконечный цикл
LOOP1: DECF PORTD,F     ;Декремент регистра PORTD
CALL DELAY        ; Вызов подпрограммы задержки
GOTO LOOP          ; Бесконечный цикл
DELAY: MOVLW 1A                ;
MOVWF COUNT1     ;
LOOPZ1: CALL DELAY2           ;
                    DECFSZ COUNT1,F  ;
GOTO LOOPZ1          ;
RETURN                     ;
DELAY2:       MOVLW 0FF              ;                               Подпрограмма
MOVWF COUNT2     ;
LOOPZ2:        CALL DELAY3          ;
                  DECFSZ COUNT2,F  ;                                    задержки
GOTO LOOPZ2          ;
RETURN                     ;
DELAY3: MOVLW 0FF              ; 
MOVWF COUNT3     ;
LOOPZ3:        DECFSZ COUNT3,F  ;
GOTO LOOPZ3          ;
RETURN                     ;
END                         
Записан
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 17-11-2006 11:24 » 

А в чем вопрос?
Записан

ещё один вопрос ...
ФФФ
Гость
« Ответ #2 : 18-11-2006 07:31 » 

в том как сделать

задание : одна из кнопок задает входной символ для регистра сдвига,реализованного на базе порта D
вторая кнопка задает импульс сдвига....сдвиг циклический

=(
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 18-11-2006 11:22 » 

Говоря техническим языком, последовательная передача со стробированием.

Алгоритм элементарен:

Имеем: bit1 - данные, bit2 - строб, port1 - вывод (8 бит).
Протокол: фиксирование значения bit1 по переходу bit2 из 0 в 1.
Переменные: var1 - хранение полеченных данных (8 бит).

1. Инициализируем переменную var1 нулем или иным значением.
2. Проверяем bit2: если 1, то повторяем п.2, если 0, то переходим к п.3.
3. Проверяем bit2: если 0, то повторяем п.3, если 1, то переходим к п.4.
4. Сдвигаем переменную var1 вправо, считываем bit1 и помещаем его значение в младщий бит переменной var1.
5. Выводим значение var1 в port1.
6. Переходим на п.2.

А над реализацией на ассемблере подумай сам, а то иначе пользы от этого не будет.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
ФФФ
Гость
« Ответ #4 : 23-11-2006 11:45 » 

Код:
#INCLUDE "P16F877A.INC"           ;Подключаем файл с символьными обозначениями                                                               ; специальных регистров и их битов
COUNT1 EQU 20h              ;Задаем символьное обозначение ячеек памяти,
COUNT2 EQU 21h             ; расположенных по адресам 20h, 21h, 22hCOUNT3
EQU 22h ORG 0                  ;Текущий адрес в ПЗУ - 0START:
BSF STATUS,RP0  ;Делаем активной страницу 1, чтобы получить доступ                                                               ; регистру TRISA    
CLRF TRISB          ;Устанавливаем все выводы порта В на вывод    
CLRF TRISD          ;Устанавливаем все выводы порта D на вывод
BCF STATUS,RP0 ;Возвращаемся на страницу 0
CLRF PORTD        ; Устанавливаем все выводы порта D на вывод
BSF PORTB,6        ;Выдаем логическую единицу на RB6
LOOP: BTFSS PORTB,6  ;Пропускаем следующую команду, если бит равен единице
GOTO LOOP1       ; Переход на метку LOOP1
LOOP: BTFSS PORTB,6  ;Пропускаем следующую команду, если бит равен единице
GOTO LOOP2       ; Переход на метку LOOP1


хм не совсем поняла,как все же относительно Mplab не скажешь как ,плизз?
вот начало наверно как-то так! Не понял Здесь была моя ладья... :Улыбаюсь
Записан
Greysfi
Гость
« Ответ #5 : 23-11-2006 14:15 » 

В Mplab можно просто повесить соответствующие сигналы на ножки и протестить алгоритм.
Записан
ФФФ
Гость
« Ответ #6 : 24-11-2006 09:11 » 

хм...я понимаю да
а с прогой этой не подскажешь как быть
Записан
Greysfi
Гость
« Ответ #7 : 24-11-2006 10:03 » 

Насколько я понимаю тебе нужно реализовать что то типа SPI  программно.
Можно сделать либо по полингу. Тогда в цикле полинга нужно проверять изменение состояния ножки на порте к которой подсоединен сигнал синхронизации (вторая кнопка задает импульс сдвига....). И по изменению этого сигнала записывать значение с ножки порта D и обрабатывать его как тебе угодно.
Можно сделать и по прерываниям. Для этого нужно сигнал синхронизации повесить на ножку INT и сконфигурировать прерывание. А потом в обработчике прерывания обрабатывать порт D.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines