Спасибо, что рекомендовали.
Купил бы в бумажном варианте, но в местном ПродалитЪе нету, а заказывать мне лень...
Код: Выделить всё
; птчк взлитай------------------------------
.org $00
; старт основной программы------------------
rjmp Start
; вектора прерываний------------------------
.org $01 ; External Interrupt Request 0
reti
.org $02 ; External Interrupt Request 1
reti
.org $03 ; Timer/Counter2 Compare Match
reti
.org $04 ; Timer/Counter2 Overflow
reti
.org $05 ; Timer/Counter1 Capture Event
reti
.org $06 ; Timer/Counter1 Compare Match A
reti
.org $07 ; Timer/Counter1 Compare Match B
reti
.org $08 ; Timer/Counter1 Overflow
reti
.org $09 ; Timer/Counter0 Overflow
rjmp ovf_tim0
.org $0a ; Serial Transfer Complete
reti
.org $0b ; USART, Rx Complete
reti
.org $0c ; USART Data Register Empty
reti
.org $0d ; USART, Tx Complete
reti
.org $0e ; ADC Conversion Complete
reti
.org $0f ; EEPROM Ready
reti
.org $10 ; Analog Comparator
reti
.org $11 ; 2-wire Serial Interface
reti
.org $12 ; Store Program Memory Ready
reti
.org INT_VECTORS_SIZE ; конец таблицы прерываний
;обработка прерываний------------------------------
ovf_tim0:
ldi r17, $ff
retiКод: Выделить всё
.equ tim0_tccr0 = (1<<CS01)
.equ tim0_tcnt = $60
.equ tim0_timsk = (1<<TOIE0) ;
Код: Выделить всё
ldi r16, tim0_tccr0
out TCCR0, r16
ldi r16, tim0_tcnt
out TCNT0, r16
ldi r16, tim0_timsk
out TIMSK, r16
sei Код: Выделить всё
.INCLUDE "m8def.inc"
.equ tim0_tccr0 = (1<<CS01)
.equ tim0_tcnt = $60
.equ tim0_timsk = (1<<TOIE0) ; ; птчк взлитай------------------------------
.org $00
; старт основной программы------------------
rjmp Start
; вектора прерываний------------------------
.org $01 ; External Interrupt Request 0
reti
.org $02 ; External Interrupt Request 1
reti
.org $03 ; Timer/Counter2 Compare Match
reti
.org $04 ; Timer/Counter2 Overflow
reti
.org $05 ; Timer/Counter1 Capture Event
reti
.org $06 ; Timer/Counter1 Compare Match A
reti
.org $07 ; Timer/Counter1 Compare Match B
reti
.org $08 ; Timer/Counter1 Overflow
reti
.org $09 ; Timer/Counter0 Overflow
rjmp ovf_tim0
.org $0a ; Serial Transfer Complete
reti
.org $0b ; USART, Rx Complete
reti
.org $0c ; USART Data Register Empty
reti
.org $0d ; USART, Tx Complete
reti
.org $0e ; ADC Conversion Complete
reti
.org $0f ; EEPROM Ready
reti
.org $10 ; Analog Comparator
reti
.org $11 ; 2-wire Serial Interface
reti
.org $12 ; Store Program Memory Ready
reti
.org INT_VECTORS_SIZE ; конец таблицы прерываний
;обработка прерываний------------------------------
ovf_tim0:
OUT TCNT0,R18
; ldi r17, $ff
IN R16,PORTB
EOR R16,R17
OUT PORTB,R16
reti
START:
LDI XH,HIGH(RAMEND)
OUT SPH,XH
LDI XL,LOW(RAMEND)
OUT SPL,XL
LDI R17,$FF
OUT DDRB,R17
ldi r16, tim0_tccr0
out TCCR0, r16
ldi r18, tim0_tcnt
out TCNT0, r18
; ldi r16, tim0_tcnt
; out TCNT0, r16
ldi r16, tim0_timsk
out TIMSK, r16
sei
RJMP PC
.EXITКод: Выделить всё
MainLoop:
; вызываем программы
menu:
in temp, PIND
sbrc temp, 0
rjmp start_auto
nop
nop
nop
rjmp menu
start_auto:
in temp, PIND
sbrc temp, 0
rjmp menu
nop
nop
nop
nop
rjmp start_auto
rjmp MainLoopМожно использовать 1 командуalex38779 писал(а): in temp, PIND
sbrc temp, 0
Код: Выделить всё
sbic PIND, 0Код: Выделить всё
MainLoop:
; вызываем программы
menu:
SBIS PIND,0
rjmp start_auto
adiw r24, $a ;эта команда работает с регистровыми парами R25:R24, X, Y, Z
; adiw r16, $a
nop
nop
nop
rjmp menu
start_auto:
SBIC PIND,0
rjmp menu
nop
nop
nop
nop
rjmp start_auto
; rjmp MainLoop
.EXITКод: Выделить всё
MainLoop:
; вызываем программы
; обработка кнопки старт-меню
menu:
sbic PIND, 0
rjmp start_auto
nop
nop
nop
rjmp menu
start_auto:
sbic PIND, 0
rjmp menu
nop
nop
nop
nop
rjmp start_auto
rjmp MainLoopКод: Выделить всё
menu:
sbic PIND, 0
rjmp menu
nop
nop
nop
rjmp menu
;start_auto:
; sbic PIND, 0
; rjmp menu
; nop
; nop
; nop
; nop
; rjmp start_auto
; rjmp MainLoop
Почитай, это про тебя. http://easyelectronics.ru/avr-uchebnyj- ... porty.htmlМурик писал(а):Есть на первый взгляд простая задача - вывести данные в часть выводов порта. Но при этом необходимо не изменить состояние и конфигурацию незадействованых выводов.
Как это не важно?Kavka писал(а):И не важно что считывать PIN или PORT - маской выделить только нужное.
Код: Выделить всё
in R16,PORTx
andi R16,0b11111000
ori R16,0b000000101
out PORTx,R16Скорее с битовыми операциями.Z_h_e писал(а):Вам советую сначала разобраться с PORTx, DDRx, PINx.
Часть порта используется в другом коде и можно сказать что о состоянии неиспользуемых выводов ничего не известно. Потому что если побитово анализировать DDR и брать биты с PIN или PORT, то код сильно усложнится.Kavka писал(а):Как трактовать эти биты (подтяжка или выход пина) зависит от того, что записано в соответствующий биты DDR.
Как раз такой случай. Но видимо проще всего будет побитово изменить состояние выводов о чем писал выше. Думал есть более правильный способ.Kavka писал(а):А если, например 5-7