Четверг, 28.03.2024, 22:40
Микроконтроллерная техника AVR
Главная Регистрация Вход
Приветствую Вас, Гость · RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Микроконтроллеры » Вопросы по МК » функция для сдвигового регистра (помогите!)
функция для сдвигового регистра
neoxДата: Пятница, 04.03.2011, 21:19 | Сообщение # 1
Рядовой
Группа: Пользователи
Сообщений: 8
Репутация: 0
Статус: Offline
привет всем всем всем! пишу функцию для сдвигового регистра и хочу поместить её в папку include вот код

-------------------------------сама функция-------------------------------------
void hc164_wr(unsigned char mas[],unsigned char mas_index)
{
unsigned char a;
for(a=0;a<8;a++)
{
PORTB.0=mas[mas_index]&1<<a;
PORTB.1=0;
PORTB.1=1;
}
}
-------------------------------------------------------------------------------------
хочется сделать ее универсальной тоесть менять сами порты и биты портов. как можно эти параметры передовать через функцию
дайте добрый совет пожалуйсто!

 
HiSERДата: Понедельник, 07.03.2011, 11:59 | Сообщение # 2
Продвинутый автор!
Группа: Проверенные
Сообщений: 254
Репутация: 11
Статус: Offline
hc164.h
Code

#ifndef _hc164_h_
#define _hc164_h_

//#asm
//.equ __hc164_port=0x18 //PORTB ATmega8
//.equ __hc164_data=0
//.equ __hc164_clk=1
//#endasm
//#include "hc164.h"

void hc164_init();
void hc164_wr(unsigned char mas[],unsigned char mas_index);

#pragma library hc164.c
#endif

hc164.c
Code

void hc164_init() {
#asm
sbi __hc164_port,__hc164_clk
sbi __hc164_port-1,__hc164_data
sbi __hc164_port-1,__hc164_clk
#endasm
}

void hc164_wr(unsigned char mas[],unsigned char mas_index) {
#asm
ldd r26,y+1
ldd r27,y+2
ld r30,y
add r26,r30
clr r30
adc r27,r30
ld r30,x
ldi r31,8
__hc164_next_bit:
sbrc r30,0
sbi __hc164_port,__hc164_data
sbrs r30,0
cbi __hc164_port,__hc164_data
nop
nop
lsr r30
cbi __hc164_port,__hc164_clk
nop
nop
sbi __hc164_port,__hc164_clk
nop
nop
dec r31
brne __hc164_next_bit
#endasm
}

используем так:

Code

#asm
.equ __hc164_port=0x18 //PORTB ATmega8
.equ __hc164_data=0
.equ __hc164_clk=1
#endasm
#include "hc164.h"
..........
hc164_init();
..........
hc164_wr([mas],[index]);


Сообщение отредактировал HiSER - Понедельник, 07.03.2011, 12:11
 
neoxДата: Понедельник, 07.03.2011, 19:48 | Сообщение # 3
Рядовой
Группа: Пользователи
Сообщений: 8
Репутация: 0
Статус: Offline
hiser большое спасибо за отклик! я во всех необходимих файлах прописал ваш код, но есть проблемка при этой записи
#asm
.equ __hc164_port=0x18 //PORTB ATmega8
.equ __hc164_data=0
.equ __hc164_clk=1
#endasm
кампилятор пишет "error(s) occured during assemby" я к сожалению совершенно не знаю асма может где нибуть в коде закралась ошыбочка?
 
HiSERДата: Среда, 09.03.2011, 17:23 | Сообщение # 4
Продвинутый автор!
Группа: Проверенные
Сообщений: 254
Репутация: 11
Статус: Offline
куда это вставляешь?
 
Форум » Микроконтроллеры » Вопросы по МК » функция для сдвигового регистра (помогите!)
  • Страница 1 из 1
  • 1
Поиск:

Хостинг от uCoz