реклама на сайте
подробности

 
 
> Программа asm gередача по UART attiny25
addict
сообщение Apr 14 2018, 07:24
Сообщение #1





Группа: Участник
Сообщений: 7
Регистрация: 14-04-18
Пользователь №: 103 217



Доброго времени суток.
Нужно передать 1 байт на скорости 19200 бод (8 бит 1 стоп) от мк attiny25 на устройство.
МК программируется программатором громова через uniprof.при подключении питания на мк устройство принимает 1 байт 0FFh вместо 05fh.
МК работает от внутренного тактвого генератора на заводских установках, частоте- 1мгц.
сперва сделал код на таймере.Ничего не получилось, решил считать такты.Исходил из того, что, при частоте 1мгц длительность 1 такта занимает 0,000001 секунды.длительность 1 бита(бода) при скорости 19200 будет 0,000052083 секунды, тоесть задержка между перепадами уровней должна быть 52 такта.Вроде написал код, вроде правильно.Но не работает, подскажите, что может быть не так.


CODE
rjmp RESET ; Reset Handler

RESET:
cli
ldi r17, 0xd0
out 0x3D, r17 ;инициализация стэка

ldi R16, 0b00000011 ;порты как выход
out 0x17, r16
LDI R30, low(fing_cmp*2) ;
lpm r18, Z ;загрузим байт

trx_idle: ;2 такта
ldi R16, 0b00000001 ;логический 1 (idle)
out 0x18, r16

;Задержка 52-2 = 50
ldi r20, 16
delay1:
dec r20
brne delay1
nop
nop

trx_start: ;2 такта
ldi R16, 0b00000000 ;логический 0 (start bit)
out 0x18, r16

;Задержка 52-5 = 47
ldi r20, 15
delay2:
dec r20
brne delay2
nop
nop
trx_bit0: ;5 тактов
clc
clr r16
ror r18 ;младший бит уходит в C
adc r16, r16
out 0x18, r16

;Задержка 52-5 = 47
ldi r20, 15
delay3:
dec r20
brne delay3
nop
nop
trx_bit1: ;5 тактов
clc
clr r16
ror r18 ;младший бит уходит в C
adc r16, r16
out 0x18, r16

;Задержка 52-5 = 47
ldi r20, 15
delay4:
dec r20
brne delay4
nop
nop
trx_bit2: ;5 тактов
clc
clr r16
ror r18 ;младший бит уходит в C
adc r16, r16
out 0x18, r16

;Задержка 52-5 = 47
ldi r20, 15
delay5:
dec r20
brne delay5
nop
nop
trx_bit3: ;5 тактов
clc
clr r16
ror r18 ;младший бит уходит в C
adc r16, r16
out 0x18, r16

;Задержка 52-5 = 47
ldi r20, 15
delay6:
dec r20
brne delay6
nop
nop
trx_bit4: ;5 тактов
clc
clr r16
ror r18 ;младший бит уходит в C
adc r16, r16
out 0x18, r16


;Задержка 52-5 = 47
ldi r20, 15
delay7:
dec r20
brne delay7
nop
nop
trx_bit5: ;5 тактов
clc
clr r16
ror r18 ;младший бит уходит в C
adc r16, r16
out 0x18, r16

;Задержка 52-5 = 47
ldi r20, 15
delay8:
dec r20
brne delay8
nop
nop
trx_bit6: ;5 тактов
clc
clr r16
ror r18 ;младший бит уходит в C
adc r16, r16
out 0x18, r16


;Задержка 52-5 = 47
ldi r20, 15
delay9:
dec r20
brne delay9
nop
nop
trx_bit7: ;5 тактов
clc
clr r16
ror r18 ;младший бит уходит в C
adc r16, r16
out 0x18, r16


;Задержка 52-2 = 50
ldi r20, 16
delay13:
dec r20
brne delay13
nop
nop
trx_idle2: ;2 такта
ldi R16, 0b00000001 ;логический 1 (idle)
out 0x18, r16


stop:
nop
nop
rjmp stop

fing_cmp: .db 0xf5


Сообщение отредактировал IgorKossak - Apr 15 2018, 18:37
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
zombi
сообщение Apr 14 2018, 08:35
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



R31 ненужно грузить?
Go to the top of the page
 
+Quote Post
addict
сообщение Apr 14 2018, 09:09
Сообщение #3





Группа: Участник
Сообщений: 7
Регистрация: 14-04-18
Пользователь №: 103 217



Цитата(zombi @ Apr 14 2018, 08:35) *
R31 ненужно грузить?



нет, r31 cодержит 0, когда под отладчиком в avr studio прогоняешь то в r18 грузится нужное число -05fh.B биты в портах, когда сдвигаешь r18 щелкают правильно.

Цитата(zombi @ Apr 14 2018, 08:35) *
R31 ненужно грузить?


загрузил регистр r18 напрямую значением.вроде заработало, но иногда приходит df.

Спасибо)получается когда мк включается состояние регистров не определено ?
Go to the top of the page
 
+Quote Post
KGB
сообщение Apr 17 2018, 23:33
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 44
Регистрация: 21-12-08
Пользователь №: 42 644



Цитата(addict @ Apr 14 2018, 13:09) *
нет, r31 cодержит 0,

шутить изволите?
не сравнивайте компилятор с реальным авр!!! при включении там может быть мусор!

вы используете софтовую реализацию компорта и передаёте байт описывая каждый бит..
это занимает очень много памяти..
вот попробуйте это...
подогнать под свою скорость и частоту кварца сможете?
CODE
;**********************************************************************
*********
*******************

; передача одного байта в формате РС-232 16МГЦ 115200
TX_232:

push r16
push r17
push r18
; заносим в...
cbi PORTB,1 ; формирум СТАРТ бит 1=>0
ldi r17,0x08 ; заносим в CNT_BIT - 9. количество сдвигов
;---------------------
ldi r18,43 ; корекция скорости передачи
sta_bit:
dec r18
brne sta_bit
;---------------------
Loop_TX:
sbrs r16,0
cbi PORTB,1
sbrc r16,0
sbi PORTB,1

;------------------
ldi r18,43 ; корекция скорости передачи
tx_bit:
dec r18
brne tx_bit
nop
nop
;------------------

lsr r16 ; здвигаем
dec r17
brne Loop_TX


sbi PORTB,1 ; формирум СТОП бит
;------------------
ldi r18,80 ; 15 корекция скорости передачи
st_bit:
dec r18
brne st_bit;
;------------------

pop r18
pop r17
pop r16

ret



;*******************************************************************************
*******************



LDI R30, low(fing_cmp*2)
LDI R31, high(fing_cmp*2)
lpm r18, Z ;загрузим байт

и R31 обязателен!!!

вот и вся прога... отправки 8ми байт в ком из таблицы
CODE
;**********************************************************************
****************************
;
_reset:

clr r1
out SREG,r1

ldi r16, LOW(RAMEND) ;setup stack pointer
out SPL, r16
; ldi r16, HIGH(RAMEND)
; out SPH, r16


ldi ZL,low(Table_1*2) ; считываем адрес таблицы
ldi ZH,high(Table_1*2)

ldi r19,8

lp:
lpm r24,Z+

call TX_232

dec r19
brne lp


sss:
jmp sss


Table_1:
.db 0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08

;*******************************************************************************
*******************


Сообщение отредактировал IgorKossak - Apr 19 2018, 07:59
Причина редактирования: [codebox] для длинного кода. [code]-для короткого!!!
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 26th June 2025 - 07:43
Рейтинг@Mail.ru


Страница сгенерированна за 0.01462 секунд с 7
ELECTRONIX ©2004-2016