отображение чисел в Virtual terminal

vo_sa
Offline
Зарегистрирован: 14.05.2012

есть микроконтроллер AT90S8515, 8 кнопок, 8 светодиодов (для наглядности), и виртуал терминал. Принцип работы: какую кнопку нажмем, такой диод и загорится. В виртуал терминале отображается 0 и 1.
 мне нужно сделать так, чтобы виртуал терминал отображал числа. от 0 до 2^8. 
 где можно найти нужную прошивку? заранее спасибо.
 

.include "8515def.inc" 

.def temp=r16
.def last_state=r18
.def present_state=r19
.def count=r20
.def serial=r21

.org 0
      rjmp start
.org OVF0addr
      rjmp tim0



start:ldi temp,LOW(RAMEND)
      out spl,temp
	  ldi temp,HIGH(Ramend)
	  out sph, temp
;
	  rcall port_init
	  rcall tim0_init
	  rcall uart_init
;
      sei
;
Loop: 
     rjmp loop
;
tim0: push temp
      in temp,sreg
	  push temp
;
 	  com last_state
	  in present_state,pina
	  and last_state,present_state
	  in temp,portb
	  eor temp,last_state
	  out portb,temp
	  mov last_state,present_state
;
      ldi count, 8
next_bit:
	rol temp
	clr serial
	rol serial
	subi serial,-$30
	rcall Trans
	dec count
	brne next_bit
;
	ldi serial,$0a
	rcall trans
;   
    ldi serial,$0d
	rcall trans 
;
	rcall receive
;
	pop temp
	out sreg, temp
	pop temp
	reti
;		
trans:sbis USR,UDRE
	rjmp trans
	out UDR,serial

	ret
;
receive:
      sbic USR,RXC


	  rjmp input

	  ret
input:in temp,UDR
	out portb,temp
	ret

uart_init:
	ldi temp,0b00011000
	out UCR, temp
	ldi temp,23
	out UBRR, temp
	ret
port_init:
	ldi temp,$ff
	out ddrb,temp
	ldi temp,$00
	out portb,temp
	out ddra,temp
	ldi last_state,$ff
	ret
;
tim0_init:
    ldi temp,$5
	out tccr0,temp
	ldi temp,(1<<toie0)
	out timsk,temp
	
	
ret

 

step962
Offline
Зарегистрирован: 23.05.2011

 Преобразование Byte (Int, Long ...) в строку символов:

char str[5],buf[5]; // выделить достаточно места в зависимости от ожидаемой длины
byte val; // преобразуемое значение. Предположим, что уже задано
int k,i=0;
if (!val) { // самый простой случай - val=0
  str[0]='0';
  i=1
}
else {
  while(val) {
    k = val%10;
    buf[i]=k+'0';
    i++;
    val/=10;
  }
// цифири стоят в буфере в обратном порядке - перетасуем их
  for(k=0;k<i;k++)
    str[k]=buf[i-k-1];
}
str[i]=0; // признак конца строки

 Результат мона слать по UART в терминал.

Писано из головы, поэтому может потребоваться проверка/настройка/отладка.

vo_sa
Offline
Зарегистрирован: 14.05.2012

step962, здравствуйте. как этот кусок вставить в прошивку? прошивка на ассемблере. или в другое место?

leshak
Offline
Зарегистрирован: 29.09.2011

step962 пишет:

 Преобразование Byte (Int, Long ...) в строку символов:

+

 Результат мона слать по UART в терминал.

Serial.print(val);  ?

leshak
Offline
Зарегистрирован: 29.09.2011

vo_sa пишет:

step962, здравствуйте. как этот кусок вставить в прошивку? прошивка на ассемблере. или в другое место?

Варианты:

  1.  Переписать скетч, который дал step962, на ассемблер
  2. Переписать вашу прошивку с ассемблера, в C/C++ (вообщем сделать из нее ардуино-скетч)
  3. Попытатся вставить вашу прошивку в скетч как inline asm
  4. Скомпилировать скетч, который дал step962, в hex, дизасембировать его и найти кусок отвечающий за преобразование.

Наименее гиморно  - пункты 1 и 2. Какой именно, зависит от того что вам роднее asm или C++

 

vo_sa
Offline
Зарегистрирован: 14.05.2012

на с++ намного проще, он понятен. но мне надо  именно на ассемблере. 

Leshak, можете мне помочь?

step962
Offline
Зарегистрирован: 23.05.2011

 Еще один вариант

- поискать в Интернете ("AVR ASM digital to string conversion" или "AVR ASV преобразование числа в строку").
- среди бездны ссылок найти что-нибудь вроде:
www.avr-asm-tutorial.net/avr_en/calc/CONVERSION.html
- воспользоваться найденным

 

leshak
Offline
Зарегистрирован: 29.09.2011

vo_sa пишет:

на с++ намного проще, он понятен. но мне надо  именно на ассемблере. 

Leshak, можете мне помочь?

Вряд ли. Я последний раз щупал ассемблер в 1991 году. С Питером Абелем подмышкой :) (кто помнит те времена - поймет ;) 

Для меня и переход к C++ уже ощутимый downgrade с ставшего привычным C#

По асму, поищите народ на easyelectronics.ru, там больше шансов найти "тру микроконтрольщика". Я слабо себе представляю человека которые хорошо зная asm, полезет возявкатся с ардуиной (ну разве что разок посотмотреть/пощупать).