Mega8. перевести с "С+" на ASM. пользов-е UART

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Вымогатель припоя
Аватара пользователя
Сообщения: 690
Зарегистрирован: Вс мар 04, 2007 01:17:12

Сообщение Alexeus »

Я начал изучать мк на асм (по известному курсу :) ) и на "С" не совсем понимаю что написано. Мне нужно на меге8 задействовать ЮАРТ и передавать (через буфер 232 ессес-но) данные на ПК. Нашел в пример кусок кода на "С", но кто бы мне помог разъяснить или перевести в АСМ его? пжлст :)

#include <mega8>

// Standard Input/Output functions
#include <stdio>
#include <delay>
// Declare your global variables here


void uart_putc(char data) {
while (!(UCSRA & 0x20)); // Wait untill USART data register is empty
// Transmit data
UDR = data;
}

void main(void)
{

PORTB=0x00;
DDRB=0x00;


PORTC=0x00;
DDRC=0x00;

PORTD |= 0x03; // RXD è TXD ïîäòÿãèâàþòñÿ â +U
DDRD &= ~0x01; // RXD âõîä
DDRD |= 0x02;

TCCR0=0x00;
TCNT0=0x00;


TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;


ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
MCUCR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;

// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: Off
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud rate: 9600
UCSRA=0x00;
UCSRB=0x08;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x19;


ACSR=0x80;
SFIOR=0x00;

while (1)
{
// Place your code here
uart_putc (0x52);
delay_ms(200);
};
}
Реклама
Встал на лапы
Аватара пользователя
Сообщения: 84
Зарегистрирован: Вт ноя 25, 2008 18:56:41

Сообщение OBIVAN »

void uart_putc(char data) {
while (!(UCSRA & 0x20)); // Wait untill USART data register is empty
// Transmit data
UDR = data;
}
Что касается этой части то можно попробовать так:

uart_putc:
sbis ucsra,udre
rjmp uart_putc
out udr,data
ret
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 690
Зарегистрирован: Вс мар 04, 2007 01:17:12

Сообщение Alexeus »

смущает безусловный переход rjmp- он ни от чего не зависит- постоянно будет посылать на метку, даже если регистр установлен. команда sbis должна пропускать дальше по коду, а дальше у вас rjmp...
Встал на лапы
Аватара пользователя
Сообщения: 84
Зарегистрирован: Вт ноя 25, 2008 18:56:41

Сообщение OBIVAN »

Она и пропустит rjmp только тогда когда установится разряд
Реклама
Эиком - электронные компоненты и радиодетали
Вымогатель припоя
Аватара пользователя
Сообщения: 690
Зарегистрирован: Вс мар 04, 2007 01:17:12

Сообщение Alexeus »

ну Ок. пропустит до rjmp и сразу произойдет безусловный переход опять на метку выше. А в каком случае суждено сработать "out udr,data" ведь он ниже rjmp`a стоит и до него очередь никогда не дойдет...
Реклама
Встал на лапы
Аватара пользователя
Сообщения: 84
Зарегистрирован: Вт ноя 25, 2008 18:56:41

Сообщение OBIVAN »

[quote="Alexeus"]ну Ок. пропустит до rjmp и сразу произойдет безусловный переход
С этого места поясняю пропустит не до rjmp а сам rjmp, проверял в
свое время все вроде отлично работало
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 690
Зарегистрирован: Вс мар 04, 2007 01:17:12

Сообщение Alexeus »

а, в смысле, "через" rjmp перешагнет и не будет безусловного перехода, а сразу после sbis будет out udr,data? это синтаксис команды sbis такой?
Встал на лапы
Аватара пользователя
Сообщения: 84
Зарегистрирован: Вт ноя 25, 2008 18:56:41

Сообщение OBIVAN »

Да так и будет :)
Мучитель микросхем
Аватара пользователя
Сообщения: 491
Зарегистрирован: Вс янв 07, 2007 01:45:48
Откуда: Российская Федерация, будь она неладна...

Сообщение Pooher »

это синтаксис команды sbis такой?
Это принцип дейсвия у неё такой.
Даташиты читать надо, чтоб потом людей не путать и самому таких вопросов не задавать. :)
Вымогатель припоя
Аватара пользователя
Сообщения: 690
Зарегистрирован: Вс мар 04, 2007 01:17:12

Сообщение Alexeus »

да читаем потихоньку... профессионалами не рождаются, вот и задаем пока глупые вопросы. Зато теперь все предельно ясно. :)
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»