Страница 1 из 1
Последовательно записать 48 байт в SRAM, также прочитать AVR
Добавлено: Вс ноя 11, 2012 21:09:03
Кефир
Всем доброе время)
Подскажите код записи 48 байт в SRAM и также прочитать эти 48 Байт из SRAM
(AVR - Ассемблер)
Правильно делаю ?
Код: Выделить всё
ldi ZH,1
ldi ZL,0
Read:
ld temp, Z+
cpi ZL,48
brne net
ldi ZH,1
ldi ZL,0
net:
rjmp Read
Write:
st Z+, temp
cpi ZL,48
brne net_n
ldi ZH,1
ldi ZL,0
net_n:
rjmp Write
Данные приходят на UART, необходимо синхронизировать чтение и запись так, чтобы чтение Байтов не влияло на адрес последующего записываемого Байта.
Как сделать ?
Спасибо заранее!
Re: Последовательно записать 48 байт в SRAM, также прочитать
Добавлено: Вс ноя 11, 2012 21:26:43
zero648
ldi ZH,1
ldi ZL,0
Эти команды зацикливают процедуры записи и чтения, для чего они?
Попробуй использовать для записи и чтения разные индексные регистры Z и Y
Код: Выделить всё
ldi ZH,1
ldi ZL,0
ldi YH,1
ldi YL,0
Read:
ld temp, Y+
cpi YL,48
brne net
...
net:
rjmp Read
ldi YH,1
ldi YL,0
Write:
st Z+, temp
cpi ZL,48
brne net_n
...
net_n:
rjmp Write
ldi ZH,1
ldi ZL,0
Re: Последовательно записать 48 байт в SRAM, также прочитать
Добавлено: Вс ноя 11, 2012 21:51:42
Кефир
Дело в том, что сейчас программирую бегущею строку 8Х48. И возникла проблема: как синхронизировать запись и чтение SRAM (В SRAM я решил отправлять байты переданные по UART).
Текст на матрице мелькает (частота МК - 8 мГц использую внутреннею RC цыпочку), получает данные выводимые на матрицу вовсе не разборчивы((((
Как я понял не хватает частоты МК.
Что делать ?
Re: Последовательно записать 48 байт в SRAM, также прочитать
Добавлено: Вс ноя 11, 2012 21:59:34
Кефир
zero648 писал(а):Попробуй использовать для записи и чтения разные индексные регистры Z и Y
Хм, читая Байты по тем же адресам прочитаются?
Если допустим для записи использовал Z а для чтения использую Y
Буду побывать...
Re: Последовательно записать 48 байт в SRAM, также прочитать
Добавлено: Вс ноя 11, 2012 22:03:11
ibiza11
не понимаю как вы связываете скорость "мелькания" информации на дисплее с процедурой чтения/записи данных в SRAM. как?
текст выводить на бегущую строку отдельной функцией, а писать в память другой функцией. Зачем их синхронизировать?
можно использовать и одну из пар регистров (X,Y,Z) просто предварительно подгружая в нее 2 байта указателя чтения или записи, в зависимости от того, что вы делаете.
Для этого заводятся отдельные переменные указателей записи/чтения.
Re: Последовательно записать 48 байт в SRAM, также прочитать
Добавлено: Вс ноя 11, 2012 22:06:58
Кефир
не понимаю как вы связываете скорость "мелькания" информации на дисплее с процедурой чтения/записи данных в SRAM. как?
текст выводить на бегущую строку отдельной функцией, а писать в память другой функцией. Зачем их синхронизировать?
ХА! Если передаю данные без прерывно ? то на чтение вообще времени не будет у МК !
А вить еще кучу всего нужно сделать, например: Прочитать по Байтно SRAM затем отправить на 74HC595.
Re: Последовательно записать 48 байт в SRAM, также прочитать
Добавлено: Вс ноя 11, 2012 22:51:11
ibiza11
с какой скоростью вы беспрерывно передаете данные? куда по-вашему они должны отображаться? глаз человека видит максимум 24 кадра в секунду.
какая у вас скорость передачи (байт/секунду), частота передачи (пакетов/секунду) , длина пакета (байт), что за данные вообще (для обработки или тупо для отображения) ?
у всех работают бегущие строки, даже на меньших частотах, а у вас вдруг почему то не хватает процессорного времени - вывод из этого только один - вы неправильно организуете процесс)
я хочу вам помочь правильно его организовать, поэтому мне надо знать что вообще вы делаете и чего хотите добиться.
вот примерный алгоритм:
1) запускаем таймер для вывода информации на регистры сдвига (595)
(на какой именно интервал - надо рассчитать на основе примененной схемы соединения регистров) и по его прерыванию читаем данные и выдаем их в регистры. после этого опять ждем прерывания.
2) включаем приемник UART и по прерыванию по окончанию приема записываем данные в память. после этого опять ждем приема.
3) в главном цикле тупим и ничего не делаем)))
уточнение будет, когда напишете детали
Re: Последовательно записать 48 байт в SRAM, также прочитать
Добавлено: Пн ноя 12, 2012 08:22:59
Кефир
У меня план другой:
1) Принимаю данные по UART и в прерывании по окончанию приема данных записываю в массив.
2) В свободное время читаю последовательно массив и отправляю на 595.
3) Отправляю сообщение компу о том что закончил читать данные с массив. И Заного записываю массив в SRAM тоесть быть возвращаюсь на "1" пункт.
Re: Последовательно записать 48 байт в SRAM, также прочитать
Добавлено: Пн ноя 12, 2012 08:29:11
Кефир
Сейчас пробую все варианты вывода на 595.
Первый вариант был: как принял данные сразу выводил на 595.
Теперь я пробую сначало записать данные в массив потом читать и выводить на 595 вне прерывания по UART
Re: Последовательно записать 48 байт в SRAM, также прочитать
Добавлено: Пн ноя 12, 2012 15:18:59
ibiza11
Кефир писал(а):У меня план другой:
аааа! ну если план другой, то конечно да. где берете? дорого?

Re: Последовательно записать 48 байт в SRAM, также прочитать
Добавлено: Пн ноя 12, 2012 15:44:51
Кефир
где берете? дорого?

"Извините" не понял юмора...
Re: Последовательно записать 48 байт в SRAM, также прочитать
Добавлено: Пн ноя 12, 2012 15:46:33
ibiza11
Это я оценил вашу реакцию на мои вопросы. Вы ни на один не ответили. Если вам нужна помощь другого человека, научитесь формулировать свои вопросы, а также ответы на поставленные вопросы.
Re: Последовательно записать 48 байт в SRAM, также прочитать
Добавлено: Пн ноя 12, 2012 16:04:38
Кефир
ibiza11, Вы ни на один не ответили
Ответил на все...
Если вам нужна помощь другого человека, научитесь формулировать свои вопросы
Все детально разложил по полочкам...
Куда еще формулировать ?
1) Принять данные по UART, параллельность записывая в массив в SRAM
2) Прочитать данные из массива и отправить на 74HC595 (6 байт)
Re: Последовательно записать 48 байт в SRAM, также прочитать
Добавлено: Вт ноя 13, 2012 09:48:48
ibiza11

Повторять вопросы не буду. Сами посмотрите. Это такие предложения с вопросительным знаком в конце.
Re: Последовательно записать 48 байт в SRAM, также прочитать
Добавлено: Вт ноя 13, 2012 10:47:23
ibiza11
Спойлер
Код: Выделить всё
.equ BufferAddr = SRAM_START
.equ Buffersize = 48
.equ MaxPointerAddrH = high(BufferAddr + BufferSize)
.equ MaxPointerAddrL = low(BufferAddr + BufferSize)
.equ ReadPointerAddrH = BufferAddr + BufferSize
.equ ReadPointerAddrL = ReadPointerAddrH + 1
.equ WritePointerAddrH = ReadPointerAddrL + 1
.equ WritePointerAddrL = WritePointerAddrH + 1
.equ DataAddr = WritePointerAddrL + 1
.equ BytesInBufferAddr = DataAddr + 1
.def tmp1 = r16
reset:
cli
ldi temp,Low(ramend) ;инициализация стека
out spl,temp
ldi temp,high(ramend)
out sph,temp
rcall buffer_init ;инициализация кольцевого буфера FIFO
;write byte
ldi tmp1, 200 ;записываемые данные
sts DataAddr, tmp1
rcall write_byte ;запись в FIFO
rcall read_byte ;чтение из FIFO
lds tmp1,DataAddr ;считываемые данные
rjmp PC
buffer_init:
ldi tmp1,low(BufferAddr)
sts ReadPointerAddrH,tmp1
ldi tmp1,high(BufferAddr)
sts ReadPointerAddrL,tmp1
ldi tmp1,low(BufferAddr)
sts WritePointerAddrH,tmp1
ldi tmp1,high(BufferAddr)
sts WritePointerAddrL,tmp1
ret
read_byte:
lds tmp1,BytesInBufferAddr
tst tmp1
breq read_byte_error
dec tmp1
sts BytesInBufferAddr,tmp1
lds ZL,ReadPointerAddrL
lds ZH,ReadPointerAddrH
ld tmp1,Z+
sts DataAddr,tmp1
ldi tmp1,MaxPointerAddrH
cpi ZL,MaxPointerAddrL
cpc ZH,tmp1
brlo read_byte_addr_less_than_max
ldi ZL,low(BufferAddr)
ldi ZH,high(BufferAddr)
read_byte_addr_less_than_max:
sts ReadPointerAddrL,ZL
sts ReadPointerAddrH,ZH
ret
read_byte_error:
set
ret
write_byte:
lds tmp1,BytesInBufferAddr
cpi tmp1,Buffersize+1
brlo write_byte_ok
set
ret
write_byte_ok:
inc tmp1
sts BytesInBufferAddr,tmp1
lds ZL,WritePointerAddrL
lds ZH,WritePointerAddrH
lds tmp1,DataAddr
st Z+,tmp1
ldi tmp1,MaxPointerAddrH
cpi ZL,MaxPointerAddrL
cpc ZH,tmp1
brlo write_byte_addr_less_than_max
ldi ZL,low(BufferAddr)
ldi ZH,high(BufferAddr)
write_byte_addr_less_than_max:
sts WritePointerAddrL,ZL
sts WritePointerAddrH,ZH
ret
Re: Последовательно записать 48 байт в SRAM, также прочитать
Добавлено: Вт ноя 13, 2012 21:56:00
Кефир
Излишний сарказм уважаемый...
За код спасибо! вопросы еще будут по этой теме...
Re: Последовательно записать 48 байт в SRAM, также прочитать
Добавлено: Вс май 14, 2017 15:27:28
santos29
Уважаемые Коты помогите разобраться с регистрами sfr для AT89С2051, мне всего то нужно в СИ - записать один байт и прочитать его. Из PDF ничего толком не понял. Какими командами это можно сделать? Переменную k хочу хранить в энергонезависимой памяти. Вот мой кусочек программы:
//Keypad Connections:
sbit S0=P2^4; //T
sbit S1=P2^3; //T+F
sbit S2=P2^2; //F
unsigned char k = 1;
//======
Read_Keypad(void)
{
if(S0==0){delay_ms(50);while(S0==0);return k=0;}
if(S1==0){delay_ms(50);while(S1==0);return k=1;}
if(S2==0){delay_ms(50);while(S2==0);return k=2;}
return (k) ;
}
Всем спасибо за ответ!
Re: Последовательно записать 48 байт в SRAM, также прочитать
Добавлено: Пн май 15, 2017 11:30:55
BOB51
[uquote="santos29",url="/forum/viewtopic.php?p=3105274#p3105274"]Уважаемые Коты помогите разобраться с регистрами sfr для AT89С2051, мне всего то нужно в СИ - записать один байт и прочитать его. Из PDF ничего толком не понял. Какими командами это можно сделать? Переменную k хочу хранить в энергонезависимой памяти. Вот мой кусочек программы: ...
....
Всем спасибо за ответ![/uquote]
МЛИН!!!
А ничего такого не заметно, что
AT89С2051
НЕ АВР, а MCS51
и соответственно компилятор СИ и среда разработки иная чем для АВРок требуется??

Re: Последовательно записать 48 байт в SRAM, также прочитать
Добавлено: Пн май 15, 2017 11:37:03
pyzhman
[uquote="santos29",url="/forum/viewtopic.php?p=3105274#p3105274"]...записать один байт и прочитать его...[/uquote]
Код: Выделить всё
data= 8; // запись в память.
data1= data;// чтение из памяти.