отображение чисел в Virtual terminal
- Войдите на сайт для отправки комментариев
Пнд, 14/05/2012 - 22:07
есть микроконтроллер 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

Преобразование 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 в терминал.
Писано из головы, поэтому может потребоваться проверка/настройка/отладка.
step962, здравствуйте. как этот кусок вставить в прошивку? прошивка на ассемблере. или в другое место?
Преобразование Byte (Int, Long ...) в строку символов:
+
Результат мона слать по UART в терминал.
Serial.print(val); ?
step962, здравствуйте. как этот кусок вставить в прошивку? прошивка на ассемблере. или в другое место?
Варианты:
Наименее гиморно - пункты 1 и 2. Какой именно, зависит от того что вам роднее asm или C++
на с++ намного проще, он понятен. но мне надо именно на ассемблере.
Leshak, можете мне помочь?
Еще один вариант
- поискать в Интернете ("AVR ASM digital to string conversion" или "AVR ASV преобразование числа в строку").
- среди бездны ссылок найти что-нибудь вроде:
www.avr-asm-tutorial.net/avr_en/calc/CONVERSION.html
- воспользоваться найденным
на с++ намного проще, он понятен. но мне надо именно на ассемблере.
Leshak, можете мне помочь?
Вряд ли. Я последний раз щупал ассемблер в 1991 году. С Питером Абелем подмышкой :) (кто помнит те времена - поймет ;)
Для меня и переход к C++ уже ощутимый downgrade с ставшего привычным C#
По асму, поищите народ на easyelectronics.ru, там больше шансов найти "тру микроконтрольщика". Я слабо себе представляю человека которые хорошо зная asm, полезет возявкатся с ардуиной (ну разве что разок посотмотреть/пощупать).