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

 
 
> Помогите разобраться с CV, выдаёт ошибку при компи, где в коротком примере на Си я ошибся?
Метценгерштейн
сообщение Apr 12 2005, 17:56
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



#include <90s2313.h>
#include <delay.h>

void LCD (unsigned char temp, unsigned char temp1){
unsigned char temp2
#asm
outind:
//temp1- адрес, temp2- данные

//запись адреса
LCD_WA:
mov temp,temp1
andi temp,0x0f
ori temp,0x10
out portb,temp

nop
nop

cbi portb, WR1
sbi portb, A0

//запись данных (запись тетрады)
LCD_WN:
mov temp,temp2 //запись младшей тетрады
andi temp,0x0f
ori temp,0x30
out portb,temp
nop
nop

cbi portb, WR1

nop
nop

swap temp2 //запись старшей тетрады
mov temp,temp2
andi temp,0x0f
ori temp,0x30
out portb,temp
nop
nop

cbi portb, WR1
ret
#endasm
}

void main(void) {
DDRB = 0x20; // 0010 0000 output pin pb5
LCD (2,3);

}

я назвал переменные темп, затем сразу пишу на асме, выдаёт ошибку, что- то там про мои переменные говорит, не знаю в чём дело, может нельзя так делать?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
vet
сообщение Apr 12 2005, 18:41
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 550
Регистрация: 16-06-04
Из: Казань
Пользователь №: 32



Локальная переменная temp2 размещается в регистре r16 - работайте с ним
Параметры temp, temp1 передаются через стек данных - обращайтесь к ним соответствующим образом:
LDD Rxx,Y+2 ;к temp
LDD Rxx,Y+1 ;к temp1

А вообще, как писать ассемблерные функции - подробно описано во встроенной помощи CodeVisionAVR.

Моё мнение - это не тот случай, где оправдано переписывание кода на ассемблере. Напишите то же на C - проще и меньше проблем.

PS: ret в конце - ошибка, уберите.


--------------------
Главная линия этого опуса ясна мне насквозь!
Go to the top of the page
 
+Quote Post
Метценгерштейн
сообщение Apr 12 2005, 19:21
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



этот проект у меня полностью написан на асме, хотелось бы Си изучить, вот решил попробовать так. Не понял одного- от куда информация, что темп это r16? а остальные темпы у меня через стек идут? Я идеи не понял, если я в ф-ю передаю параметры с некими переменными, я что не могу эти переменные в асмовской вставе использовать? Или в асмовской вставке я должен с регистрами оперировать? Потом, если полностью на Си переписать, разве код компактней будет? Ведь это просто формирование импульсов. Не понятно.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 22:10
Рейтинг@Mail.ru


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