Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Ассемблер? Это просто! Учимся программировать


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты данной рассылки

Boriss
Статус: Академик
Рейтинг: 2544
∙ повысить рейтинг »
Абаянцев Юрий Леонидович aka Ayl
Статус: Профессионал
Рейтинг: 2026
∙ повысить рейтинг »
vladisslav
Статус: 7-й класс
Рейтинг: 1301
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / Assembler (Ассемблер)

Номер выпуска:1385
Дата выхода:22.11.2010, 22:30
Администратор рассылки:Лысков Игорь Витальевич (Старший модератор)
Подписчиков / экспертов:223 / 67
Вопросов / ответов:1 / 1

Вопрос № 180829: Здравствуйте, уважаемые эксперты! Прошу Вас помочь с решением следуюшей задачи: - написать программу в среде MPLab для вывода чисел 1,2,3,5 на индикатор микроконтроллера PIC16F84 последовательно с интервалом в полсекунды. Составить блок - схем...



Вопрос № 180829:

Здравствуйте, уважаемые эксперты! Прошу Вас помочь с решением следуюшей задачи:
- написать программу в среде MPLab для вывода чисел 1,2,3,5 на индикатор микроконтроллера PIC16F84 последовательно с интервалом в полсекунды.
Составить блок - схему работы программы!
Спасибо!


Отправлен: 17.11.2010, 22:22
Вопрос задал: Посетитель - 342555 (Посетитель)
Всего ответов: 1
Страница вопроса »


Отвечает Лысков Игорь Витальевич (Старший модератор) :
Здравствуйте, Посетитель - 342555!
Забавный ассемблер... Итак, что мы имеем?
Программы для микроконтроллеров абстрактно не пишутся, а только под конкретную схему.
Исходя из примеров, приведенных в вопросе № 180728, я делаю вывод,
что зажигание всех 32 (4*8) сегментов индикаторов производится последовательно путем импульса
по выводу синхронизации порта В, состояние сегмента индикатора при этом берется с вывода данных того же порта.
Отсюда получаем следующий алгоритм:
1) Преобразуем требуемое число в сегментный код, показывающий, какие сегменты горят, какие нет
2) Отрабатываем эти 8 бит, тем самым рисуем число на первом индикаторе.
3) Гасим остальные 4 индикатора
4) Выдерживаем паузу
5) Рассматриваем следующее число и на пункт 1)
6) Зацикливаем до бесконечности
Вот такая получилась программа
Код:
       LIST    p=16F84

; Регистры общего назначения
PC equ 02h ; Счетчик команд
STATUS EQU 03h ; статус
PORTB EQU 06h ; порт В

; Управляющие регистры портов ввода-вывода
TRISB EQU 86h ; для порта В

; Биты регистра STATUS
RP0 EQU 05h ; бит выбора страницы

; Биты регистра PORTB
DAT EQU 04h ; бит данных
SYN EQU 05h ; бит синхронизации

CBLOCK 0CH ; блок рабочих регистров
WORK1 ; переменные для циклов
WORK2
NUM ; сегменты индикатора
ENDC

org 00h ; начало исполняемого кода
GOTO START

org 04h ; программа обработки прерываний
retfie ; отсутствует

; Основная программа
START
; Инициализация PORTB
MOVLW B'11001111' ; настройка порта В
BSF STATUS,RP0 ; выбор банка 1
MOVWF TRISB ; установка RB4, RB5 на вывод
BCF STATUS,RP0 ; выбор банка 0
;
BSF PORTB,DAT ; установка битов DAT, SYN
BSF PORTB,SYN ; в регистр PORTB

MAIN ;основной цикл
MOVLW 1
CALL ZAZHECH ;рисуем 1
CALL PAUSE ;пауза
MOVLW 2 ;2
CALL ZAZHECH
CALL PAUSE
MOVLW 3 ;3
CALL ZAZHECH
CALL PAUSE
MOVLW 5 ;5
CALL ZAZHECH
CALL PAUSE
GOTO MAIN

;=============================================
; Преобразование BCD -> 7 сегментный код
; 0 - горит
;=============================================
LCDTable
addwf PC,F ; W + PC -> PC
retlw b'11000000' ; ..FEDCBA = '0'
retlw b'11111001' ; .....CB. = '1'
retlw b'10100100' ; .G.ED.BA = '2'
retlw b'10110000 9; ; .G..DCBA = '3'
retlw b'10011001' ; .GF..CB. = '4'
retlw b'10010010' ; .GF.DC.A = '5'
retlw b'10000010' ; .GFEDC.A = '6'
retlw b'11111000' ; .....CBA = '7'
retlw b'10000000' ; .GFEDCBA = '8'
retlw b'10010000' ; .GF.DCBA = '9'

; Подпрограмма «Зажечь»
ZAZHECH
CALL LCDTable ; получаем в W сегменты индикатора
MOVWF NUM ; сохраним в NUM
MOVLW D'8' ; 8 бит
MOVWF WORK1 ; в счетчик WORK1
M01
BCF PORTB,DAT ; установка в 0 RB4 (чтобы горело)
BTFSC NUM,0 ; если 0 бит в регистре NUM = 0, то пропускаем
BSF PORTB,DAT ; команду, если нет, то установка RB4 в 1 (чтобы потухло)

; синхронизация PORTB
BCF PORTB,SYN
BSF PORTB,SYN
RRF NUM,1 ; сдвиг вправо, через перенос
DECFSZ WORK1,1 ; по всем 8 битам
GOTO M01 ; переход на метку M01

; погасим остальные 24 сегмента
; бит DA T обязательно = 1, т.к. последний бит везде = 1
MOVLW D'24' ; количество
MOVWF WORK1
M02
BCF PORTB,SYN
BSF POR TB,SYN
DECFSZ WORK1,1
GOTO M02

RETURN ; возврат из подпрограммы

; Подпрограмма «Пауза»
PAUSE
MOVLW D'128'
MOVWF WORK1 ; в счетчик WORK1
CLRF WORK2 ; очистка регистра
LOOP
DECFSZ WORK2,1 ; уменьшить счетчик WORK2, если он
GOTO LOOP ; не равен 0, то вернуться на метку LOOP
DECFSZ WORK1,1 ; уменьшить счетчик WORK1, если он
GOTO LOOP ; не равен 0, то вернуться на метку LOOP
RETURN ; возврат из подпрограммы

END

-----
Люби своего ближнего, как самого себя

Ответ отправил: Лысков Игорь Витальевич (Старший модератор)
Ответ отправлен: 21.11.2010, 06:02
Номер ответа: 264235
Украина, Кировоград
Тел.: +380957525051
ICQ # 234137952
Mail.ru-агент: igorlyskov@mail.ru

Оценка ответа: 5
Комментарий к оценке:
Отлично! Спасибо!

Вам помог ответ? Пожалуйста, поблагодарите эксперта за это!
Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 264235 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:


  • Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2010, Портал RFPRO.RU, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2010.6.23 от 18.11.2010

    В избранное