ВСЁ по прошивке и программированию AT90S2313/ATTiny2313

Обсуждаем контроллеры компании Atmel.
Ответить
Родился
Сообщения: 3
Зарегистрирован: Вс апр 28, 2013 08:16:25

Сообщение Wolfness »

Добрый день.
Требуется при нажатии кнопки 1 раз вывести на 7-сегм. инд. "1" и выполнить определенный код. При нажатии этой кнопки второй раз, ввести "2" и выполнить другой код.
Вот не доходит как реализовать выполнение действий при повторном нажатии кнопки. Вот схема в Протеусе.
http://www.fayloobmennik.net/2828297
Вот сам код.

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

#include <avr/io.h>
#define F_CPU 1000000UL
#include <util/delay.h>

int main(void)
{
	unsigned char dig_0 = 0x3f; //0
	unsigned char dig_1 = 0x06; //1
	unsigned char dig_2 = 0x5b; //2
	unsigned int cnt = 1;

	DDRD = 0x00;
	PORTD = 0xff;
	DDRB = 0xff;
	PORTB = dig_0;

	while (1)
	{
		if((PIND&(1 << PD0)) == 0) //Если нажата кнопка 
		{
			while(PORTB == dig_0) 
			{
				cnt = 0;
				PORTB = dig_1;
				_delay_ms(100);
			}	
		}
		while((PIND&(1 << PD0)) == 1){}	//Ожидание отпускания кнопки
		if((PIND&(1 << PD0)) == 0&&cnt == 0)
		{
				PORTB = dig_2;
				_delay_ms(100);
				cnt = 1;				
		}
	}
}
Двойку на индикатор ну никак не выводит. Весь день сижу, а ошибку найти не могу.
Реклама
Родился
Сообщения: 4
Зарегистрирован: Пн май 06, 2013 16:03:29

Сообщение lucker21 »

Здраствуйте! Подскажите как реализовать 2 задержки на разное время в схеме динамической индикации, 1 задержку на смену индикаторов, 2ую на смену цифры.Требуеться чтобы на 4ех индикаторах по очереди загорались цифры 123456789abcdef,т.е 1 индикаторе загорелся 1 на,на 2ом 2 и т.д.У меня получаеться либо чтобы на 1 индикаторе перебирались числа, либо чтобы менялись индикаторы. Шаблон 2ую таймеров что дал нам преподователь я не понял,подскажите как использовать.

Спойлер

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

.include "tn2313def.inc"
.def	temp=r16
.dseg
timer1:	.byte 1								; 1 ячейку под переменную timer1
timer2:	.byte 1
.cseg
.org 0
	rjmp	init
.org OVF0addr
	rjmp	T0_OVF
init:
	ldi	R16,low(RamEnd)
	out	spl,R16
; настройка портов
	ldi	R16,0b11111111 
        out	ddrb,R16
	ldi	R16,0b00001111
		out	ddrd,R16
; настройка таймера счетчика T0

	cli
	ldi	temp,	(1<<cs00)|(1<<cs02)
	out	TCCR0B,	temp						
	ldi	temp,	24
	out	TCNT0,	temp						
	ldi	temp,	1<<TOIE0					
	out	TIMSK,	temp						
	sei
main: 
	RJMP  main

	T0_OVF:
	in	temp,	SREG
	push	temp

	lds	temp,	timer1							
	dec	temp									
	sts	timer1,	temp							

	lds	temp,	timer2
	dec	temp
	sts	timer2,	temp

	pop	temp
	out	SREG,	temp
	reti
Реклама
Друг Кота
Аватара пользователя
Сообщения: 6323
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Сообщение Jack_A »

Бред сивой кобылы, а не таймер. Будут 2 одинаковых выдержки по 256 интервалов прерывания, сдвинутые на случайное число интервалов, поскольку timer1, timer2 в начале не определены.
СпойлерT0_OVF:
in temp, SREG
push temp

lds temp, timer1
dec temp
brne _20
ldi temp,ConstT1
_20:
sts timer1, temp

lds temp, timer2
dec temp
brne _30
ldi temp,ConstT2
_30:
sts timer2, temp

pop temp
out SREG, temp
reti
Родился
Сообщения: 4
Зарегистрирован: Пн май 06, 2013 16:03:29

Сообщение lucker21 »

*поправка задачи требуеться чтобы цифры бежали с 1 по f .подскажите как влючить в программу эти 2 таймера. попробовал но чёт не работает (
Спойлер.include "tn2313def.inc"
.def Temp1=R16
.def Temp2=R17
.def Temp3=R18
.def Temp4=R19
.def Temp=R20





.dseg
timer1: .byte 1 ; 1 ячейку под переменную timer1
timer2: .byte 1
Digit: .byte 4

.cseg
.org 0
rjmp init
.org OVF0addr
rjmp T0_OVF
init:
ldi R16,low(RamEnd)
out spl,R16
; настройка портов
ldi R16,0b11111111
out ddrb,R16
ldi R16,0b00001111
out ddrd,R16
; настройка таймера счетчика T0

cli
ldi temp, (1<<cs00)|(1<<cs02)
out TCCR0B, temp3
ldi temp, 24
out TCNT0, temp3
ldi temp, 1<<TOIE0
out TIMSK, temp3
sei
main:
RJMP main

T0_OVF:
in temp3, SREG
push temp3

lds temp3, timer1
dec temp3
ldi temp3,248
brne t1
t1:

sts timer1, temp3

lds temp3, timer2
dec temp3
ldi temp3,128
brne t2
t2:

sts timer2, temp3

pop temp3
out SREG, temp3
reti

ldi Temp,1
sts Digit ,Temp ;загрузка начальных значений
ldi Temp,2
sts Digit+1,Temp
ldi Temp,3
sts Digit+2,Temp
ldi Temp,4
sts Digit+3,Temp

ldi Temp,5
sts Digit+4 ,Temp ;загрузка начальных значений
ldi Temp,6
sts Digit+5,Temp
ldi Temp,7
sts Digit+6,Temp
ldi Temp,8
sts Digit+7,Temp


ldi Temp,9
sts Digit+8,Temp ;загрузка начальных значений
ldi Temp,0
sts Digit+9,Temp
ldi Temp,10
sts Digit+10,Temp
ldi Temp,11
sts Digit+11,Temp



ldi Temp,12
sts Digit+12,Temp ;загрузка начальных значений
ldi Temp,13
sts Digit+13,Temp
ldi Temp,14
sts Digit+14,Temp
ldi Temp,15
sts Digit+15,Temp




Display:
;последовательный вывод на индикацию содержимого
;переменной Digit
;111111111111111111111111111111111111111111111111111111111111111111111111111111111
lds Temp1,Digit ;загружаем 0-ю ячейку
ldi Temp,0b00001110 ;активируем 0-й разряд
out PortD,Temp
rcall Decoder ;вызываем 7-сегм. декодер
out PortB,Temp1 ;выводим значение в порт
ldi Temp3,TCNT0
sts timer1,Temp3 ;ждем

lds Temp1,Digit+1 ;и .т.д
ldi Temp,0b00001101
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3

lds Temp1,Digit+2
ldi Temp,0b00001011
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3

lds Temp1,Digit+3
ldi Temp,0b00000111
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3

ldi Temp3,TCNT0
sts timer2,Temp3
;2222222222222222222222222222222222222222222222222222222222222222222222222222222
lds Temp1,Digit+1 ;и .т.д
ldi Temp,0b00001101
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3

lds Temp1,Digit+2
ldi Temp,0b00001011
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3

lds Temp1,Digit+3
ldi Temp,0b00000111
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3


lds Temp1,Digit+4 ;загружаем 0-ю ячейку
ldi Temp,0b00001110 ;активируем 0-й разряд
;индикации
out PortD,Temp
rcall Decoder ;вызываем 7-сегм. декодер
out PortB,Temp1 ;выводим значение в порт
ldi Temp3,TCNT0
sts timer1,Temp3 ;ждем

ldi Temp3,TCNT0
sts timer2,Temp3

;333333333333333333333333333333333333333333333333333333333333333333333333333333

lds Temp1,Digit+2
ldi Temp,0b00001011
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3

lds Temp1,Digit+3
ldi Temp,0b00000111
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3


lds Temp1,Digit+4 ;загружаем 0-ю ячейку
ldi Temp,0b00001110 ;активируем 0-й разряд
;индикации
out PortD,Temp
rcall Decoder ;вызываем 7-сегм. декодер
out PortB,Temp1 ;выводим значение в порт
ldi Temp3,TCNT0
sts timer1,Temp3


lds Temp1,Digit+5 ;и .т.д
ldi Temp,0b00001101
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3

ldi Temp3,TCNT0
sts timer2,Temp3

;44444444444444444444444444444444444444444444444444444444444444444444444444444444444


lds Temp1,Digit+3
ldi Temp,0b00000111
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3


lds Temp1,Digit+4 ;загружаем 0-ю ячейку
ldi Temp,0b00001110 ;активируем 0-й разряд
;индикации
out PortD,Temp
rcall Decoder ;вызываем 7-сегм. декодер
out PortB,Temp1 ;выводим значение в порт
ldi Temp3,TCNT0
sts timer1,Temp3 ;ждем


lds Temp1,Digit+5 ;и .т.д
ldi Temp,0b00001101
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3



lds Temp1,Digit+6
ldi Temp,0b00001011
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3

ldi Temp3,TCNT0
sts timer2,Temp3

;5555555555555555555555555555555555555555555555555555555555555555555555555555555555555

lds Temp1,Digit+4 ;загружаем 0-ю ячейку
ldi Temp,0b00001110 ;активируем 0-й разряд
;индикации
out PortD,Temp
rcall Decoder ;вызываем 7-сегм. декодер
out PortB,Temp1 ;выводим значение в порт
ldi Temp3,TCNT0
sts timer1,Temp3 ;ждем


lds Temp1,Digit+5 ;и .т.д
ldi Temp,0b00001101
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3



lds Temp1,Digit+6
ldi Temp,0b00001011
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3

lds Temp1,Digit+7
ldi Temp,0b00000111
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3

ldi Temp3,TCNT0
sts timer2,Temp3

;66666666666666666666666666666666666666666666666666666666666666666666666666666666666666


lds Temp1,Digit+5 ;и .т.д
ldi Temp,0b00001101
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3

lds Temp1,Digit+6
ldi Temp,0b00001011
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3

lds Temp1,Digit+7
ldi Temp,0b00000111
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3

lds Temp1,Digit+8 ;загружаем 0-ю ячейку
ldi Temp,0b00001110 ;активируем 0-й разряд
;индикации
out PortD,Temp
rcall Decoder ;вызываем 7-сегм. декодер
out PortB,Temp1 ;выводим значение в порт
ldi Temp3,TCNT0
sts timer1,Temp3 ;ждем

ldi Temp3,TCNT0
sts timer2,Temp3

;777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777

lds Temp1,Digit+6
ldi Temp,0b00001011
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3

lds Temp1,Digit+7
ldi Temp,0b00000111
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3

lds Temp1,Digit+8 ;загружаем 0-ю ячейку
ldi Temp,0b00001110 ;активируем 0-й разряд
out PortD,Temp
rcall Decoder ;вызываем 7-сегм. декодер
out PortB,Temp1 ;выводим значение в порт
ldi Temp3,TCNT0
sts timer1,Temp3 ;ждем

lds Temp1,Digit+9 ;и .т.д
ldi Temp,0b00001101
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3

ldi Temp3,TCNT0
sts timer2,Temp3

;888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888


lds Temp1,Digit+7
ldi Temp,0b00000111
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3

lds Temp1,Digit+8 ;загружаем 0-ю ячейку
ldi Temp,0b00001110 ;активируем 0-й разряд
;индикации
out PortD,Temp
rcall Decoder ;вызываем 7-сегм. декодер
out PortB,Temp1 ;выводим значение в порт
ldi Temp3,TCNT0
sts timer1,Temp3 ;ждем

lds Temp1,Digit+9 ;и .т.д
ldi Temp,0b00001101
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3

lds Temp1,Digit+10
ldi Temp,0b00001011
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3

ldi Temp3,TCNT0
sts timer2,Temp3

;99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999

lds Temp1,Digit+8 ;загружаем 0-ю ячейку
ldi Temp,0b00001110 ;активируем 0-й разряд
;индикации
out PortD,Temp
rcall Decoder ;вызываем 7-сегм. декодер
out PortB,Temp1 ;выводим значение в порт
ldi Temp3,TCNT0
sts timer1,Temp3 ;ждем

lds Temp1,Digit+9 ;и .т.д
ldi Temp,0b00001101
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3

lds Temp1,Digit+10
ldi Temp,0b00001011
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3

lds Temp1,Digit+11
ldi Temp,0b00000111
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3

ldi Temp3,TCNT0
sts timer2,Temp3

;1010101010101010101101010101010100000000000000000000000000000000000000000000000000000000000000000000000000000000

lds Temp1,Digit+9 ;и .т.д
ldi Temp,0b00001101
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3

lds Temp1,Digit+10
ldi Temp,0b00001011
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3

lds Temp1,Digit+11
ldi Temp,0b00000111
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3

lds Temp1,Digit+12 ;загружаем 0-ю ячейку
ldi Temp,0b00001110 ;активируем 0-й разряд
out PortD,Temp
rcall Decoder ;вызываем 7-сегм. декодер
out PortB,Temp1 ;выводим значение в порт
ldi Temp3,TCNT0
sts timer1,Temp3

ldi Temp3,TCNT0
sts timer2,Temp3

;111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111

lds Temp1,Digit+10
ldi Temp,0b00001011
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3

lds Temp1,Digit+11
ldi Temp,0b00000111
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3

lds Temp1,Digit+12 ;загружаем 0-ю ячейку
ldi Temp,0b00001110 ;активируем 0-й разряд
out PortD,Temp
rcall Decoder ;вызываем 7-сегм. декодер
out PortB,Temp1 ;выводим значение в порт
ldi Temp3,TCNT0
sts timer1,Temp3

lds Temp1,Digit+13 ;и .т.д
ldi Temp,0b00001101
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3

ldi Temp3,TCNT0
sts timer2,Temp3

;12222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222

lds Temp1,Digit+11
ldi Temp,0b00000111
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3

lds Temp1,Digit+12 ;загружаем 0-ю ячейку
ldi Temp,0b00001110 ;активируем 0-й разряд
out PortD,Temp
rcall Decoder ;вызываем 7-сегм. декодер
out PortB,Temp1 ;выводим значение в порт
ldi Temp3,TCNT0
sts timer1,Temp3

lds Temp1,Digit+13 ;и .т.д
ldi Temp,0b00001101
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3

lds Temp1,Digit+14
ldi Temp,0b00001011
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3

ldi Temp3,TCNT0
sts timer2,Temp3

;1313111111111113333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333


lds Temp1,Digit+12 ;загружаем 0-ю ячейку
ldi Temp,0b00001110 ;активируем 0-й разряд
out PortD,Temp
rcall Decoder ;вызываем 7-сегм. декодер
out PortB,Temp1 ;выводим значение в порт
ldi Temp3,TCNT0
sts timer1,Temp3

lds Temp1,Digit+13 ;и .т.д
ldi Temp,0b00001101
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3

lds Temp1,Digit+14
ldi Temp,0b00001011
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3


lds Temp1,Digit+15
ldi Temp,0b00000111
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3
ldi Temp3,TCNT0
sts timer2,Temp3
ret


Decoder:
;преобразование двоичного числа
;в код 7-сегментного индикатора

ldi ZL,Low(DcMatrix*2) ;инициализация массива
ldi ZH,High(DcMatrix*2)

ldi Temp2,0 ;прибавление переменной
add ZL,Temp1 ;к 0-му адресу массива
adc ZH,Temp2

lpm ;загрузка значения
mov Temp1,r0

ret

DcMatrix:
;массив - таблица истинности декодера
; hgfedcba hgfedcba
.db 0b11000000,0b11111001 ;0,1
.db 0b10100100,0b10110000 ;2,3
.db 0b10011001,0b10010010 ;4,5
.db 0b10000010,0b11111000 ;6,7
.db 0b10000000,0b10010000 ;8,9
.db 0b10001000,0b10000011
.db 0b11000110,0b10100001
.db 0b10000110,0b10001110
Последний раз редактировалось Gudd-Head Вт май 07, 2013 09:28:52, всего редактировалось 1 раз.
Причина: Нарушение п.2.5 Правил Форума
Реклама
Эиком - электронные компоненты и радиодетали
Родился
Сообщения: 4
Зарегистрирован: Пн май 06, 2013 16:03:29

Сообщение lucker21 »

уже разобрался)
Реклама
Родился
Сообщения: 4
Зарегистрирован: Пн май 06, 2013 16:03:29

Сообщение lucker21 »

подскажите пожалуйста как в старший регистр задать данные из памяти,а потом доставать их через y+ со смещением. идея чтобы в темп5 загружались цифры которые загружаються из матрицы,а нога отвечала за индикаторы...
СпойлерDisplay:


ldi noga,0
ldi YH,high(DcMatrix*2)
ldi YL,low(DcMatrix*2)
add ZL,temp5
adc ZH,temp4


d1:
ld temp5,y
inc noga
cpi noga,5
breq display
rcall decoder1
out PortD,noga
out portb,temp5
rjmp d1
ret
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 650
Зарегистрирован: Пн июн 18, 2012 12:01:04
Откуда: Челябинская область, Копейск

Сообщение zero648 »

команды для индексных регистров:
загрузка из памяти:
ldd R,(Y+n)
сохранение в памяти:
std R,(Y+n)
n = 0...63
Открыл глаза
Аватара пользователя
Сообщения: 64
Зарегистрирован: Пт ноя 18, 2011 18:43:01

Сообщение ATrosh »

Уважаемые коты! В даташите в разделе ВНЕШНИЕ ПРЕРЫВАНИЯ, НАЗНАЧЕНИЕ и РЕЖИМ РАБОТЫ сказано "Выбор одного из режимов производится при помощи регистра управления внешними прерываниями - EICRA" далее идет описание регистра MCUCR c битами ISC11, ISC10 и т.д., но изменение этих битов в программе не дает никаких изменений. Прерывание на INT1 происходит только по низкому входному уровню. Информации о регистре EICRA не нашел (может плохо искал :dont_know: ). Короче говоря подскажите кто может :)
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

Сообщение ChipKiller »

Короче говоря подскажите кто может
.... у ATtiny2313А, кажется, прерывание можно задействовать на любом выводе (PCINTx) - ИМХО лучше написать, что нужно получить в итоге
Грызет канифоль
Аватара пользователя
Сообщения: 299
Зарегистрирован: Вт июн 15, 2010 07:16:42
Откуда: Иркутск

Сообщение Rimsky »

ATrosh писал(а):Уважаемые коты! В даташите в разделе ВНЕШНИЕ ПРЕРЫВАНИЯ, НАЗНАЧЕНИЕ и РЕЖИМ РАБОТЫ сказано "Выбор одного из режимов производится при помощи регистра управления внешними прерываниями - EICRA" далее идет описание регистра MCUCR c битами ISC11, ISC10 и т.д., но изменение этих битов в программе не дает никаких изменений. Прерывание на INT1 происходит только по низкому входному уровню. Информации о регистре EICRA не нашел (может плохо искал :dont_know: ). Короче говоря подскажите кто может :)

Это опечатка, регистр EICRA есть в относительно новых атмегах таких как Atmega48...328. Видимо документацию тоже частично копи-пастят, что допускает такие ляпы. Для Attiny2313 биты режимов находятся в регистре MCUCR.
Контактная информация:
Открыл глаза
Аватара пользователя
Сообщения: 64
Зарегистрирован: Пт ноя 18, 2011 18:43:01

Сообщение ATrosh »

Спасибо за ответы :)) . Буду пытать Тинку!
Друг Кота
Аватара пользователя
Сообщения: 15605
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Советую использовать последнюю из имеющихся на сайте Atmel редакцию документации (даташитов).
У меня была doc8246b.pdf, возможно сейчас и поновее уже имеется...
При симуляции в студии внимательно прочитать ограничения дебаггера для симулируемого кристалла!
:beer:
Родился
Сообщения: 10
Зарегистрирован: Пн янв 28, 2013 08:08:25

Сообщение ch73 »

Кто в теме, подскажите пожалуйста, корректно ли в ATTiny2313 для выхода из подпрограммы использовать такой прием: вместо ret сделать 2 раза pop?
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Сообщение ibiza11 »

так вы обеспечите очистку стека от адреса возврата, но не вернетесь на то место, откуда вызывалась подпрограмма.
Ставим плюсы: )
Родился
Сообщения: 10
Зарегистрирован: Пн янв 28, 2013 08:08:25

Сообщение ch73 »

Да, понимаю, мне так и нужно, из подпрограммы будет 2 выхода, один через ret, другой как-бы "принудительный", через pop, pop, rjmp. Просто уточнить хочу, на 2313 кроме стека ничего чистить не нужно? Не пинайте, последний раз пользовался ассемблером когда-то в 90-х на Spectrumе, если кто-нибудь такой помнит ;)))
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Сообщение ibiza11 »

больше ничего не нужно) только адрес возврата.
Ставим плюсы: )
Родился
Сообщения: 10
Зарегистрирован: Пн янв 28, 2013 08:08:25

Сообщение ch73 »

Спасибо! (Плюс поставил))
Собутыльник Кота
Аватара пользователя
Сообщения: 2896
Зарегистрирован: Сб ноя 13, 2010 12:53:25
Откуда: приходит весна?

Сообщение B@R5uk »

Подскажите, пожалуйста, существует ли для самостоятельного изготовления какой-нибудь простой последовательный USB-программатор, поддерживаемый AVRStudio? По типу такого. Или же такого рода вещи всегда будут требовать установки сторонних самопальных драйверов и программ?
Мудрый кот
Аватара пользователя
Сообщения: 1810
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

Сообщение Kavka »

Последний раз редактировалось Kavka Пт авг 09, 2013 06:19:00, всего редактировалось 1 раз.
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Собутыльник Кота
Аватара пользователя
Сообщения: 2896
Зарегистрирован: Сб ноя 13, 2010 12:53:25
Откуда: приходит весна?

Сообщение B@R5uk »

Kavka, спасибо. Завтра внимательно повтыкаю, что там пишут. :)
Ответить

Вернуться в «AVR»