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

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

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

Добро пожаловать и приятного вам общения!!! ;)
 
Модераторы: Jin X, Qraizer
  
> Помогите с задачей с PIC16F84A
    Помогите пожалуйста с программой для PIC16F84A. Задача такая: Нужно написать программу которая обеспечивала бы мигание светодиода подключенного к порту В с частотой 2Гц. При поступлении низкого сигнала на порт В5 загорался второй светодиод подключенный к порту А. Попеременное мигание осуществить с помощью прерываний инициируемых таймером. Программу написал но сердцем чувствую что что-то не так.
    Цитата

    List p=16F84a
    Include <c:\P16F84a.inc>
    _w equ 0x00b;
    _status equ 0x00d;
    PAGE;
    __CONFIG _CP_OFF & _XT_OSC & _PWRTE_ON &_WDT_OFF
    org 0;
    goto Mainline
    org 4
    int
    movwf_w;
    movf STATUS,w;
    movwf STATUS;
    bcf INTCON, T0IF
    movlw B'00000001'
    xorwf PORTB
    movwf STATUS;
    swapf_w;
    swapf_ww;
    retfie;
    Mainline
    bsf STATUS, RP0;
    movlw B'11111110'
    movlw TRISA;
    movlw B'11010111'
    movlw OPTION_REG;
    movlw B'11111110'
    movlw TRISB;
    bcf STATUS, RP0;
    movlw B'10100000'
    movwf INTCON;
    Loop
    btfsc PORTB, 5;
    goto Setbit;
    bcf PORTA,0;
    goto Loop;
    Setbit;
    Bsf PORTA, 0;
    goto Loop;
    end
      Цитата Spag @
      Программу написал но сердцем чувствую что что-то не так.

      Да, сердце не обманешь!!! :D Смотри:
      Цитата Spag @
      ExpandedWrap disabled
        movlw B'11111110'
        movlw TRISA;
      Честно говоря, я в тихом "Kernel panic"....А если учесть, сколько раз ты повторил сию ошибку... в 40 строках программы.... :wacko: :'(
        medved_68 Ну а в чем проблема тогда, расскажи :huh:
          Цитата Spag @
          medved_68 Ну а в чем проблема тогда, расскажи :huh:

          :blink: Так я привел в цитате. :wacko: И если приведенное ни о чем не говорит - то дальнейший диалог бесполезен. На данный момент.... :D
            PIC16F84 и PIC16C84 отличаются возможностью перезаписи?
              Цитата Gysmi @
              PIC16F84 и PIC16C84 отличаются возможностью перезаписи?

              Конечно. Более подробно здесь :D
                Вот если-бы не мой больничный - хрен-бы я чего написал!
                В архиве Proteus модель.
                Пользуися
                З.Ы. с тебя стакан! :)


                LIST p=16F84A
                #include <P16F84A.inc>

                __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC

                cblock 0x20

                STATUS_copy ;Копии содержимого регистров
                WREG_copy
                FSR_copy
                Timer ;Счётчик таймера
                OldLED0

                endc

                ;[Блок макросов]===========================================================
                bank0 macro ;Включение банка 0

                bcf STATUS,RP0

                endm

                bank1 macro ;Включение банка 1

                bsf STATUS,RP0

                endm

                #DEFINE LED0 PORTB
                #DEFINE LED1 PORTA,0
                #DEFINE SW0 PORTB,5

                org 0x0000

                goto Start

                org 0x0004

                movwf WREG_copy ;Сохраняем WREG
                movf STATUS, w
                movwf STATUS_copy ;Сохраняем STATUS
                bank0
                bcf INTCON,T0IF ;Сброс флага прерывания TMR0
                decf Timer, f ;Timer = Timer - 1
                btfss STATUS, Z
                goto Iret
                incf OldLED0, f ;Инвертируем бит 0 PORTB, мигаем светодиодом
                movf OldLED0, w
                movwf LED0
                movlw .125
                movwf Timer
                Iret:
                movlw .250
                movwf TMR0
                movf STATUS_copy, w
                movwf STATUS ;Восстанавливаем STATUS
                swapf WREG_copy, f ;Восстанавливаем WREG, MOVF использовать
                swapf WREG_copy, w ;нельзя т.к. эта команда портит STATUS
                retfie
                Start:
                clrf PORTA
                clrf PORTB
                bank1
                movlw b'00000000'
                movwf TRISA
                movlw b'00100000'
                movwf TRISB
                movlw b'00000011' ;пределитель 1:16 4000000/4/16=62500
                movwf OPTION_REG
                bank0
                movlw .125 ;62500/125=500
                movwf Timer
                movlw .250
                movwf TMR0 ;500/250=2Hz
                bsf INTCON,T0IE
                bsf INTCON,GIE
                MainLoop:
                btfsc SW0
                goto NoPress
                bsf LED1
                goto MainLoop
                NoPress:
                bcf LED1
                goto MainLoop

                end Прикреплённый файлПрикреплённый файлFlashLEDs.rar (12,31 Кбайт, скачиваний: 223)
                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                0 пользователей:


                Рейтинг@Mail.ru
                [ Script execution time: 0,0332 ]   [ 19 queries used ]   [ Generated: 2.05.24, 16:36 GMT ]