Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.217.158.184] |
|
Страницы: (2) 1 [2] все ( Перейти к последнему сообщению ) |
Сообщ.
#16
,
|
|
|
Radagast выкинь лучше на порт ноль, и проверяй замером напряжения нога передатчика - питание. Так поймаешь если импеданс.
Добавлено А про очередь передатчика - игнор? |
Сообщ.
#17
,
|
|
|
medved_68 ой...так "в состоянии покоя" на ножке TXD высокий потенциал?
про очередь - спасибо за совет, это мне пригодится, когда буду полноценную прогу писать. Т.е. сегодня |
Сообщ.
#18
,
|
|
|
Цитата Radagast @ medved_68 ой...так "в состоянии покоя" на ножке TXD высокий потенциал? Нет, это импеданс. По сбросу нога подключена к порту D - режим ввод. Поэтому и говорю - выбрось ноль. И увидишь, что ничего не измениться. |
Сообщ.
#19
,
|
|
|
скажите еще плиз, чем отличается jmp от rjmp? судя по описанию в прогах для перехода на метку нужно юзать jmp, так же как и в ASM8086, но в примерах прог я везде вижу rjmp
Добавлено medved_68 хорошо, я выброшу ноль, только объясните, что значит умное слово "импеданс"? оно как-то выражается в вольтах? |
Сообщ.
#20
,
|
|
|
Цитата Radagast @ скажите еще плиз, чем отличается jmp от rjmp? судя по описанию в прогах для перехода на метку нужно юзать jmp, так же как и в ASM8086, но в примерах прог я везде вижу rjmp А где ты в даташите увидел инструкцию jmp??? rjmp - это короткий переход высчитывается смещением от места вызова (относительный), до 80Н - вперед, свыше назад + 1 к программному счетчику. Цитата Radagast @ medved_68 хорошо, я выброшу ноль, только объясните, что значит умное слово "импеданс"? оно как-то выражается в вольтах? Отключен, или Z-состояние. Вольтметром ловится порядка 3 - 3.8В - достаточно, чтобы сделать вывод: "Ага, единица!!!", но на деле это не так. Осциллографом - если в момент контакта с пином тронуть шину пальцем - видно на экране шум, чего не бывает при достоверном логическом уровне. |
Сообщ.
#21
,
|
|
|
medved_68 а какие вольтажи для AT90S2313 соответствуют "1" и "0" ? в документации я не нашел
|
Сообщ.
#22
,
|
|
|
Цитата Radagast @ а какие вольтажи для AT90S2313 соответствуют "1" и "0" ? в документации я не нашел 0.3 - 0.8В для "0", 70%VCC - для "1". Стандарты соответствуют уровням CMOS технологии, поэтому в даташитах обычно опускается. |
Сообщ.
#23
,
|
|
|
medved_68 спасибо
предыдущая прога заработала нормально (выкидывал 0) сегодня написал прогу собственно по курсачу. Компилится нормально, но я так и не увидел, где в симуляторе AVR Studio можно имитировать сигнал на RXD, так что перед прошивкой выложу код. Глянь плиз, может глазами увидишь какие-то логические ошибки. Принцип работы такой - через UART принимается 100 байт данных на скорости 2400 бит/с, записываются в SRAM, а потом передаются через TXD на скорости 4800 бит/с. .include "2313def.inc" .def x1=r16 ;accumulator .def x2=r17 ;byte counter up to 100 .org 0 ; вектора прерываний rjmp Reset .org URXCaddr rjmp mrxc ;interrupt RXC .org UDREaddr rjmp mudre ;interrupt UDRE RESET: ldi x1,ramend ;stack define out spl,x1 recpr: ldi x1,0b10010000 ;подготовка к приему ;бит7-RX Complete Interrupt Enable ;бит6-TX Complete Interrupt Enable ;бит5-UART Data Register Empty Interrupt Enable ;бит4-Receiver Enable ;бит3-Transmitter Enable ;бит2-9 Bit Characters ;бит1-Receive Data Bit 8 ;бит0-Transmit Data Bit 8 out UCR,X1 ldi x1,191 ; при кварце 7.3728МГц, скорость =2400 out UBRR,x1 ldi zh,0 ;инициализация адреса ОЗУ ldi zl,$60 ldi x2,0 sei wait: rjmp wait ;infinite cycle ;------------------------------------- trapr: ldi x1,0b00101000 ;подготовка к передаче out UCR,X1 ldi x1,95 ; при кварце 7.3728МГц, скорость =4800 out UBRR,x1 ldi zh,0 ldi zl,$60 ldi x2,0 sei rjmp trans ;------------------------------------- mrxc: in x1, UDR ;прием st Z+, x1 inc x2 cpi x2, 100 BREQ trapr reti ;------------------------------------- trans: ;передача mudre: LD x1, Z+ out UDR, x1 inc x2 cpi x2, 100 BREQ recpr reti |
Сообщ.
#24
,
|
|
|
Цитата Radagast @ А теперь вопросы: 1) Я правильно понимаю, что ,как правило, COM1, который юзается и для передачи, и для приема на др компе, на матке находится выше, чем СОМ2 (если смотреть на заднюю стенку)? Не всегда, лучше ссылаться на документацию к матке. Цитата 2) Реально ли вообще передавать данные чисто через TXD/RXD, без вникания в протокол и использования служебных пинов типа DCD, DTR или WinAPI без них откажется просто отсылать/считывать сигнал по TXD/RXD с заданной частотой(с учетом стартового, стопового и паритетного бита)? А можно ли с использованием ассемблерной вставки получить доступ к этим пинам напрямую? Реально. Поставить на портах перемычки на DTR-DSR и RTS-CTS или отключить их проверку программно. Насчет прямого доступа к портам, в принципе можно и под NT5+ через драйвера giveIO, ntport, WinIO но для совместимости ИМХО лучше по максимуму держаться подальше от таких решений. |
Сообщ.
#25
,
|
|
|
Цитата Radagast @ Компилится нормально, но я так и не увидел, где в симуляторе AVR Studio можно имитировать сигнал на RXD, так что перед прошивкой выложу код. Нет эмуляции передачи. Ты можешь эмулировать прерывание (если разрешено) записав в приемный регистр байт, который якобы пришел на порт и в отладчике просмотреть по шагам работу программы (отклик на прерывание). Цитата Radagast @ Глянь плиз, может глазами увидишь какие-то логические ошибки. 1. Главное правило - сохраняй ВСЕ регистры при переходе по вектору прерывания, вплоть до регистров статуса и флагов. У тебя этого нет. 2. Идем по логике - принял на скорости 2400, передал на 4800, а если в цикле??? Каким макаром главная программа, которая крутиться в бесконечном цикле: Цитата Radagast @ узнает, что все передано и что то нужно далее делать, например, опять вернуть скорость порта назад (для дальнейшего приема) или залечь в Sleep для экономии энергии??? Я понимаю, что ты пока учишься, но ТАКИЕ вещи (оставление "черных ходов") для "себя любимого", чтобы облегчить себе дальнейшую жизнь при наращивании прошивки - надо закладывать сразу, это фундамент. Да и препод, зацепившись за это, начнет задавать вопросы в ЭТОМ русле, а не в другом, а ты к ним готов! Надеюсь - мысль понятно оформил? wait: rjmp wait |
Сообщ.
#26
,
|
|
|
medved_68
1. наверно вопрос прозвучит диким, но - зачем? в данном случае я такой необходимости не вижу. Дальнейшего развития у проги не будет - сдам и забуду, как страшный сон и что конкретно Вы имеете в виду? push sreg и куда это запихнуть? и потом pop'ить? и что такое регистр флагов? 2. Цитата узнает, что все передано и что то нужно далее делать переход по метке mudre при каждом прерывании "регистр данных UART'a пуст" - при передаче данных. есть отдельные блоки для подготовки приема и передачи - с обнулением счетчика и настройкой UART'a, вроде все логично связано... |
Сообщ.
#27
,
|
|
|
Цитата Radagast @ и куда это запихнуть? и потом pop'ить? и что такое регистр флагов? Перед началом обработки прерывания. Флаги - флаг нуля, переполнения переноса, частичного переноса и т.д. Цитата Radagast @ переход по метке mudre при каждом прерывании "регистр данных UART'a пуст" - при передаче данных. Цитата Radagast @ Если равно 100 - пропускаем загрузку регистра передатчика и на выход. А на выходе бесконечный цикл...и прерываний от передатчика больше не будет и? Так и будет крутиться, бедняга. Хотя для этого:mudre: LD x1, Z+ out UDR, x1 inc x2 cpi x2, 100 BREQ recpr reti Цитата Radagast @ даже того, что написал и прерывания прицепил - достаточно, здесь я полностью с тобой согласен. Дальнейшего развития у проги не будет - сдам и забуду, как страшный сон |
Сообщ.
#28
,
|
|
|
Цитата пропускаем загрузку регистра передатчика и на выход. а на выходе подготовка к приему след. 100 байт и ожидание Цитата даже того, что написал и прерывания прицепил - достаточно надо, чтобы прога работала...потому что на данный момент что-то не пашет данные с компа уходят, а прога на принимающем компе виснет на Listening... так что хочется быть уверенным, что причина не в АСМ коде. Добавлено я правильно понимаю, что BREQ - переход по метке, если числа равны? |