Вопрос такой, можно ли пользовать не через асм порт B для параллельного ввода/вывода ввода сразу по всем 8 пинам? ассемблерные вставки можно делать? out PORTB,R16
Вопрос такой, можно ли пользовать не через асм порт B для параллельного ввода/вывода ввода сразу по всем 8 пинам? ассемблерные вставки можно делать? out PORTB,R16
Можно, читай здесь http://arduino.cc/en/Reference/PortManipulation
Вот пример:
На asembler будет немного по сложнейPHP код:
#include <avr/io.h>
#include <avr/delay.h>
int main(void) // начало основой программы
{
DDRD = 0xff; // все выводы порта D сконфигурировать как выходы
while (1) { // Бесконечный цикл
PORTD = 0xff; // установить "1" на всех линиях порта D
_delay_ms(1000);// Ждем 1 сек.
PORTD = 0x00; // установить "0" на всех линиях порта D
_delay_ms(1000);// Ждем 1 сек.
}
}
Вот пример:
PHP код:
//http://compcar.ru
void setup()
{
pinMode(13, OUTPUT);
pinMode(12, INPUT);
}
void loop()
{
unsigned char reg=26;
asm volatile( "push %0 \n"
"label_1%=: \n"
"COM %0 \n"
"out %1, %0 \n"
"rjmp label_1%= \n"
"pop %0 \n"
: "=&r" (reg)
: "I" (_SFR_IO_ADDR(PORTB)) ) ;
}
Последний раз редактировалось Chip; 29.10.2010 в 22:57.
Оооо шайтанама
Спасибо.
Играю в антирадар, раньше делал пилу заряжая коротким импульсом ёмкость , а сейчас поставил AD7302, чтобы точно напругой играть
Напругу можно с помощью ШИМ регулировать
PWM + два RC фильтра, должно быть точно, не хуже чем ЦАП
Да и цап уже куплен и опробован
dragon, правильный (понятный компилятору) С-код работает почти со скоростью асм-кода, если пользоваться именно С, а не структурами arduino. Поэтому на асм имеет заморачиваться только в редких случаях. Чаще возникает необходимость просматривать результат компиляции.
вот во что скомпилялись две строки:
PORTD=0;
PORTB=0xFF;
320: PORTD=0;
+0000042E: B81B OUT 0x0B,R1 Out to I/O location
321: PORTB=0xFF;
+0000042F: EF8F SER R24 Set Register
+00000430: B985 OUT 0x05,R24 Out to I/O location
Прикольно получается. Пила максимального разрешения 256 точек 450Гц , а дальше понижая дискретность можно повысить частоту сканирования. 25 точек - 4.5КГц
PHP код:
for( b0=255;b0>0;b0--)
{
bh=b0>>2;
bl=b0<<4;
PORTB=bl ; //PB4,PB5
PORTC=bh ; //PC0-PC5
digitalWrite(8,LOW); // Пин записи в DAC
digitalWrite(8,HIGH);
}
Последний раз редактировалось dragon; 31.10.2010 в 02:57.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)