Чт апр 26, 2018 20:56:29
the picoPower BOD can be turned off in Extended Standby, Standby, Power Save and Power Down modes
Пт апр 27, 2018 05:06:18
Пт апр 27, 2018 07:01:50
the picoPower BOD can be turned off in Extended Standby, Standby, Power Save and Power Down modes
Пт апр 27, 2018 09:29:06
.INCLUDE "tn13Adef.inc"
.equ Fo=9600000
.CSEG
.ORG 0x0000
START0:
SER R22
OUT DDRB,R22
START:
SBI ACSR,ACD
LDI R20,1<<PRADC
OUT PRR,R20
LDI R16,128
OUT OCR0A,R16
OUT OCR0B,R16
LDI R16,1<<COM0A1|0<<COM0A0|1<<COM0B1|1<<COM0B0|1<<WGM01|1<<WGM00
; режим FAST
OUT TCCR0A,R16
LDI R16,1<<CS00
OUT TCCR0B,R16 ; Fo/1 режим
LDI R20,1<<SE|1<<SM1 ;POWER DOWN
LDI R21,1<<SE ; IDLE
LDI R22,1<<BPDS|1<<BPDSE
LDI R23,1<<BPDS
OUT MCUCR,R20 ;
OUT BODCR,R22
OUT MCUCR,R21
OUT BODCR,R23
;********************
WAIT:
SLEEP
RJMP WAIT
.EXIT
Пт апр 27, 2018 15:00:09
Вт май 01, 2018 08:02:24
Ср май 02, 2018 09:09:45
Ср май 02, 2018 09:18:55
Ср май 02, 2018 10:47:22
Как МК узнает в какую сторону двигаться?
Ср май 02, 2018 11:05:04
Ср май 02, 2018 13:34:30
Alexeyslav писал(а):Вы же даже задачу сформулировать толком не можете.
считал функционально законченной, поэтому и не стал выдавать всех тайнdumbass писал(а): мне нужно держать число в диапазоне от 0х00 до 0хFF.
.include "tn2313def.inc"
.def temp =R16
.def count =R17
;.def loop =R18
;.def loop2 =R19
.cseg
.org 0x00
rjmp init
;ТАБЛИЦА ВЕКТОРОВ ПРЕРЫВАНИЙ
.org INT0addr reti ;(0х01) Внешнее прерывание 0
.org INT1addr reti ;(0х02) Внешнее прерывание 1
.org ICP1addr reti ;(0х03) Захват таймера/счетчика Т1
.org OC1Aaddr reti ;(0х04) Совпадение А таймера/счетчика Т1
.org OVF1addr reti ;(0х05) Переполнение таймера/счетчика Т1
.org OVF0addr rjmp T0_OVF ;(0х06) Переполнение таймера/счетчика Т0
.org URXCaddr reti ;(0х07) USART, прием завершен
.org UDREaddr reti ;(0х08) Регистр данных USART пуст
.org UTXCaddr reti ;(0х09) USART, передача завершена
.org ACIaddr reti ;(0х0A) Прерывание по компаратору
.org PCIaddr reti ;(0х0B) Прерывание по изменению на любом контакте
.org OC1Baddr reti ;(0х0C) Совпадение В таймера/счетчика Т1
.org OC0Aaddr rjmp A0_cndn ;(0х0D) Совпадение А таймера/счетчика Т0
.org OC0Baddr rjmp B0_cndn ;(0х0E) Совпадение В таймера/счетчика Т0
.org USI_STARTaddr reti ;(0х0F) USI Стартовая готовность
.org USI_OVFaddr reti ;(0х10) USI Переполнение
.org ERDYaddr reti ;(0х11) EEPROM Готовность
.org WDTaddr reti ;(0х12) Переполнение сторожевого таймера
.org INT_VECTORS_SIZE
;ИНИЦИАЛИЗАЦИЯ СТЕКА И ПОРТОВ
init: ldi temp,RAMEND
out SPL,temp
ldi temp,0b00000100 ;PB2 на выход с 1
out DDRB,temp ;В на вход с подтяжкой
out PORTB,temp
ldi temp,0b00100000 ;PD5 на выход с 1
out DDRD,temp
out PORTD,temp ;D на вход с подтяжкой
;НАСТРОЙКА ТАЙМЕРА/СЧЕТЧИКА Т0
ldi temp,(1<<OCIE0B | 0<<TOIE0 | 1<<OCIE0A)
out TIMSK,temp
ldi temp,(1<<COM0A1 | 0<<COM0A0 | 1<<COM0B1 | 1<<COM0B0 | 1<<WGM00)
out TCCR0A,temp ;Выводы изм. сост. инверсным способом
ldi temp,(0<<CS02 | 0<<CS01 | 1<<CS00) ;1/256 (в работе делитель такой, в отладке 1/1)
out TCCR0B,temp
sei
ldi count,0x01 ;Задаем начальное значение
;ОСНОВНОЙ ЦИКЛ
MAIN: out OCR0A,count
out OCR0B,count
rjmp MAIN
;ПРЕРЫВАНИЕ ПО СОВПАДЕНИЮ В КАНАЛЕ А
A0_cndn: reti ; ЧТО ЗДЕСЬ НАПИСАТЬ?
;inc_: inc count
; reti
;dec_: dec count
; reti
;ПРЕРЫВАНИЕ ПО СОВПАДЕНИЮ В КАНАЛЕ В
B0_cndn:reti
;ПРЕРЫВАНИЕ ПО ПЕРЕПОЛНЕНИЮ TCNT0
T0_OVF: reti
cpi count,0xFF
brne inc_cnt
breq dec_cnt
inc_cnt: inc, count
reti
dec_cnt: dec,count
reti
BOB51 писал(а):Если подпрограммы обработки в случае совпадения разный можно или дополнительный
флажок использовать или "косвенный переход" вида ICALL/IJMP
Ярослав555 писал(а):Переменная-флаг
Ср май 02, 2018 13:46:32
Ср май 02, 2018 15:40:14
Перед входом в осн. цикл делаем вот так:
ldi count,0x00
set
Когда случается совпадение счетного рег. и рег. сравнения (т.е. происх. прерыв. в канале А), делаем такое:
;ПРЕРЫВАНИЕ ПО СОВПАДЕНИЮ В КАНАЛЕ А
A0_cndn: brts inc_cnt
brtc dec_cnt
inc_cnt: inc count
cpi count,0xFF
breq PC+3
set
rjmp MAIN
clt
rjmp MAIN
dec_cnt: dec count
cpi count,0x00
breq PC+3
clt
rjmp MAIN
set
rjmp MAIN
Ср май 02, 2018 16:01:57
Ср май 02, 2018 17:32:35
Ср май 02, 2018 20:34:00
BOB51 писал(а):регистрв "старшей" половине РСФ.
BOB51 писал(а):У Т более интересные возможности/назначение.
trofim2 писал(а):В качестве флагов очень удобно использовать регистр GPIOR
Перед входом в осн цикл прописываем так:
ldi low_,0x00
ldi high_,0xFF
ldi count,0x00
sbi GPIOR0,2 ;Рег. и бит в котором храним исп. флаг
В обработке прерывания по каналу А так:
A0_cndn: sbis GPIOR0,2
sbic GPIOR0,2
rjmp inc_cnt
rjmp dec_cnt
inc_cnt: inc count
cpse count,high_
reti
cbi GPIOR0,2
reti
dec_cnt: dec count
cpse count,low_
reti
sbi GPIOR0,2
reti
Ср май 02, 2018 22:24:22
Чт май 03, 2018 07:07:09
Чт май 03, 2018 10:02:53
Alexeyslav писал(а):при том что на входе вы сохраняете регистр состояния, а на выходе восстанавливаете и всё что менялось в обработчике идёт под хвост.
akl писал(а):Прерывания по сравнению не нужны, остаются только прерывание по переполнению.
Чт май 03, 2018 10:53:42