Форум РадиоКот • Просмотр темы - Програмирование pic на СИ.
Сообщения без ответов | Активные темы
Страница 4 из 69
[ Сообщений: 1367 ]
, , , , , , ...
Автор
Сообщение
vovik15
Заголовок сообщения: Re: Програмирование pic на СИ.
Добавлено: Чт фев 03, 2011 12:29:19
Карма: 4
Рейтинг сообщений: 1
Зарегистрирован: Сб ноя 08, 2008 18:32:36Сообщений: 767
Рейтинг сообщения: 0
пжалуста X |= 0b11110000; Z &= 0b00001111;
Вернуться наверх
Реклама
misterkuk
Заголовок сообщения: Re: Програмирование pic на СИ.
Добавлено: Чт фев 03, 2011 13:15:40
Карма: 3
Рейтинг сообщений: 0
Зарегистрирован: Сб апр 17, 2010 10:30:13Сообщений: 400
Рейтинг сообщения: 0
vovik15 писал(а):
пжалуста X |= 0b11110000; Z &= 0b00001111;
Я не пойму зачем? Ну применим мы это, у нас только добавится пару строчек и пару переменных. Почему програма не КОМПЕРИРУЕТСЯ так как я написал? Ведь вариантов реализации этой программы много. Я написал как я думаю легче всего. Я в тупике. Почему она не компилируется.
Вернуться наверх
Реклама
misterkuk
Заголовок сообщения: Re: Програмирование pic на СИ.
Добавлено: Чт фев 03, 2011 13:24:58
Карма: 3
Рейтинг сообщений: 0
Зарегистрирован: Сб апр 17, 2010 10:30:13Сообщений: 400
Рейтинг сообщения: 0
vovik15 писал(а):
&= при накладывании маски &= , в тех биах где в маске стоит 0 , биты исходного числа принамают значение 0, независимо от первоночального значения, в тех битах, где в маске стоит 1, исходное число не меняется |= при накладывании маски |=, в тех битах где в маске стоит 1, биты исходного числа принимают 1, независимо то первоначально значения. В тех битах, где в маске стоит 0, исходное значение не меняется
Ну не очень наглядный пример:) Прочитал внимательней. И не увидел смысла вообще.
Тоесть Пример.
Код:
X &= 0b11110000; /* Читаю текст. "в тех биах где в маске стоит 0 , биты исходного числа принамают значение 0, независимо от первоночального значения" Значит там где был "0" он там и остался. Там где были "1" , они так и остолись так как они не меняются. В итоге получилось 0b11110000. Тоесть нечё не поменялось.
Вернуться наверх
vovik15
Заголовок сообщения: Re: Програмирование pic на СИ.
Добавлено: Чт фев 03, 2011 14:01:09
Карма: 4
Рейтинг сообщений: 1
Зарегистрирован: Сб ноя 08, 2008 18:32:36Сообщений: 767
Рейтинг сообщения: 0
давай сюда свою программу целиком,щас скомпелируем
Вернуться наверх
misterkuk
Заголовок сообщения: Re: Програмирование pic на СИ.
Добавлено: Чт фев 03, 2011 14:12:59
Карма: 3
Рейтинг сообщений: 0
Зарегистрирован: Сб апр 17, 2010 10:30:13Сообщений: 400
Рейтинг сообщения: 0
Вот она:)
Код:
#include <pic.h> __CONFIG (XT & UNPROTECT & LVPDIS & BOREN & MCLRDIS & PWRTEN & WDTDIS); void podgot (void) // подготовка МК void podpr (void) void main (void) { podgot() while (1) { podpr(); //функция вызываеться постоянно if (RA1 == 0) PORTB = 0b11110000; else PORTB = 0; } } //конец функции // === подготовка МК void podgot (void) { TRISA = 0b11111111; // направление работы ножек порта А TRISB = 0b00000000; // направление работы ножек порта В CMCON = 0x07; // отключение компараторов PORTA = 0; // очищаем порт А PORTB = 0; // очищаем порт Б RBPU = 1; // подтягивающие R (0-вкл, 1-выкл) } void podpr (void) { if (RA2 == 0) PORTB = 0b00001111; else PORTB = 0b00000000; }
Вернуться наверх
Реклама
vovik15
Заголовок сообщения: Re: Програмирование pic на СИ.
Добавлено: Чт фев 03, 2011 14:26:19
Карма: 4
Рейтинг сообщений: 1
Зарегистрирован: Сб ноя 08, 2008 18:32:36Сообщений: 767
Рейтинг сообщения: 0
двоеточие неправильно понаставил смотри как надо
Код:
#include <pic.h> __CONFIG (XT & UNPROTECT & LVPDIS & BOREN & MCLRDIS & PWRTEN & WDTDIS); void podgot (void); // подготовка МК void podpr (void); void main (void) { podgot(); while (1) { podpr(); //функция вызываеться постоянно if (RA1 == 0) PORTB = 0b11110000; else PORTB = 0; } } //конец функции // === подготовка МК void podgot (void) { TRISA = 0b11111111; // направление работы ножек порта А TRISB = 0b00000000; // направление работы ножек порта В CMCON = 0x07; // отключение компараторов PORTA = 0; // очищаем порт А PORTB = 0; // очищаем порт Б RBPU = 1; // подтягивающие R (0-вкл, 1-выкл) } void podpr (void) { if (RA2 == 0) PORTB = 0b00001111; else PORTB = 0b00000000; }
Вернуться наверх
Реклама
misterkuk
Заголовок сообщения: Re: Програмирование pic на СИ.
Добавлено: Чт фев 03, 2011 14:36:07
Карма: 3
Рейтинг сообщений: 0
Зарегистрирован: Сб апр 17, 2010 10:30:13Сообщений: 400
Рейтинг сообщения: 0
vovik15 писал(а):
двоеточие неправильно понаставил смотри как надо
ооо Супер. Терь обьясните, Где ставятся а где нет "
; " ?
Вернуться наверх
vovik15
Заголовок сообщения: Re: Програмирование pic на СИ.
Добавлено: Чт фев 03, 2011 15:14:21
Карма: 4
Рейтинг сообщений: 1
Зарегистрирован: Сб ноя 08, 2008 18:32:36Сообщений: 767
Рейтинг сообщения: 0
ГДЕ ОБЪЯВЛЯЕТЬСЯ ФУНКЦИЯ ,ТАМ НУЖНО ПОСТАВИТЬ ; например void podgot (void); //объявление есть точки podgot(); //вызов есть точки void podgot (void) //тут нет точек { //тра ля ля } //========= дальше что касаеться IF смотрим где ставить точки if (A>B) {что то делаем}; else {тра ля ля};
Вернуться наверх
ut1wpr
Заголовок сообщения: Re: Програмирование pic на СИ.
Добавлено: Пт фев 04, 2011 11:13:44
Зарегистрирован: Ср янв 05, 2011 10:03:18Сообщений: 581
Рейтинг сообщения: 0
misterkuk писал(а):
vovik15 писал(а):
двоеточие неправильно понаставил смотри как надо
ооо Супер. Терь обьясните, Где ставятся а где нет "
; " ?
СТОП! Временно прекрати писать программы!
На форуме по принципу "вопрос - ответ" язык, его синтаксис, его тонкости не выучишь. Предполагается первичное самостоятельное изучение материала.
Бегом читать Кернигана и Ричи
http://lanzog.narod.ru/liter/kernigan-c/kernigan-c.html . Кодировка UTF-8.
Это авторы языка и эта книга считается классикой. С неё рекомендовано начинать всем. Проста и понятна, как борщ.
_________________ С уважением, Виктор.
Вернуться наверх
Реклама
misterkuk
Заголовок сообщения: Re: Програмирование pic на СИ.
Добавлено: Пт фев 04, 2011 13:13:25
Карма: 3
Рейтинг сообщений: 0
Зарегистрирован: Сб апр 17, 2010 10:30:13Сообщений: 400
Рейтинг сообщения: 0
ut1wpr писал(а):
misterkuk писал(а):
vovik15 писал(а):
двоеточие неправильно понаставил смотри как надо
ооо Супер. Терь обьясните, Где ставятся а где нет "
; " ?
СТОП! Временно прекрати писать программы!
На форуме по принципу "вопрос - ответ" язык, его синтаксис, его тонкости не выучишь. Предполагается первичное самостоятельное изучение материала.
Бегом читать Кернигана и Ричи
http://lanzog.narod.ru/liter/kernigan-c/kernigan-c.html . Кодировка UTF-8.
Это авторы языка и эта книга считается классикой. С неё рекомендовано начинать всем. Проста и понятна, как борщ.
Принцип присутствует.
. И я спросил про точки с запятой потомучто не смог найти вразумительного ответа в учебнике. А здесь чётко и ясно ответили. и этот учебник языка писался под компьютеры. Тоесть много для пиков там не пойдёт. Например вывод чего то на экран. Там посмотреть только основы, типа операторы , функции и тому подобные. Примеров нет естественно таких которые затрагивали мк. Например там не будет рассказываться о прерываниях в мк. А как тогда учится? Это си а не си для пик:( Но всё же лучше чем ничего.
_____
А вот не задача. На сколько я понимаю вывод информации на LCD дисплей програмно легче и меньше програма чем вывод этой информации на 7сегментный индикатор. К примеру слово какоето. Или это не так?
Вернуться наверх
vovik15
Заголовок сообщения: Re: Програмирование pic на СИ.
Добавлено: Пт фев 04, 2011 14:01:43
Карма: 4
Рейтинг сообщений: 1
Зарегистрирован: Сб ноя 08, 2008 18:32:36Сообщений: 767
Рейтинг сообщения: 0
а вот и не угадал
на семесигментник проше вывести чем на лсд(всмысле кода меньше будет)
жк ведь просто так не запустиш,там инициализацию нужно делать и прочее.
нет,я конечно не спорю,есть такие люди у которых один вывод на семисегментник половину памяти занимает
Вернуться наверх
misterkuk
Заголовок сообщения: Re: Програмирование pic на СИ.
Добавлено: Пт фев 04, 2011 14:04:42
Карма: 3
Рейтинг сообщений: 0
Зарегистрирован: Сб апр 17, 2010 10:30:13Сообщений: 400
Рейтинг сообщения: 0
Ёщё. В асемблере 1 команда 1 машинный цикл. ( кроме команд переходов). Там можнобыло посчитать команды и организовать всё в те временные рамки которые нужны. А как на си обстоят дела со временем?
Вернуться наверх
vovik15
Заголовок сообщения: Re: Програмирование pic на СИ.
Добавлено: Пт фев 04, 2011 14:13:10
Карма: 4
Рейтинг сообщений: 1
Зарегистрирован: Сб ноя 08, 2008 18:32:36Сообщений: 767
Рейтинг сообщения: 0
сишная команда может выполняться несколько машинных циклов время задержек можно посчитать в мплабе. но для индикации это не критично. единственный случай в моей практике когда пришлось расчитывать временные интервалы,это работа с термометром ds18b20
Вернуться наверх
misterkuk
Заголовок сообщения: Re: Програмирование pic на СИ.
Добавлено: Вс фев 06, 2011 18:10:15
Карма: 3
Рейтинг сообщений: 0
Зарегистрирован: Сб апр 17, 2010 10:30:13Сообщений: 400
Рейтинг сообщения: 0
В примере асемблера есть такая функция как "Антидребезг". Тоесть например одно нажатие увеличивает значение на индикаторе на 1. Это к примеру. но за даже быстрое нажатие програма сделает не один виток. Как это организовать. Я думал с помощью "IF" оператора. Но там большой текст выходит. Может есть способ попроще?
Вернуться наверх
12val12
Заголовок сообщения: Re: Програмирование pic на СИ.
Добавлено: Пн фев 07, 2011 01:11:54
Зарегистрирован: Пт янв 29, 2010 19:42:27Сообщений: 315
Рейтинг сообщения: 0
сделал частотомер на пике +лсд триум марс .алгоритм частотомера тупой
кто то может переписать то место где частотомер чтобы было точнее
Код:
#include <htc.h> #include <pic.h> #ifndef _XTAL_FREQ // Unless already defined assume 4MHz system frequency // This definition is required to calibrate __delay_us() and __delay_ms() #define _XTAL_FREQ 4433323 #endif __CONFIG(0x3f02); ///от внутреннего генератора временено unsigned long freq = 0; // unsigned int incTMR0 = 0; //кол-во переполнений TMR0 void gotoxy(char datax,char datay); void out_Spi_LcdCom ( unsigned char data1); // выдача команд на LCD void out_Spi_LcdDat ( unsigned char data1); // выдача данных на LCD void print_longint_12_16 (unsigned long int s,char y) ; // печать больших12х16 цифр до 10e6 void char_12_16(char c,char x, char y); unsigned long int a ; unsigned int i; //unsigned char c0,c1,c2,c3,c4,c5,c6,c7,c8,c9; #define LCD_RESET RB2 #define LCD_CLK RB3 #define LCD_DATA RB0 #define LCD_DC RB1 // cs на корпусе static const char deg12x16[11][24] = { // 0x30 - '0'. // {0x00, 0xF8, 0xFE, 0x06, 0x03, 0x03, 0x03, 0x03, 0x03, 0x06, 0xFE, 0xF8, // 0x00, 0x07, 0x1F, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0x1F, 0x07}, { 0x00, 0x07, 0x1F, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0x1F, 0x07, 0x00, 0xF8, 0xFE, 0x06, 0x03, 0x03, 0x03, 0x03, 0x03, 0x06, 0xFE, 0xF8}, // 0x31 - '1'. // {0x00, 0x00, 0x00, 0x0c, 0x0c, 0x0e, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, // 0x00, 0x00, 0x00, 0x30, 0x30, 0x30, 0x3f, 0x3f, 0x30, 0x30, 0x30, 0x00}, { 0x00, 0x00, 0x00, 0x30, 0x30, 0x30, 0x3f, 0x3f, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x0c, 0x0e, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00}, // 0x32 - '2'. // {0x00, 0x1c, 0x1e, 0x07, 0x03, 0x03, 0x83, 0xc3, 0xe3, 0x77, 0x3e, 0x1c, // 0x00, 0x30, 0x38, 0x3c, 0x3e, 0x37, 0x33, 0x31, 0x30, 0x30, 0x30, 0x30}, {0x00, 0x30, 0x38, 0x3c, 0x3e, 0x37, 0x33, 0x31, 0x30, 0x30, 0x30, 0x30, 0x00, 0x1c, 0x1e, 0x07, 0x03, 0x03, 0x83, 0xc3, 0xe3, 0x77, 0x3e, 0x1c}, // 0x33 - '3'. // {0x00, 0x0c, 0x0e, 0x07, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xe7, 0x7e, 0x3c, // 0x00, 0x0c, 0x1c, 0x38, 0x30, 0x30, 0x30, 0x30, 0x30, 0x39, 0x1f, 0x0e}, {0x00, 0x0c, 0x1c, 0x38, 0x30, 0x30, 0x30, 0x30, 0x30, 0x39, 0x1f, 0x0e, 0x00, 0x0c, 0x0e, 0x07, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xe7, 0x7e, 0x3c}, // 0x34 - '4'. // {0x00, 0xc0, 0xe0, 0x70, 0x38, 0x1c, 0x0e, 0x07, 0xff, 0xff, 0x00, 0x00, // 0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x3f, 0x3f, 0x03, 0x03}, {0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x3f, 0x3f, 0x03, 0x03, 0x00, 0xc0, 0xe0, 0x70, 0x38, 0x1c, 0x0e, 0x07, 0xff, 0xff, 0x00, 0x00}, // 0x35 - '5'. // {0x00, 0x3f, 0x7f, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0xe3, 0xc3, 0x83, // 0x00, 0x0c, 0x1c, 0x38, 0x30, 0x30, 0x30, 0x30, 0x30, 0x38, 0x1f, 0x0f}, {0x00, 0x0c, 0x1c, 0x38, 0x30, 0x30, 0x30, 0x30, 0x30, 0x38, 0x1f, 0x0f, 0x00, 0x3f, 0x7f, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0xe3, 0xc3, 0x83}, // 0x36 - '6'. // {0x00, 0xc0, 0xf0, 0xf8, 0xdc, 0xce, 0xc7, 0xc3, 0xc3, 0xc3, 0x80, 0x00, // 0x00, 0x0f, 0x1f, 0x39, 0x30, 0x30, 0x30, 0x30, 0x30, 0x39, 0x1f, 0x0f}, {0x00, 0x0f, 0x1f, 0x39, 0x30, 0x30, 0x30, 0x30, 0x30, 0x39, 0x1f, 0x0f, 0x00, 0xc0, 0xf0, 0xf8, 0xdc, 0xce, 0xc7, 0xc3, 0xc3, 0xc3, 0x80, 0x00}, // 0x37 - '7'. // {0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0xc3, 0xf3, 0x3f, 0x0f, 0x03, // 0x00, 0x00, 0x00, 0x00, 0x30, 0x3c, 0x0f, 0x03, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x30, 0x3c, 0x0f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0xc3, 0xf3, 0x3f, 0x0f, 0x03}, // 0x38 - '8'. // {0x00, 0x00, 0xbc, 0xfe, 0xe7, 0xc3, 0xc3, 0xc3, 0xe7, 0xfe, 0xbc, 0x00, // 0x00, 0x0f, 0x1f, 0x39, 0x30, 0x30, 0x30, 0x30, 0x30, 0x39, 0x1f, 0x0f}, {0x00, 0x0f, 0x1f, 0x39, 0x30, 0x30, 0x30, 0x30, 0x30, 0x39, 0x1f, 0x0f, 0x00, 0x00, 0xbc, 0xfe, 0xe7, 0xc3, 0xc3, 0xc3, 0xe7, 0xfe, 0xbc, 0x00}, // 0x39 - '9'. // {0x00, 0x3c, 0x7e, 0xe7, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xe7, 0xfe, 0xfc, // 0x00, 0x00, 0x00, 0x30, 0x30, 0x30, 0x38, 0x1c, 0x0e, 0x07, 0x03, 0x00}, { 0x00, 0x00, 0x00, 0x30, 0x30, 0x30, 0x38, 0x1c, 0x0e, 0x07, 0x03, 0x00, 0x00, 0x3c, 0x7e, 0xe7, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xe7, 0xfe, 0xfc}, // 0x3a - двоеточие. {0xe0, 0xf0, 0xf8, 0xf8, 0xf8, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x61, 0x71, 0x3f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} //1 2 3 4 5 6 7 8 9 10 11 12 }; //int i=0; //void piii(); void main(void) { // INTEDG = 1; // raising edge trigger the interrupt GIE = 0; // not Global interrupt enable // INTE = 0; //not enable the external interrupt RA2/INT pin interrupts. TRISA=0b000110; //PORTA=1110; TRISB=0b11110000; //0-output 1-input PORTB=0; LCD_DC=1; LCD_RESET=1; __delay_ms(40); LCD_RESET=0; __delay_ms(40); LCD_RESET=1; out_Spi_LcdCom (0x21) ; // расширенные интсрукции Н=1 out_Spi_LcdCom (0xCF) ; out_Spi_LcdCom (0x06) ; out_Spi_LcdCom (0x14) ; // тёмность (0x10-бледно -0x15темно) out_Spi_LcdCom (0x20) ; // базовые инструкции H=0 out_Spi_LcdCom (0x0C) ; //(0x0C) нормальный режим отображения D=1 E=0 (&h0d- инверсный режим) out_Spi_LcdCom (0x19) ; //спцфич команда lcd trium aria dont touch for (i=0;i<900;i++) { out_Spi_LcdDat (0) ; } //очистка экрана i=0; while (1==1) { a++ ; TMR1H=0;TMR1L=0; T1CON=0b00110111 ;// 11 = 1:8 Prescale value;;; 0 = Oscillator is shut off;;; 1 = Do not synchronize external clock input;;;; //1 = External clock from pin RB6/T1OSO/T1CKI/PGC (on the rising edge);; 1 = Enables Timer1 __delay_ms(10); T1CON=0b00110110 ;// 0 = disable Timer1(lowers bit) freq=(long)TMR1H*256; freq=freq+TMR1L; freq=freq*100*8;//учитываем предделитель 8 if (TMR1H>127) {goto END_freq_measuring ; } TMR1H=0;TMR1L=0; T1CON=0b00100111 ;// 10 = 1:4 Prescale value;;; 0 = Oscillator is shut off;;; 1 = Do not synchronize external clock input;;;; //1 = External clock from pin RB6/T1OSO/T1CKI/PGC (on the rising edge);; 1 = Enables Timer1 __delay_ms(10); T1CON=0b00100110 ;// 0 = disable Timer1(lowers bit) freq=(long)TMR1H*256; freq=freq+TMR1L; freq=freq*100*4;//учитываем предделитель 4 if (TMR1H>127) {goto END_freq_measuring ; } TMR1H=0;TMR1L=0; T1CON=0b00010111 ;// 01 = 1:2 Prescale value;;; 0 = Oscillator is shut off;;; 1 = Do not synchronize external clock input;;;; //1 = External clock from pin RB6/T1OSO/T1CKI/PGC (on the rising edge);; 1 = Enables Timer1 __delay_ms(10); T1CON=0b00010110 ;// 0 = disable Timer1(lowers bit) freq=(long)TMR1H*256; freq=freq+TMR1L; freq=freq*100*2;//учитываем предделитель 2 if (TMR1H>127) {goto END_freq_measuring ; } TMR1H=0;TMR1L=0; T1CON=0b00000111 ;// 00 = 1:1 Prescale value;;; 0 = Oscillator is shut off;;; 1 = Do not synchronize external clock input;;;; //1 = External clock from pin RB6/T1OSO/T1CKI/PGC (on the rising edge);; 1 = Enables Timer1 __delay_ms(10); T1CON=0b00000110 ;// 0 = disable Timer1(lowers bit) freq=(long)TMR1H*256; freq=freq+TMR1L; freq=freq*100;//учитываем предделитель 1 if (TMR1H>127) {goto END_freq_measuring ; } TMR1H=0;TMR1L=0; T1CON=0b00000111 ;// 00 = 1:1 Prescale value;;; 0 = Oscillator is shut off;;; 1 = Do not synchronize external clock input;;;; //1 = External clock from pin RB6/T1OSO/T1CKI/PGC (on the rising edge);; 1 = Enables Timer1 __delay_ms(20); T1CON=0b00000110 ;// 0 = disable Timer1(lowers bit) freq=(long)TMR1H*256; freq=freq+TMR1L; freq=freq*50;//учитываем предделитель 1 if (TMR1H>127) {goto END_freq_measuring ; } TMR1H=0;TMR1L=0; T1CON=0b00000111 ;// 00 = 1:1 Prescale value;;; 0 = Oscillator is shut off;;; 1 = Do not synchronize external clock input;;;; //1 = External clock from pin RB6/T1OSO/T1CKI/PGC (on the rising edge);; 1 = Enables Timer1 __delay_ms(40); T1CON=0b00000110 ;// 0 = disable Timer1(lowers bit) freq=(long)TMR1H*256; freq=freq+TMR1L; freq=freq*25;//учитываем предделитель 1 if (TMR1H>127) {goto END_freq_measuring ; } //freq=12345678; END_freq_measuring: print_longint_12_16 (freq,0); print_longint_12_16 (a,48); print_longint_12_16 (TMR1H,32); //{ // if (a> 15000000) // при 4х Мгц- 50000= 1.3 сек // { //PORTA=0; // // #asm // SLEEP // #endasm // } } } /////- ПРОЦЕДУРЫ======================= //===================== //static void interrupt //isr(void) // Here be interrupt function - the name is unimportant. //{ // if(T0IF) {} // timer interrupt // // if(INTF) {} // input interrupt // // INTF = 0; // clear the interrupt // GIE = 1; // Global interrupt enable // } //static void interrupt //isr(void) // { //обработка прерываний // // if (INTCON.T0IF) { //если TMR0 увеличить перем. прерываний // incTMR0++; // INTCON.T0IF = 0; // } // if (PIR1.TMR1IF) { //если TMR1 увеличить перем прерываний // timerH++; PIR1.TMR1IF = 0; // } // } //=== Send byte to LCD === // cd: 1 - data, 0 - command void out_Spi_LcdCom ( unsigned char data1) // передаём команды { LCD_DC=0; LCD_DATA =data1>>7; LCD_CLK =0; LCD_CLK =0; LCD_CLK =1; LCD_DATA =(data1>>6) &0b1; LCD_CLK =0; LCD_CLK =0; LCD_CLK =1; LCD_DATA =(data1>>5) &0b1; LCD_CLK =0; LCD_CLK =0; LCD_CLK =1; LCD_DATA =(data1>>4) &0b1; LCD_CLK =0; LCD_CLK =0; LCD_CLK =1; LCD_DATA =(data1>>3) &0b1; LCD_CLK =0; LCD_CLK =0; LCD_CLK =1; LCD_DATA =(data1>>2) &0b1; LCD_CLK =0; LCD_CLK =0; LCD_CLK =1; LCD_DATA =(data1>>1) &0b1; LCD_CLK =0; LCD_CLK =0; LCD_CLK =1; LCD_CLK =1; LCD_DATA =(data1>>0) &0b1; LCD_CLK =0; LCD_CLK =0; LCD_CLK =1; LCD_CLK =1; LCD_DC=1; LCD_DATA =0; } void out_Spi_LcdDat ( unsigned char data1) // передаём данные { LCD_DC=1; LCD_DATA =data1>>7; LCD_CLK =0; LCD_CLK =1; LCD_DATA =(data1>>6) &0b1; LCD_CLK =0; LCD_CLK =1; LCD_DATA =(data1>>5) &0b1; LCD_CLK =0; LCD_CLK =1; LCD_DATA =(data1>>4) &0b1; LCD_CLK =0; LCD_CLK =1; LCD_DATA =(data1>>3) &0b1; LCD_CLK =0; LCD_CLK =1; LCD_DATA =(data1>>2) &0b1; LCD_CLK =0; LCD_CLK =1; LCD_DATA =(data1>>1) &0b1; LCD_CLK =0; LCD_CLK =1; LCD_DATA =(data1>>0) &0b1; LCD_CLK =0; LCD_CLK =1; LCD_DC=1; LCD_DATA =0; } void gotoxy(char datax,char datay) { out_Spi_LcdCom (0x00); out_Spi_LcdCom (0x80+datax); //устанавливаем X out_Spi_LcdCom (0x40+(datay >>3)); // устанавливаем номер строки(№BAnk) } // //void print_char(char c) //{ // unsigned char i; // // for ( i = 0; i < 5; i++ ){ // out_Spi_LcdDat (FontLookup[c] [i] ); // } // out_Spi_LcdDat(0x00); // } void print_longint_12_16 (unsigned long int s,char y) { unsigned char x,c9,c8,c7,c6,c5,c4,c3,c2,c1,c0; c9=0;c8=0;c7=0;c6=0;c5=0;c4=0;c3=0;c2=0;c1=0; while (s>=1000000000){s-=1000000000;c9++;} while (s>=100000000){s-=100000000;c8++;} while (s>=10000000){s-=10000000;c7++;} while (s>=1000000){s-=1000000;c6++;} while (s>=100000){s-=100000;c5++;} while (s>=10000){s-=10000;c4++;} while (s>=1000){s-=1000;c3++;} while (s>=100){s-=100;c2++;} while (s>=10){s-=10;c1++;} c0=s; x=0; // char_12_16(c9,x,y); // x=x+12; // char_12_16(c8,x, y); // x=x+12; char_12_16(c7,x, y); x=x+12; char_12_16(c6,x,y);x=x+12; char_12_16(c5,x, y); x=x+12; char_12_16(c4,x, y); x=x+12; char_12_16(c3,x,y); out_Spi_LcdDat(0x00); // пропуск x=x+14; char_12_16(c2,x,y); x=x+12; char_12_16(c1,x,y); x=x+12; char_12_16(c0,x,y); } void char_12_16(char c,char x, char y) //выдача двухстрочного чарсета { unsigned char sj; gotoxy(x,y); for ( sj = 0; sj < 12; sj++ ) { out_Spi_LcdDat(deg12x16[c][sj]); } gotoxy(x,y+8); for ( sj = 12; sj < 24; sj++ ) { out_Spi_LcdDat(deg12x16[c][sj]); } }
_________________ ух ты.... показывает
Вернуться наверх
vovik15
Заголовок сообщения: Re: Програмирование pic на СИ.
Добавлено: Пн фев 07, 2011 08:31:58
Карма: 4
Рейтинг сообщений: 1
Зарегистрирован: Сб ноя 08, 2008 18:32:36Сообщений: 767
Рейтинг сообщения: 0
какой компилятор? какой микроконтроллер? и вообще ссылка на схему есть?
Вернуться наверх
Pavel_1978
Заголовок сообщения: Re: Програмирование pic на СИ.
Добавлено: Пн фев 07, 2011 08:37:41
Опытный кот
Карма: 9
Рейтинг сообщений: 61
Зарегистрирован: Пт ноя 16, 2007 11:21:37Сообщений: 830
Рейтинг сообщения: 0
vovik15 писал(а):
какой компилятор? какой микроконтроллер? и вообще ссылка на схему есть?
Компилятор судя по заголовочным файлам HT-PICC.
А схема бы точно не помешала
Вернуться наверх
12val12
Заголовок сообщения: Re: Програмирование pic на СИ.
Добавлено: Пн фев 07, 2011 10:45:07
Зарегистрирован: Пт янв 29, 2010 19:42:27Сообщений: 315
Рейтинг сообщения: 0
схема ясна #define LCD_RESET RB2 #define LCD_CLK RB3 #define LCD_DATA RB0 #define LCD_DC RB1 вход частотомера RB6/T1OSO/T1CKI/PGC freq -выходное значение частоты (лонг )
_________________ ух ты.... показывает
Вернуться наверх
misterkuk
Заголовок сообщения: Re: Програмирование pic на СИ.
Добавлено: Вт фев 08, 2011 22:42:42
Карма: 3
Рейтинг сообщений: 0
Зарегистрирован: Сб апр 17, 2010 10:30:13Сообщений: 400
Рейтинг сообщения: 0
А где можно почитать как сопрягатся с лсд?
Вернуться наверх
vovik15
Заголовок сообщения: Re: Програмирование pic на СИ.
Добавлено: Вт фев 08, 2011 23:00:29
Карма: 4
Рейтинг сообщений: 1
Зарегистрирован: Сб ноя 08, 2008 18:32:36Сообщений: 767
Рейтинг сообщения: 0
а не рановато ? сразу предупрежу, ТАМ СЛОЖНО без опыта мне кажеться сначалор надо циферки на семисегментник повыводить
Вернуться наверх
Страница 4 из 69
[ Сообщений: 1367 ]
, , , , , , ...
Кто сейчас на форуме
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения