Страница 114 из 132

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

Добавлено: Вс апр 28, 2013 13:19:40
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;				
		}
	}
}
Двойку на индикатор ну никак не выводит. Весь день сижу, а ошибку найти не могу.

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

Добавлено: Пн май 06, 2013 19:44:50
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

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

Добавлено: Пн май 06, 2013 20:48:20
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

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

Добавлено: Вт май 07, 2013 09:19:41
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

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

Добавлено: Вт май 07, 2013 17:14:39
lucker21
уже разобрался)

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

Добавлено: Пт май 10, 2013 19:31:23
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

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

Добавлено: Пн май 13, 2013 12:53:29
zero648
команды для индексных регистров:
загрузка из памяти:
ldd R,(Y+n)
сохранение в памяти:
std R,(Y+n)
n = 0...63

ATtiny 2313 режимы прерывания INT0 и INT1

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

Re: ATtiny 2313 режимы прерывания INT0 и INT1

Добавлено: Вс май 19, 2013 09:34:04
ChipKiller
Короче говоря подскажите кто может
.... у ATtiny2313А, кажется, прерывание можно задействовать на любом выводе (PCINTx) - ИМХО лучше написать, что нужно получить в итоге

Re: ATtiny 2313 режимы прерывания INT0 и INT1

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

Это опечатка, регистр EICRA есть в относительно новых атмегах таких как Atmega48...328. Видимо документацию тоже частично копи-пастят, что допускает такие ляпы. Для Attiny2313 биты режимов находятся в регистре MCUCR.

Re: ATtiny 2313 режимы прерывания INT0 и INT1

Добавлено: Вс май 19, 2013 11:16:10
ATrosh
Спасибо за ответы :)) . Буду пытать Тинку!

Re: ATtiny 2313 режимы прерывания INT0 и INT1

Добавлено: Вс май 19, 2013 12:44:50
BOB51
Советую использовать последнюю из имеющихся на сайте Atmel редакцию документации (даташитов).
У меня была doc8246b.pdf, возможно сейчас и поновее уже имеется...
При симуляции в студии внимательно прочитать ограничения дебаггера для симулируемого кристалла!
:beer:

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

Добавлено: Ср май 22, 2013 08:11:46
ch73
Кто в теме, подскажите пожалуйста, корректно ли в ATTiny2313 для выхода из подпрограммы использовать такой прием: вместо ret сделать 2 раза pop?

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

Добавлено: Ср май 22, 2013 08:20:24
ibiza11
так вы обеспечите очистку стека от адреса возврата, но не вернетесь на то место, откуда вызывалась подпрограмма.

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

Добавлено: Ср май 22, 2013 08:31:18
ch73
Да, понимаю, мне так и нужно, из подпрограммы будет 2 выхода, один через ret, другой как-бы "принудительный", через pop, pop, rjmp. Просто уточнить хочу, на 2313 кроме стека ничего чистить не нужно? Не пинайте, последний раз пользовался ассемблером когда-то в 90-х на Spectrumе, если кто-нибудь такой помнит ;)))

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

Добавлено: Ср май 22, 2013 11:54:19
ibiza11
больше ничего не нужно) только адрес возврата.

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

Добавлено: Ср май 22, 2013 13:32:19
ch73
Спасибо! (Плюс поставил))

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

Добавлено: Чт авг 08, 2013 20:14:51
B@R5uk
Подскажите, пожалуйста, существует ли для самостоятельного изготовления какой-нибудь простой последовательный USB-программатор, поддерживаемый AVRStudio? По типу такого. Или же такого рода вещи всегда будут требовать установки сторонних самопальных драйверов и программ?

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

Добавлено: Чт авг 08, 2013 21:59:19
Kavka

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

Добавлено: Чт авг 08, 2013 22:51:04
B@R5uk
Kavka, спасибо. Завтра внимательно повтыкаю, что там пишут. :)