Перейти к содержанию

Зацикливание Кода На Несколько Повторений.


hardbar

Рекомендуемые сообщения

.org 0 ;начальный адрес

rjmp reset ;прерывание по сбросу

.org 2

rjmp int_0 ;прерывание по порту int0 //а даташит считает, что INT0 находится по адресу 0х01, а по 0х02 - PCINT

.org 0x0b

Если вы не заметели с прерываниями все правельно потому что перед rjmp int_0 стоит .org 2 и означает что метка int_0 насамом деле PCINT просто имя у нее изменено.

Очень люблю спасибку.

Спасибка ни кого еще не убила.

Професия: Електро-механик.

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Именно по этому я написал, что нужно сбросить флаг изменения уровня на выводе порта (именно этот флаг и вызывает первое прерывание).

А вы не знаете как это изменить. Почитал даташит там такого нет вроде бы. Читал в статьях написано что PCINT вызываеться по изменению состояния пина.

Очень люблю спасибку.

Спасибка ни кого еще не убила.

Професия: Електро-механик.

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

• Bit 7 – INTF1: External Interrupt Flag 1

When an edge or logic change on the INT1 pin triggers an interrupt request, INTF1 becomes set

(one). If the I-bit in SREG and the INT1 bit in GIMSK are set (one), the MCU will jump to the corresponding

Interrupt Vector. The flag is cleared when the interrupt routine is executed.

Alternatively, the flag can be cleared by writing a logical one to it. This flag is always cleared

when INT1 is configured as a level interrupt.

• Bit 6 – INTF0: External Interrupt Flag 0

When an edge or logic change on the INT0 pin triggers an interrupt request, INTF0 becomes set

(one). If the I-bit in SREG and the INT0 bit in GIMSK are set (one), the MCU will jump to the corresponding

Interrupt Vector. The flag is cleared when the interrupt routine is executed.

Alternatively, the flag can be cleared by writing a logical one to it. This flag is always cleared

when INT0 is configured as a level interruptа,

Кидайте весь проект сюды так быстрее будет.

Изменено пользователем korsaj
Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Если вы не заметели с прерываниями все правельно потому что перед rjmp int_0 стоит .org 2 и означает что метка int_0 насамом деле PCINT просто имя у нее изменено.

Заметил, конечно. Если бы вы проанализировали вариант с полной таблицей векторов, вы бы в этом убедились. Просто неправильно, когда комментарий не соответствует самой программе.
ldi temp,0x80 ;отключение

out acsr,temp ;чегото там

Это просто без комментариев! Вероятно, имелся в виду аналоговый компаратор.
ldi temp,0b00000100 ;3 пину разрешено рерыване

out PCMSK,temp

Вроде же второму?

Разобрались бы вы вначале с прерываниями. Ну там, чтобы по нажатию мигал светодиодик или еще чего несложное.

И с орфографией! Столько ошибок в таком коротком предложении (выделены не все).

Если вы не заметели с прерываниями все правельно потому что перед rjmp int_0 стоит .org 2 и означает что метка int_0 насамом деле PCINT(запятая) просто имя у нее изменено.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

Набросал пример работы с PCINT, при изменении уровня на PB2 меняется уровень на PB0. Конечно, для такой задачи (фактически, повторитель) контроллер не нужен, однако для иллюстрации вполне достаточно. В симуляторе Студии и Протеусе все работает, в железе не проверял, не делать же отдельную плату специально для такого!

.include "tn13def.inc"

.def temp=r16
.def mask=r17

;таблица векторов прерываний, неиспользуемые заткнуты reti, чтобы не сбрасывалось при ошибочном разрешении чего-нибудь

rjmp RESET
reti;    INTO
rjmp PCINT
reti;    TIMER0OVF
reti;    EE_RDY
reti;    ANA_COMP
reti;    TIMER0COMPA
reti;    TIMER0 COMPB
reti;    WDT
reti;    ADC

RESET:
   ldi temp,RAMEND    ;инициализация стека
   out SPL,temp
   ldi temp,(1<<2)    ;разрешаем PCINT только для PB2
   out PCMSK,temp
   ldi temp,(1<<PCIE);разрешение прерывания по изменению уровня
   out GIMSK,temp
   ldi temp,(1<<0)    ; PB0 - выход, остальные - входы
   out DDRB,temp
   ldi temp,(1<<2)    ; PB2 - подтянут к питанию
   out PORTB,temp
   ldi mask,(1<<0)    ; маска для инверсии PB0
   sei
CYCLE:                ;бесконечный цикл
   rjmp CYCLE

PCINT:
   in temp,PORTB
   eor temp,mask    ;инверсия PB0
   out PORTB,temp
reti

Код вроде похож на ваш. Немного смущает

ldi temp,0b00000100 ;3 пину разрешено рерыване

out PCMSK,temp

, когда по коду видно, что прерывание генерируется по перепаду PB2 а не PB3. Опять несоответствие комментария и кода. Хоть кнопка-то правильно висит?

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

Вот так делается сброс флагов.

;------------------------------------------
;ИНИЦИАЛИЗАЦИЯ ПОРТОВ, ПРЕРЫВАНИЙ,ТАЙМЕРОВ.
;------------------------------------------

reset: ;
cli ;запрет прерывания
ldi temp,ramend ;установка нижней границы стека
out spl,temp ;

ldi temp,0b00000100 ;3 пину разрешено рерыване
out PCMSK,temp

ldi temp,(1<<PCIE) ;глобальное разрешение прерывния для пинов порта
out GIMSK,temp

ldi temp,0b11111000 ;настройка порта на
out ddrb,temp ;вод.вывод

ldi temp,0b00000111 ;подтяжка резистрами
out portb,temp ;установка в порте лог.0

ldi temp,0x05 ;пред-делитель
out tccr0b,temp ;таймера

ldi temp,0x80 ;отключение
out acsr,temp ;чегото там

ldi temp,0xFF ;сбрасываем флаги прерывания
out GIFR,temp


sei ;разрешение прерывания

И обратите внимание на код COKPOWEHEU, а именно на работу с портом. Порт вначале считали, потом изменили и вывели. Это сделано для того чтобы не менять состояние неиспользуемых в данной операции битов порта. У вас в коде есть подтяжка пина, но при выводе в порт вы отключаете эту подтяжку, что при определенных условиях вызовет прерывание.

Изменено пользователем korsaj
Ссылка на комментарий
Поделиться на другие сайты

Кнопка висит правильно. Просто коментар копировал и может с номером ошибся.

До этого я делал прерывание по наростающему фронту INTO. Задача была : при нажатии увеличивалась частота мерцания светодиода на. Тогда работало. и Переключение программ мерцания по прерыванию INT0 тоже работало. Но вот решил сделать на PCINT. И что то пошло не так.

Извините же за грамотность сам не Русский. Я ж не могу на форуме писать чисто по Украински, меня тогда не поймут.

А что при такой записи пинов вход,выход. Их нельзя будут изменить в программе???

ldi temp,(1<<0) ; PB0 - выход, остальные - входы
    out DDRB,temp
    ldi temp,(1<<2) ; PB2 - подтянут к питанию
    out PORTB,temp

Очень люблю спасибку.

Спасибка ни кого еще не убила.

Професия: Електро-механик.

Ссылка на комментарий
Поделиться на другие сайты

Есть отчасти и моя вина. Совсем забыл, что у этих кастратов всего 8-мь ног. Лучше поставить внешнюю подтяжку на кнопку и не париться с маской. Ложные срабатывания дает дребезг механических контактов. Тут желательно софтовую защиту от дребезга сделать.

Ссылка на комментарий
Поделиться на другие сайты

От дребезга спасет конденсатор. А подтяжку желательно программную.

ldi temp,(1<<0) ; PB0 - выход, остальные - входы

out DDRB,temp

ldi temp,(1<<2) ; PB2 - подтянут к питанию

out PORTB,temp

Проверял так записывать настройку порта а в 2-ичном выводить в порт сигналы. Всё ровно срабатывает прерывание и убираеться подтяжка.

Пока проверяю в симуляторе. Если нужно могу и на железо кинуть. Макетная плата есть на attiny13 и на attiny2313.

Изменено пользователем hardbar

Очень люблю спасибку.

Спасибка ни кого еще не убила.

Професия: Електро-механик.

Ссылка на комментарий
Поделиться на другие сайты

От дребезга спасет конденсатор.

Только ухудшит ситуацию.

По моему, раньше код был лучше, при побитном выводе. Перестарались с оптимизацией :)

Никогда не спорьте с дураком - люди могут не заметить между вами разницы

Ссылка на комментарий
Поделиться на другие сайты

Все то же самое. Единственное не учли маску вывода в порт. Не зная схемы я, например, гасил все пины порта по привычке работы с Мегами. Тупанул немного и получилось, что сбрасывая выходы в 0 заодно и снимал подтяжку входной линии этого убогого МК.

Ссылка на комментарий
Поделиться на другие сайты

для побитного вывода есть sbi / cbi / sbr / cbr. Они других выводов трогать не умеют. Я делал маску на порт для простоты, чтобы инверсия занимала одну команду.

Проверял так записывать настройку порта а в 2-ичном выводить в порт сигналы. Всё ровно срабатывает прерывание и убираеться подтяжка.
у меня все работает. На PB2 висит только кнопка, соединяющая с землей. Просто надо при любом изменении PORTB записывать 2-й бит (0b00000100 = (1<<2)).
Совсем забыл, что у этих кастратов всего 8-мь ног
8 ног это на самом корпусе, на порт выведены 5,5 (ресет лучше не использовать)
До этого я делал прерывание по наростающему фронту INTO
INT0 висит на PB1 (6 вывод) в здесь вызывается PCINT по PB2 (7 вывод).
Вот так делается сброс флагов.
Если самопроизвольное переключение режима в начале не пугает - да и плевать на него. Хотя можно инициализировать последним номером.

main:
  cpi prog_num,1   ;if(программа 1)
  breq PROG_1
  cpi prog_num,2  ;if(программа 2)
  breq PROG_2
  cpi prog_num,3  ;if(программа 3)
  breq PROG_3
  rjmp PROG_4   ;else . Впрочем код последней можно засунуть прямо сюда.

PROG_1:
  ;код программы 1
rjmp main
;код остальных программ

PCINT:
;какой-то код в прерывании
  dec prog_num   ;переключение программы
  brne PCINT_END ;если дошли до 0 - инициализируем заново. Таким образом программы будут от 1 до 4
  ldi prog_num,4
;еще какой-то код
  rcall WAIT_256   ;антидребезг
  ldi temp,(1<<PCIF)   ;вроде флаг сбрасывается такой комбинацией. Если не так - поправьте.
  out GIFR,temp
PCINT_END:reti

WAIT_256:   ;задержка на глазок, авось 524 (оценочно) тактов хватит для борьбы с дребезгом
  clr temp
WAIT_256_LOOP:
  dec temp
  brne WAIT_256_LOOP
ret

Набросал чуть более читаемый код переключения подпрограмм. В данном случае, для упрощения обработчика PCINT счет идет 4-3-2-1.

Метки и названия портов большими буквами после знакомства с Си, там так принято, а ассемблеру пофиг.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

К побитовым операциям пришли, но потом пришлось от них отходить, когда автор начал копировать и размножать блоки кода, отличающиеся только номером линии порта. Вот чтобы причесать листинг, а заодно и показать автору, как можно оптимизировать код, я и предложил вариант без побитовых операций. Для исключения моих глюков с кастрированными МК, достаточно в регистрах r17, r18 учесть подтяжку на используемой как вход линии порта.

PS. В обработчике прерывания, разве не лучше переместить задержку антидребезга и сброс флага PCIF за метку PCINT_END? Тогда они будут распространяться на все варианты обработчика.

Ссылка на комментарий
Поделиться на другие сайты

ldi temp,(1<<0) ; PB0 - выход, остальные - входы

out DDRB,temp

ldi temp,(1<<2) ; PB2 - подтянут к питанию

out PORTB,temp

Проверял так записывать настройку порта а в 2-ичном выводить в порт сигналы. Всё ровно срабатывает прерывание и убираеться подтяжка.

Совсем запудрили голову новичку.

Когда я говорил обратите внимание на работу с портом для сохранение подтяжки, я имел ввиду: считали портв во временный регистр - изменили нужные биты во временном регистре, не затрагивая биты подтяжки - вывели значение во временном регистре в порт.

А точ то вы там куралесите с двоичным выводом и с формированием двоичной константы сдвигом 1 - так это одно и тоже и лишь упрашает понимание, но никак не влияет на откомпилированную программу!

Изменено пользователем korsaj
Ссылка на комментарий
Поделиться на другие сайты

Вот сократил код. Сделал кнопочную регулировку частоты. Полностью работоспособна. Давайте отталкиваться от этого кода если что пере делаем вывод в порт.

.include "tn13adef.inc"
.list
.def temp=r16 ;переименуем регистр под удобное имя
.def cicle=r17
.def tim=r18
.def timer=r19
;--------------------------------------
;ПАМЯТЬ И УСТАНОВКА ПРЕРЫВАНИЙ
;--------------------------------------
.cseg ;выбор памяти. внашем случае работаем с flesh.
.org 0 ;начальный адрес
rjmp reset ;прерывание по сбросу
.org 2
rjmp pcint ;прерывание по порту pcint
.org 0x0b
;------------------------------------------
;ИНИЦИАЛИЗАЦИЯ ПОРТОВ, ПРЕРЫВАНИЙ,ТАЙМЕРОВ.
;------------------------------------------

reset: ;
cli ;запрет прерывания
ldi temp,ramend ;установка нижней границы стека
out spl,temp ;
ldi temp,0b00011000 ;настройка порта на
out ddrb,temp ;вод.вывод
ldi temp,0b00000111 ;подтяжка резистрами
out portb,temp ;установка в порте лог.0
ldi temp,0b00000110 ;3 пину разрешено рерыване
out PCMSK,temp
ldi temp,(1<<PCIE) ;глобальное разрешение прерывния для пинов порта
out GIMSK,temp
ldi temp,0x05 ;пред-делитель
out tccr0b,temp ;таймера
ldi temp,0x80 ;отключение
out acsr,temp ;чегото там
ldi timer,100 ;задержка
sei ;разрешение прерывания
;-------------------------------------------
;ОСНОВНАЯ ПРОГРАМА.
;-------------------------------------------
pro1:
ldi cicle,3
m1:
sbi portb,4
rcall wait ;вызов задержки
cbi portb,4
rcall wait ;вызов задержки
dec cicle
brne m1
ldi cicle,3
m2:
sbi portb,3
rcall wait ;вызов задержки
cbi portb,3
rcall wait ;вызов задержки
dec cicle
brne m2
rjmp pro1 ;безусловный переход

;---------------------------------------------------;
;ПРЕРЫВАНИЯ
;---------------------------------------------------;
pcint: ;метка вызова прерываний по порту
in r20,SREG ;сохраним регистр статуса
push r20
sbic pinb,1
dec timer
sbic pinb,2
inc timer
pop r20
out SREG,r20 ;восстановим при выходе
reti

;---------------------------------------------------------------------;
; ПП задержки
;---------------------------------------------------------------------;
wait: ;Все что снизу задержка на таймере.
ldi tim,0
out tcnt0,tim
wt1:
in tim,tcnt0
cp tim,timer
brlo wt1
ret

Вот схема.

Прокоментируйте код. В смысле как он вам.

Изменено пользователем hardbar

Очень люблю спасибку.

Спасибка ни кого еще не убила.

Професия: Електро-механик.

Ссылка на комментарий
Поделиться на другие сайты

Нормально, только перед разрешением прерывания стоит очистить флаги прерываний дабы сразу мк не переходил на прерывание.

ldi temp,0xFF ;сбрасываем флаги прерывания

out GIFR,temp

см пост №56

Изменено пользователем korsaj
Ссылка на комментарий
Поделиться на другие сайты

Сделал так как вы говорили. И для проверки вставил вот такую команду. Проверить не срабатывает ли прерывание при запуске.

;---------------------------------------------------;
;ПРЕРЫВАНИЯ
;---------------------------------------------------;
int_0: ;метка вызова прерываний по порту int0
in r20,SREG ;сохраним регистр статуса
push r20
sbic pinb,1
dec timer
sbic pinb,2
inc timer
;-------------
sbi portb,0 ;-
rcall wait ;-
cbi portb,0 ;-
;-------------
pop r20
out SREG,r20 ;восстановим при выходе
reti

Как оказалось не срабатывает.

Но немогу понять почему прерывание при нажатии вызываеться дважды??

Очень люблю спасибку.

Спасибка ни кого еще не убила.

Професия: Електро-механик.

Ссылка на комментарий
Поделиться на другие сайты

А как изменить такое явление??

Ведь в даташите нет настройки Pcint такой же как и Int0.

В смысле по наростающему или спадающему фронту.

Там указано что прерывание вызываеться по изменению логического состояния порта.

Очень люблю спасибку.

Спасибка ни кого еще не убила.

Професия: Електро-механик.

Ссылка на комментарий
Поделиться на другие сайты

Извините туплю. Вот даташит подтвердил что прерывание вызываеться дважды.

Пока вопросов нет. Пойду дальше изучать.

Очень люблю спасибку.

Спасибка ни кого еще не убила.

Професия: Електро-механик.

Ссылка на комментарий
Поделиться на другие сайты

Нет смысла сохранять и восстанавливать из стека регистр r20 в прерывании. Вы же им не пользуетесь. Записали в него SREG и ладно. Это уже достаточное действие. На будущее, при сохранении регистра статуса (SREG) в РОН, выбирайте регистры из числа 5-15, т.к. они менее функциональные и ими реже пользуются.

Ссылка на комментарий
Поделиться на другие сайты

С CREG вас понял.

Вот код я сделал наконец то что хотел.

Прошу не наежать. Ч то у меня плохая оптимизацыя.

.include "tn13adef.inc"
.list
.def temp=r16 ;переименуем регистр под удобное имя
.def cicle=r17
.def tim=r18
.def timer=r19
.def numer=r21
.def konst=r22
;--------------------------------------
;ПАМЯТЬ И УСТАНОВКА ПРЕРЫВАНИЙ
;--------------------------------------
.cseg ;выбор памяти. внашем случае работаем с flesh.
.org 0 ;начальный адрес
rjmp reset ;прерывание по сбросу
.org 2
rjmp int_0 ;прерывание по порту int0
.org 0x0a
;------------------------------------------
;ИНИЦИАЛИЗАЦИЯ ПОРТОВ, ПРЕРЫВАНИЙ,ТАЙМЕРОВ.
;------------------------------------------

reset: ;
cli ;запрет прерывания
ldi temp,ramend ;установка нижней границы стека
out spl,temp ;
ldi temp,0b00011000 ;настройка порта на
out ddrb,temp ;вод.вывод
ldi temp,0b00000111 ;подтяжка резистрами
out portb,temp ;установка в порте лог.0
ldi temp,0b00000111 ;3 пину разрешено рерыване
out PCMSK,temp
ldi temp,(1<<PCIE) ;глобальное разрешение прерывния для пинов порта
out GIMSK,temp
ldi temp,0x05 ;пред-делитель
out tccr0b,temp ;таймера
ldi temp,0x80 ;отключение
out acsr,temp ;чегото там
ldi temp,0xFF ;сбрасываем флаги прерывания
out GIFR,temp
ldi timer,200 ;задержка
ldi numer,3 ;РОН теста
ldi konst,5 ;РОН констант
sei ;разрешение прерывания
;-------------------------------------------
;ОСНОВНАЯ ПРОГРАМА.
;-------------------------------------------
main:	 ;тест РОНа.выбор програмы
cpi numer,3
breq pro3
cpi numer,2
breq pro2
cpi numer,1
breq pro1
rjmp main
;------------------------------------
pro3:	 ;програма 3
sbi portb,3
sbi portb,4
rcall wait
cbi portb,3
cbi portb,4
rcall wait
rjmp main ;безусловный переход
;-------------------------------------
pro2:	 ;програма 2
sbi portb,3
rcall wait
cbi portb,3
rcall wait
rjmp main ;безусловный переход
;-----------------------------------------
pro1:	 ;програма 1
sbi portb,4
rcall wait
cbi portb,4
rcall wait
rjmp main ;безусловный переход
;---------------------------------------------------;
;ПРЕРЫВАНИЯ
;---------------------------------------------------;
int_0: ;метка вызова прерываний по порту int0
in r5,SREG ;сохраним регистр статуса
sbis pinb,1 ;проверка pb1. пропустить если 1
subi timer,5 ;вычесть 5 с РОН
sbis pinb,2 ;проверка pb2. пропустить если 1
add timer,konst ; сложить РОН с РОН
sbis pinb,0 ;проверка pb0. пропустить если 1
dec numer ; вычесть 1 с РОН
tst numer ;проверка РОН не 0 ли
brne outi ;переход если не =
ldi numer,3 ;запись в РОН 3
outi:	 ;	
out SREG,r5 ;восстановим при выходе
reti
;---------------------------------------------------------------------;
; ПП задержки
;---------------------------------------------------------------------;
wait: ;Все что снизу задержка на таймере.
ldi tim,0
out tcnt0,tim
wt1:
in tim,tcnt0
cp tim,timer
brlo wt1
ret

Вот схема

Изменено пользователем hardbar

Очень люблю спасибку.

Спасибка ни кого еще не убила.

Професия: Електро-механик.

Ссылка на комментарий
Поделиться на другие сайты

PS. В обработчике прерывания, разве не лучше переместить задержку антидребезга и сброс флага PCIF за метку PCINT_END? Тогда они будут распространяться на все варианты обработчика.

Лучше, конечно. Это я сначала думал обойтись без антидребезга, потом добавил его, а вот метку поправить забыл. Ее стоит перенести сразу после ldi prog_num,4. Но так тоже ничего получилось, может народ задумается наконец о принципе действия программы и не будет копипастить :-)

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...