Прерывание изменения Пина Ассемблера в Atmega328p - что я делаю не так? - PullRequest
0 голосов
/ 05 июня 2018

Я пытаюсь сделать свои первые шаги в программировании PCI в Ассемблере.Он работает в симуляторе (AVR Studio), но не работает при загрузке в мой Arduino.Идея состоит в том, чтобы включить свет при срабатывании прерывания.Пожалуйста, помогите мне выяснить, что не так.

.include "m328pdef.inc"

.def temp0 = R16
.def select = R17
.def temp1 = R18
.def flagint = R20

.org $0000
            jmp SETUP
.org $0012
            jmp PCI_ROT

SETUP:      ldi temp0, low(RAMEND)
            out SPL, temp0
            ldi temp0, high(RAMEND)
            out SPH, temp0      

            ldi temp0, $FF
            out DDRD, temp0     ; Arduino Pins 22 - 29 (PORTA), Data Bit 0 - 7
            out PORTD, temp0
            ldi temp0, $00
            out DDRB, temp0

            ldi temp0, $01      ; PCI 0 activated, Arduino Pin 21
            sts PCICR, temp0
            ldi temp0, $03      ; PCI pins activated
            sts PCMSK0, temp0
            sei

MAIN:       nop
            jmp MAIN

PCI_ROT:    in select, PINB
            ldi flagint, $01
            rcall SWITCH
            reti

SWITCH:     in temp0, PIND
            ldi temp1, $FF
            eor temp0, temp1
            out PORTD, temp0
            ret 

1 Ответ

0 голосов
/ 05 июня 2018

Я заставил PCI работать сейчас, и проблема была в слабом переключателе.Я сделал простой выключатель с двумя резисторами и конденсатором.Смотрите здесь: https://www.allaboutcircuits.com/technical-articles/switch-bounce-how-to-deal-with-it/

...