Не разберусь с кодом. Не получается представить как это работает. Как понять строки
Код:
temp=(lcd&~(1<<RS))|(1<<E); //RS=0 – это команда PORTD=temp; //Выводим на portD старшую тетраду команды, сигналы RS, E asm("nop"); //Небольшая задержка в 1 такт МК, для стабилизации PORTD=temp&~(1<<E); //Сигнал записи команды
Типа в переменной lcd сбросить бит RS и установить бит E и присвоить всё это добро в переменную temp. В PORTD вывести содержимое переменной temp. А через небольшую задержку,в 1 машинный такт,сбросить бит E.
Типа в переменной lcd сбросить бит RS и установить бит E и присвоить всё это добро в переменную temp.
Переменная lcd скорей всего в шестнадцатеричной форме. То есть можно поменять в этом шестнадцатеричном коде отдельно какой нибуть байт? RS я так понимаю это нога и какой то бит в регистре мк. Пусть RA1 к примеу. Не пойму как он в 0х... коде изменит какой то бит.
Заголовок сообщения: Re: Програмирование pic на СИ.
Добавлено: Вс мар 17, 2013 19:34:28
Есть функция
Код:
print_message(A);
выводящая информацию на дисплей через порты. Где А - это тип char (ну или массив char, если быть правильным). Есть некая переменная считаемая в программе i. Вопрос: каким образом можно в A затолкать i, а так же еще несколько символов? Когда то давно делал, но исходники погибли вместе с хардом. Ума не приложу как склеить i, несколко символов и поместить результат в А. Если можно подкиньте примеров работы с char, двухчасовые попытки поискать в интернете ни к чему не привели.
Заголовок сообщения: Re: Програмирование pic на СИ.
Добавлено: Ср мар 20, 2013 19:56:01
Короче, сдаюсь... Вот код вывода на LCD дисплей. Пытаюсь оформить вывод нужной мне строки в main: Спойлер
Код:
/* ВЫВОД ИНФОРМАЦИИ НА LCD-ДИСПЛЕЙ ОТ NOKIA 1100 */ #include <p18f14k50.h> /* Подключаем хидеры */ #include <delays.h> #include <string.h> #include <stdlib.h> #include <stdio.h> #include "lcd1100.h"
// Описываем конфигурацию
#pragma config WDTEN = OFF #pragma config MCLRE = OFF #pragma config DEBUG = OFF #pragma config LVP = OFF #pragma config IESO = OFF
// биты защиты выключить #pragma config CP0 = OFF #pragma config CP1 = OFF #pragma config CPB = OFF #pragma config CPD = OFF #pragma config WRT0 = OFF #pragma config WRT1 = OFF #pragma config WRTB = OFF #pragma config WRTC = OFF #pragma config WRTD = OFF #pragma config EBTR0 = OFF #pragma config EBTR1 = OFF #pragma config EBTRB = OFF
/* ************************************************************************************** * long_to_string() * * Description : Convert a "long" to a null-terminated string * (base = decimal) * Arguments : input = number to be converted * str = pointer to string (i.e. display buffer) * numdigits = number of digits to display * Returns : none ************************************************************************************** */ void long_to_string (unsigned int input, char *str, char numdigits) { char digit; int blank = 1; long_to_string_lz(input, str, numdigits); for (digit=0; digit < numdigits-1; digit++) { if (str[digit] == '0') { if (blank == 1) str[digit] = ' '; } else { blank = 0; } } }
/* ************************************************************************************** * long_to_string_lz() * * Description : Convert a "long" to a null-terminated string, with leading zeros * (base = decimal) * Arguments : input = number to be converted * str = pointer to string (i.e. display buffer) * numdigits = number of digits to display * Returns : none ************************************************************************************** */ void long_to_string_lz (unsigned int input, char *str, char numdigits) { char digit; for (digit=numdigits; digit > 0; digit--) { str[digit-1] = (input % 10) + '0'; input = input / 10; } str[numdigits] = 0; // null-terminate the string }
Какие в main могут быть ошибки касаемо функции itoa? Stdlib.h вроде как подключил. На дисплей выводится собачий кал. Голова уже не думает, может кто опытным глазом глянет и увидит сразу где что не срастается?
Заголовок сообщения: Re: Програмирование pic на СИ.
Добавлено: Сб мар 23, 2013 21:17:18
Модератор
Карма: 90
Рейтинг сообщений: 1432
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4583 Откуда: Планета Земля
Рейтинг сообщения:-1 Медали: 1
Chettuser писал(а):
Чем отличается такая запись:
Код:
print_message("A");
от такой:
Код:
print_message('A');
'A' - это 1 символ, имеющий свой код, т.б. char. А "A" - это уже строка и в функцию передаётся её указатель (char*). Учитывая, что функция принимает, в качестве аргумента, указатель на строку в ROM, первый вариант верный, второй - нет.
void print_message(const rom char * message) ну и правильно что ошибка, в качестве аргумента ожидается указатель из const rom - памяти программ а не данных.
Заголовок сообщения: Re: Програмирование pic на СИ.
Добавлено: Вс мар 24, 2013 16:51:21
Родился
Зарегистрирован: Вс мар 24, 2013 16:35:36 Сообщений: 3
Рейтинг сообщения:0
Добрый вечер. Решил на днях тут по-колдовать с пиками диодами и кнопками. Си на начальном уровне знаю, точнее Си++, но разница не велика. Единственное так и не понял как управлять портами и ножками. К примеру: есть диод на одном порту и на втором кнопка. Как сделать чтобы при нажатии кнопки диод горел, при втором нажатии тух и т.д. Понятно, что там где диод ножка работает на выход, там где кнопка на вход, но не получается всё это написать пробовал на 16F887. Нашел тут один вариант с мигалкой http://habrahabr.ru/post/75312/ , но не суждено он у меня тупо горит и всё никаких миганий. Объясните как управлять портами. Простые проги на си++ с использованием фора или свитча написать могу.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения