На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Перед отправкой сообщения внимательно прочтите правила раздела!!!
1. Запрещается обсуждать написание вирусов, троянов и других вредоносных программ!
2. Помните, что у нас есть FAQ раздела Assembler и Полезные ссылки. Посмотрите, возможно, там уже имеется решение вашего вопроса.

3. Настоятельно рекомендуем обратить особое внимание на правила форума, которые нарушаются чаще всего:
  3.1. Заголовок темы должен кратко отражать её суть. Темы с заголовками типа "Срочно помогите!" или "Ассемблер" будут отправляться в Корзину для мусора.
  3.2. Исходники программ обязательно выделяйте тегами [code]...[/code] (одиночные инструкции можно не выделять).
  3.3. Нежелательно поднимать старые темы (не обновлявшиеся более года) без веской на то причины.

Не забывайте также про главные Правила форума!

Добро пожаловать и приятного вам общения!!! ;)
 
Модераторы: Jin X, Qraizer
  
> Программа на PIC 16c84
    Всем привет. Помогите досделать програмку.
    Задание звучит как-то так - Обеспечить выдачу на светодиоды VD1, VD2, VD3, VD4 младшей тетрады логической суммы дополнительного кода нажатых кнопок S1, S2, S3 и S4 и операнда 09h. Модуль ввода/вывода подключен к порту B и представлен на рис.2.
    (Рисунок в приложении)
    Прикреплённый файлПрикреплённый файлpic_modul.JPG (23,96 Кбайт, скачиваний: 575)

    Вот собственно что я написал (вообщем-то основу только)
    ExpandedWrap disabled
          LIST p=16c84
          INCLUDE "reg16c84.equ"
       
          list l=ON
          ORG 00h
          BSF STATUS, 5 ; Установить активным банк памяти 1
          MOVLW   0Fh   ; RB0-RB3 на ввод, RB4-RB7 на вывод
          MOVWF   TRISB     ; Запись в управляющий регистр
          GOTO    BEGIN:
              ORG 04h        
          GOTO    BEGIN:      
              ORG 05h
      BEGIN:              
          BCF STATUS, 5    ; Установить активным банк памяти 0
          MOVLW   B'10001000'  ; Разреш. прерыв. общее и от порта B
          MOVWF   INTCON
       
               ;тут нужно как-то переводить кнопки в дополнительный код если я правильно думаю
       
          MOVLW   09h     ; Помещаем в аккумулятор константу
          IORWF   PortB, 0    ; Сумма кода кнопок и 09h
          MOVWF   0Ch             ; Из аккумулятора в регистр
       
                ;сдвинуть надо на 4 позиции влево чтобы старшая тетрада стала младшей и совпала с диодами как-то так наверное -
       
              RLF     PORTB,4         ;сдвинуть содержимое влево
       
                   ;ну и выводим всё это дело в порт.. не знаю как...
       
              ;BSF     PORTB


    Помогите как досделать?.
    Заранее спасибо

    Добавлено
    Не работает картинка почему-то. Вообщем вот -

    user posted image
      Цитата Maca @
      ;ну и выводим всё это дело в порт.. не знаю как...

      Для начала неплохо бы настроить порт "не знаю как" на вывод. ;) Ибо, по умолчанию, при инициализации, как ни прискорбно, но все порты настраиваются на ввод... :( Ну можно, разумеется, пнуть разработчиков, чтобы устранили сей недостаток.... :D
        ExpandedWrap disabled
            LIST p=16F84A
            #include <P16F84A.inc>
           
            __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
           
                      cblock  0x0c
           
                  Var1
           
                      endc
           
                      org 0x0000
           
          Start:
                  clrf    PORTB
                  bsf     STATUS,RP0      ;Включение банка 1
                  movlw   b'00001111'
                  movwf   TRISB
                  bcf     STATUS,RP0      ;Включение банка 0
          MainLoop:
                  movf    PORTB, w
                  movwf   Var1
                  andlw   b'00001111'
                  btfsc   Var1, 3         ;знаковый разряд
                  goto    ToExtCode
          ToPort:
                  movlw   0x09
                  iorwf   Var1, f
                  swapf   Var1, w
                  andlw   b'11110000'
                  movwf   PORTB
                  goto    MainLoop
          ToExtCode:
                  comf    Var1, f
                  incf    Var1, f
                  bsf     Var1, 4
                  goto    ToPort
           
                      end

        Прикреплённый файлПрикреплённый файлSumma.rar (14,28 Кбайт, скачиваний: 126)
        Прикреплённый файлПрикреплённый файлSumma.rar (14,28 Кбайт, скачиваний: 111)
          Никаких прерываний по вашему листингу не возникнет, т.к. у 84 пика прерывание по изменению состояния PORTB
          работает только с пинами 4 - 7, а по схеме на них светодиоды висят!
          В архиве помимо asm и hex файлов лежит проект для Протеуса.
          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script execution time: 0,0326 ]   [ 20 queries used ]   [ Generated: 2.05.24, 20:18 GMT ]