Страница 1 из 1

Детский вопрос по PIC Assembler

Добавлено: Пн авг 22, 2016 20:36:56
Coldheart
Подскажите пожалуйсто...
По команде сдвига RLF
Имеем код бегущего огонька для PIC16F84

Код: Выделить всё

            LIST        P=PIC16F84A
            __CONFIG    0x3FF1

STATUS      EQU         0x03
PORTB       EQU         0x06
TRISB       EQU         0x06
Reg_1       EQU         0x0C
Reg_2       EQU         0x0D
Reg_3       EQU         0x0E

            org         0           ; начало программы            
; подготовительные моменты
            bsf         STATUS,5    ; переход в Банк 1
            clrf        TRISB
            bcf         STATUS,5    ; переход назад в Банк 0
            clrf        PORTB       ; очистка порта
            bsf         STATUS,0    ; установка нулевого бита в единицу

; установка сигналов на порту B
m1          rlf         PORTB,1     ; <<< сдвиг в регистре PORTB
            call        Pause       ; <<<
            goto        m1          ; <<< переход на метку (зацикливание)


;delay = 500000 machine cycles
Pause  задержка..
           
            return

            end                 
Подскажите, почему такая-же фишка не работает с 16f676(на секунду появляется высокий уровень на PC0, а дальше - тишина), возможно из-за неполноценного PortС?? И почему в строчке RLF PORTC,1, стоит именно единица?

Код: Выделить всё

            LIST        P=PIC16F676
            __CONFIG    0x03115

STATUS      EQU         0x03
PORTC       EQU         0x07
TRISC       EQU         0x07
Reg_1       EQU         0x20
Reg_2       EQU         0x21
Reg_3       EQU         0x22

            org         0           ; начало программы            
; подготовительные моменты
            bsf         STATUS,5    ; переход в Банк 1
            clrf        TRISC
            bcf         STATUS,5    ; переход назад в Банк 0
            clrf        PORTC       ; очистка порта
            bsf         STATUS,0    ; установка нулевого бита в единицу

; установка сигналов на порту B
m1          rlf         PORTC,1     ; <<< сдвиг в регистре PORTC
            call        Pause       ; <<<
            goto        m1          ; <<< переход на метку (зацикливание)

;delay = 500000 machine cycles
Pause    задержка
           
            return


            end             

Re: Детский вопрос по PIC Assembler

Добавлено: Пн авг 22, 2016 21:01:54
botchin
Coldheart писал(а):возможно из-за неполноценного PortС??
Прочитайте документацию на 16f676. PortС по умолчанию является входом ADC. Eго надо определить как цифровой вход/въход.
Coldheart писал(а):почему в строчке RLF PORTC,1, стоит именно единица?
Прочитайте документацию на 16f676. Раздел Instruction set summary там (объчно) есть табличка OPCODE FIELD DESCRIPTION там и указано как работает ета единица (или ноль). 1- запис в регистре, 0 в акумуляторе

Re: Детский вопрос по PIC Assembler

Добавлено: Пн авг 22, 2016 21:09:28
Zhuk72
Для начала откройте это.
Coldheart писал(а): Подскажите, почему такая-же фишка не работает с 16f676(на секунду появляется высокий уровень на PC0, а дальше - тишина), возможно из-за неполноценного PortС??
Стр. 28-29
Coldheart писал(а): И почему в строчке RLF PORTC,1, стоит именно единица?
Стр. 73-74

P.S. Уже опередили ))