Пн янв 15, 2018 15:12:02
Пн янв 15, 2018 15:12:32
Вт янв 16, 2018 06:56:51
СКАЗОЧНИК писал(а):Вот это я написал на СИ
- Код:
#define RSport PORTB // Указать порт, к которому подключена линия управления RS
#define RSddr DDRB // Указать регистр направления порта, к которому подключена RS
#define RSpin 5 // Указать номер бита порта, к которому подключеа линия RS
А вот это надо переделать на СИ
- Код:
sbi RSddr, RSpin
#define RS_PORT PORTB
#define RS_DDR DDRB
#define RS_PIN PINB
#define RS PB5
#define set_bit(reg,bit) reg |= (1<<bit)
#define clr_bit(reg,bit) reg &= (~(1<<bit))
#define sbi(reg,bit) set_bit(reg,bit)
#define cbi(reg,bit) clr_bit(reg,bit)
sbi (RS_DDR, RS)
Вт янв 16, 2018 07:14:50
Вт янв 16, 2018 13:39:17
void LCDInit (void)
{
uint8_t byte;
SetE();
LCDPORT&=0x0F;
LCDPORT|=0x30;
PulES();
PulES();
PulES();
LCDPORT&=0x0F;
LCDPORT|=0x20;
PulES();
byte = 0x28;
ToLCD(byte);
byte = 0x08;
ToLCD(byte);
byte = 0x0C;
ToLCD(byte);
byte = 0x01;
ToLCD(byte);
byte = 0x06;
ToLCD(byte);
}
void ToLCDText(const uint8_t* data)
{
uint8_t buffer [32];
for(uint8_t i = 0; i < 32; i++) buffer[i] = 0x20;
for(uint8_t i = 0; i < 32; i++)
{
if(data[i] != 0) buffer[i] = data[i];
else break;
}
SetDdramAddr (0);
RsH();
for(uint8_t i = 0; i < 16; i++) ToLCD(buffer[i]);
RsL();
SetDdramAddr (0x40);
RsH();
for(uint8_t i = 16; i < 32; i++) ToLCD(buffer[i]);
RsL();
}
void SetDdramAddr (uint8_t addr)
{
ToLCD(addr|0x80);
}
void ToLCD (const uint8_t data)
{
LCDPORT&=0x0F;
LCDPORT|=data&0xF0;
PulEF();
LCDPORT&=0x0F;
LCDPORT|=data<<4;
PulEF();
}
Вт янв 16, 2018 16:36:19
Ср янв 17, 2018 09:17:49
Вс янв 21, 2018 15:17:07
Вс янв 21, 2018 15:28:46
lcd_send_nibble (lcd_data << 4);
104 lcd_send_nibble (lcd_data << 4);
\ 0000000E 9582 SWAP R24
\ 00000010 7F80 ANDI R24, 0xF0
\ 00000012 2F08 MOV R16, R24
\ 00000014 .... RCALL lcd_send_nibble
Вс янв 21, 2018 15:38:27
void WRITE (unsigned char R18)
{
DB_LINE (R18); // Вызываем подпрограмму, которая выведет значение тетрады в порт(ы)
STROBE ();
// swap R18 // Перевернем тетрады местами
unsigned char b = R18>>4 | R18<<4;
R18 = b;
DB_LINE (R18);
STROBE ();
asm volatile("sei");
}
Вс янв 21, 2018 17:12:18
В каком ассемблере? Если речь о avr, то да. Но и в AVR-GCC это тоже есть, соответственно: __builtin_avr_swap(x) Описана в заголовочном файле builtins.h avr-libc, ежели чего.СКАЗОЧНИК писал(а):Ковыряю информацию, как перевернуть тетрады в байте местами?
В ассемблере есть одна команда, очень удобная, а в Си?
Вс янв 21, 2018 17:40:42
Вс янв 21, 2018 17:43:26
СКАЗОЧНИК писал(а):...
Вс янв 21, 2018 17:52:22
Вс янв 21, 2018 18:04:39
Вс янв 21, 2018 18:28:45
вот я писал: https://www.simple-devices.ru/articles/ ... -interfaceСКАЗОЧНИК писал(а):Может дадите совет, что почитать по подключению 1602 к Атмега16, чтобы 4битный режим и чтение флага занятости. А еще, выводы любых портов, которые свободные используются не по порядку. (Ранее, я это делал на ассемблере и очень компактно получалось).
Пн янв 22, 2018 06:47:02
Пн янв 22, 2018 11:04:33
Пн янв 22, 2018 11:27:42
Пн янв 22, 2018 11:51:49