Jump to content
Lev@

Язык - Си, + Pic Kit2 + Hi-Tech - Нужна Посильная Помощь.

Recommended Posts

Решил начать постигать азы Си.

Прикупил железа Pic Kit2 + 44 pin demo board с 16F887

Проверил работоспособность железа на прогах которые идут в комплекте(мигалки всякие и тд) - работает, но они все на ASM.

Пишу свою на Си вот код:

#include <pic.h>

__CONFIG (0x2007 & 0xEFFF & 0xF7FF & 0xFBFF & 0xFCFF & 0xFFFF & 0xFFFF & 0xFFDF & 0xFFEF & 0xFFF7 & 0xFFFD & 0x2008 & 0xFFFF & 0xFEFF);
//__CONFIG (CONFIG1 & LVP_OFF & FCMEN_OFF & IESO_OFF & BOR_OFF & CPD_OFF & CP_OFF & MCLRE_OFF & PWRTE_ON & WDT_OFF & INTRC_OSC_NOCLKOUT & CONFIG2 & WRT_OFF & BOR21V);

#define knopka RB0 // кнопка
#define diod   RD2 // светодиод

void podgot (void); // подготовка МК
void main (void)
{
podgot();
while(1)
{ // начало бесконечного цикла
diod = knopka;
} // конец бесконечного цикла
}
// === подготовка МК
void podgot (void)
{
TRISB = 0b11111111; // направление работы ножек порта А
TRISD = 0b00000000; // направление работы ножек порта В
PORTD = 0; // очищаем порт А
PORTB = 0; // очищаем порт Б
}

... не работает (((

Ошибка "PK2Error0028: Unable to enter debug mode"

Для начала не могу понять со словом конфигурации в ASM его можно писать символами : CONFIG1 & LVP_OFF и тд, а в Си не понимает такого...

Edited by Lev@

Share this post


Link to post
Share on other sites

Проверил, нормально компилируется в MPLAB X. Слово конфигурации настраивается прямо в проекте, во вкладке Configuration Bits (вкладка в окошке ниже исходника). Выставите там нужные значения, нажмете кнопку генерации кода и MPLAB выдаст нужные строчки в готовом виде. Останется их только скопировать в текст исходника.

И вообще, возьмите компилятор XC8 от Microchip вместо Hi-Tech. По крайней мере отпадет вопрос - что-то не так с кодом или компилятор глючит?

Edited by salyamkamrad

Share this post


Link to post
Share on other sites

Технология Maxim Integrated nanoPower: когда малый IQ имеет преимущества

При разработке устройств с батарейным питанием важно выбирать компоненты не просто с малым потреблением, но и с предельно малым током покоя. При этом следует обратить внимание на линейку nanoPower производства компании Maxim Integrated. В статье рассмотрено их применение на примере системы датчиков беспроводной оконной сигнализации.

Подробнее

Зайди сюда http://catcatcat.d-lan.dp.ua/obuchenie/s-chego-nachat/pervyiy-proekt-dlya-samyih-malenkih/ я там постарался описать один из вариантов как правильно построить программу на Си для ПИК. Тут есть заготовки для некоторых микроконтроллеров http://catcatcat.d-lan.dp.ua/skachat/primeryi-postroeniya-koda-programm-dlya-pic-kontrollerov/zagotovki-dlya-programm-si/

Share this post


Link to post
Share on other sites
И вообще, возьмите компилятор XC8 от Microchip вместо Hi-Tech. По крайней мере отпадет вопрос - что-то не так с кодом или компилятор глючит?
Дороговато! .. счя в стране немного безденежье((( Т.е. - я убираю слово конфигурации из текста, выставляю нужные значения в меню - должно заработать? Edited by Lev@

Share this post


Link to post
Share on other sites
                     

Платы Nucleo на базе STM32G0: чего можно добиться с помощью связки Nucleo и Arduino

Платы Nucleo и платы расширения X-NUCLEO от STMicroelectronics можно интегрировать в платформу Arduino с помощью библиотеки STM32duino. Связка плат Nucleo и платформы Arduino, и наличие готовых библиотек – представляет удобный инструмент для создания прототипов и конечных приложений в условиях ограниченного времени. Статья содержит пошаговые инструкции по установке библиотек и запуску примеров для Nucleo.

Подробнее...

Дороговато! .. счя в стране немного безденежье

Компилятор от хайтек тоже не бесплатный, но вряд ли кто платит за него для ознакомления и обучения. То же самое с XC8.

Я скомпилировал Ваш исходник без изменений, с Вашим же словом конфигурации, ни ошибок, ни предупреждений. MPLAB X 1.80, компилятор HI-TECH PICC 9.83. Видать что-то не учли при создании проекта, возможно неправильно выбрали средство отладки, о чем, собственно, mplab пишет в сообщении об ошибке. Я в качестве отладочного инструмента указывал Proteus.

Share this post


Link to post
Share on other sites

И, раз уж собираетесь опрашивать линии порта B, не забудьте сделать входы на которых висят кнопки цифровыми (страница 47 даташита на F887).

Share this post


Link to post
Share on other sites

Компилятор достался бесплатно(условно), пока месть буду осиливать его - считаю дергаться можно когда уже чего-то можешь. Мануал жаль на английском, буду значит осиливать такой.

...

И, раз уж собираетесь опрашивать линии порта B, не забудьте сделать входы на которых висят кнопки цифровыми (страница 47 даташита на F887).

... спасибо, камень новый для меня буду учить по ходу движения)))

Share this post


Link to post
Share on other sites
Мануал жаль на английском, буду значит осиливать такой.
на шо мануал на англицком? на 887-й? ну так Справочник по среднему семейству микроконтроллеров PICmicro практически даташит на него ну или даташит на 877 практически тоже самое за исключением кол-ва входов АЦП и еще пару тонкостей....

ну а на хайтек мануал не нужен по определению - язык Си в чистом виде Ричи и Керниган вам в помощь....

Share this post


Link to post
Share on other sites

Походу различие есть и еще и наверное будут

Пример для порта В

в 887 есть регистр ANSELH который отвечает за то каким будет вход цифровой или аналоговый

а в 877 такого не нашел

Код моей мигалки теперь такой(кнопка отжата - светимся, нажата - гасим)

#include <pic.h>

__CONFIG(0xEFFF);
#define bt1 RB0 // кнопка
#define led0 RD0 // светодиод

podgot (); // подготовка МК
main ()
{
podgot();
PORTD=1;
while(1)
{ // начало бесконечного цикла
if (bt1==1){
PORTD=0b11111111;
}
PORTD=0b00000000;
} // конец бесконечного цикла
}
// === подготовка МК
podgot ()
{
ANSELH = 0b00000000; //Переключаем на цифровые входы
TRISB = 0b11111111; // направление работы ножек порта
TRISD = 0b00000000; // направление работы ножек порта
PORTD = 0; // очищаем порт
PORTB = 0; // очищаем порт
}

****************************************** ПОЗЖЕ************

Почему кода пишу слово конфигурации

__CONFIG(FOSC_INTRC_NOCLKOUT);

Error [800] C:\Users\ZloyLeva\AppData\Local\Temp\s61o.; 41. undefined symbol "FOSC_INTRC_NOCLKOUT"

********** Build failed! **********

А если объявить в начале

#define FOSC_INTRC_NOCLKOUT  0xFFFC

или

__CONFIG(0xFFFC);

Ведь тама в начале файлик в котором все должно быть описано?

Edited by Lev@

Share this post


Link to post
Share on other sites
Ведь тама в начале файлик в котором все должно быть описано?

в тот файлик нехорошие дяди при портации с хайтека забыли в него названия битов конфигурации записать.... :)

в конец файла pic16f887.h добавить этот код:

// Configuration Mask Definitions
#define CONFIG_ADDR 0x2007
// Oscillator
#define EXTCLK 0x3FFF // External RC Clockout
#define EXTIO 0x3FFE // External RC No Clock
#define INTCLK 0x3FFD // Internal RC Clockout
#define INTIO 0x3FFC // Internal RC No Clock
#define EC 0x3FFB // EC
#define HS 0x3FFA // HS
#define XT 0x3FF9 // XT
#define LP 0x3FF8 // LP
// Watchdog Timer
#define WDTEN 0x3FFF // On
#define WDTDIS 0x3FF7 // Disabled / SWDTEN control
// Power Up Timer
#define PWRTDIS 0x3FFF // Off
#define PWRTEN 0x3FEF // On
// Master Clear Enable
#define MCLREN 0x3FFF // MCLR function is enabled
#define MCLRDIS 0x3FDF // MCLR functions as IO
// Code Protect
#define UNPROTECT 0x3FFF // Code is not protected
#define CP 0x3FBF // Code is protected
// Data EE Read Protect
#define DUNPROTECT 0x3FFF // Do not read protect EEPROM data
#define CPD 0x3F7F // Read protect EEPROM data
// Brown Out Detect
#define BORDIS 0x3CFF // BOD and SBOREN disabled
#define SWBOREN 0x3DFF // SBOREN controls BOR function (Software control)
#define BORXSLP 0x3EFF // BOD enabled in run, disabled in sleep, SBOREN disabled
#define BOREN 0x3FFF // BOD Enabled, SBOREN Disabled
// Internal External Switch Over Mode
#define IESOEN 0x3FFF // Enabled
#define IESODIS 0x3BFF // Disabled
// Monitor Clock Fail-safe
#define FCMEN 0x3FFF // Enabled
#define FCMDIS 0x37FF // Disabled
// Low Voltage Programming
#define LVPDIS 0x2FFF // Disabled
#define LVPEN 0x3FFF // Enabled
// In-Circuit Debugger Mode
#define DEBUGEN 0x1FFF // Enable ICD2 debugging
#define DEBUGDIS 0x3FFF // Disable ICD2 debugging
#define CONFIG_ADDR2 0x2008
// Brown-out Reset Voltage
#define BORV21 0x3EFF // 2.1 Volts
#define BORV40 0x3FFF // 4.0 Volts

Share this post


Link to post
Share on other sites

Про слово конфигурации ничего не скажу, а для тех кто хочет головной боли с hi-tech picc есть старый, но во многом годный еще мануал на русском, из которого есть что почерпнуть http://libbib.org/osobennosti-i-rabochaya-sreda-hi-tech-picc-yalovoj-i/

Share this post


Link to post
Share on other sites

Про слово конфигурации ничего не скажу, а для тех кто хочет головной боли с hi-tech picc есть старый, но во многом годный еще мануал на русском, из которого есть что почерпнуть http://libbib.org/os...picc-yalovoj-i/

А чё, сюда выложить никак ? Залил на какой-то дибильный файлообменник, с которого скачать - целая история, да ещё и ненужную картинку запихнул в архив для веса...

Яловой И_Особенности и рабочая среда HI-TECH PICC.pdf

Share this post


Link to post
Share on other sites

Залил на какой-то дибильный файлообменник, с которого скачать - целая история, да ещё и ненужную картинку запихнул в архив для веса...

Это первая ссылка на сайт с мануалом из выдачи Яндекса, поэтому все претензии, пожалуйста, к Яндексу. Кому заняться нечем, тот пусть обсуждением файлообменников занимается, а у меня с ними разбираться нет ни времени, ни желания. Я свое дело сделал, на мануал топикстартеру указал, остальное не мое дело.

Share this post


Link to post
Share on other sites

Пасиб ребята за помощь!

по конфигу:

В шапке проги указан

#include <htc.h>

Захожу в него, тама в начале есть такое:

#ifndef _PIC_H_
#define _PIC_H_

#ifndef _HTC_H_
#include <htc.h>
#endif

#ifdef _HAS_OSCVAL_
extern unsigned char __osccal_val(void);
#endif

#include <chip_select.h>
#endif

На сколько я понимаю этот кусок добавляет нам еще часть <htc.h> и <chip_select.h>, захожу в <chip_select.h>:

/*
* Select device-specific header file
*/
#ifndef _CHIP_SELECT_H_
#define _CHIP_SELECT_H_
.....
.....
.....
#ifdef _16F887
#ifdef _LEGACY_HEADERS
#include <legacy/pic16f887.h>
#else
#include <pic16f887.h>
#endif
#endif
.......
.......

и в <pic16f887.h> есть все....

что не так?

*************************************************************************

Кажется понял:

HI-TECH C PRO for the PIC10/12/16 MCU family (Lite)  V9.60PL5
Copyright (C) 1984-2009 HI-TECH SOFTWARE
(1273) Omniscient Code Generation not available in Lite mode (warning)
Error   [800] C:\Users\ZloyLeva\AppData\Local\Temp\s5jc.; 41. undefined symbol "WDTE_OFF"
Error   [800] C:\Users\ZloyLeva\AppData\Local\Temp\s5jc.; 41. undefined symbol "FOSC_INTRC_NOCLKOUT"

********** Build failed! **********

(1273) Omniscient Code Generation not available in Lite mode (warning) - Типа в лайт версии это не работает?

Edited by Lev@

Share this post


Link to post
Share on other sites
]HI-TECH C PRO for the PIC10/12/16 MCU family (Lite) V9.60PL5

это плохо.... ищите стандарт версию последняя окончилась HI-TECH std V9.60PL3

он вам предупреждение сделал что оптимизация кода не работает.... к битам конфигурации это не имеет отношения....

1.в хедере описание битов конфигурации есть?

2.в проекте указан нужный МК?

3. http://www.microchip.su/showthread.php?p=45278&highlight=pic16f887+config#post45278

Share this post


Link to post
Share on other sites

Вот скрин проэкта

Чтобы не забывать буду писать все свои шаги... может кому-то еще пригодится.

организация функции задержки

во включенном файле pic.h есть такое:

/****************************************************************/
/* Built-in delay routine	 */
/****************************************************************/
#pragma inline(_delay)
extern void _delay(unsigned long);
// NOTE: To use the macros below, YOU must have previously defined _XTAL_FREQ
#define __delay_us(x) _delay((unsigned long)((x)*(_XTAL_FREQ/4000000.0)))
#define __delay_ms(x) _delay((unsigned long)((x)*(_XTAL_FREQ/4000.0)))
#endif

В заголовок добавить нужно еще значение тактовой частоты:

#define _XTAL_FREQ 4000000

в коде проги:

__delay_us(500);

... вопрос к знающим:

что означает двойное подчеркивание и одинарное перед словом(переменной)?

post-57910-0-77767600-1397332659_thumb.png

Edited by Lev@

Share this post


Link to post
Share on other sites

Продолжаю мучать Си и железо.

Прога для измерения температуры. Отображение с помощью светодиодной шкалы... датчик 18b20+pic16f887+8LED

#include <stdio.h>
#include <pic.h>
#include "usart.h"
#define STATE TRISA1
#define PIN RA1
#define _XTAL_FREQ 4000000
char temperature;
unsigned char temp_drob;
unsigned char sign;

// ОБЪЯВЛЕНИЕ ФУНКЦИЙ
void get_temp(); // 1.ЗАМЕР ТЕМПЕРАТУРЫ
void TX(unsigned char cmd); // 2.ПЕРЕДАЧА настроек датчику
unsigned char RX(); // 3.ПОЛУЧЕНИЕ данных температуры
static bit INIT(void); // 4.Инициализация датчика
// *****ОСНОВНАЯ ПРОГРАММА*****
void main(void){
unsigned char i;
ANSEL=0;
INTCON=0; // purpose of disabling the interrupts.
TRISD=0b00000000;

while(1)
{
get_temp();
if (temperature>0) i=0;
if (temperature>10) i=1;
if (temperature>20) i=2;
if (temperature>30) i=3;
if (temperature>40) i=4;
if (temperature>50) i=5;
if (temperature>60) i=6;
if (temperature>70) i=7;
switch (i)
{
case 0: PORTD=0b00000001;break;
case 1: PORTD=0b00000011;break;
case 2: PORTD=0b00000111;break;
case 3: PORTD=0b00001111;break;
case 4: PORTD=0b00011111;break;
case 5: PORTD=0b00111111;break;
case 6: PORTD=0b01111111;break;
case 7: PORTD=0b11111111;break;
default: ;
}
__delay_ms(150);
}
}
// ТУТА БУДУТ ФУНКЦИИ
void get_temp(void) { // 1.ЗАМЕР ТЕМПЕРАТУРЫ
static bit init;
unsigned char temp1;
unsigned char temp2;
init = INIT();
if (!init) { //успешно инициализировались?
TX(0xCC);
TX(0x44);
__delay_ms(150); //ждем 750 мс
__delay_ms(150);
__delay_ms(150);
__delay_ms(150);
__delay_ms(150);
}
init = INIT(); //повторная инициализация

if (!init) {
TX(0xCC);
TX(0xBE); //команда на чтение
temp1 = RX(); //читаем младший байт
temp2 = RX(); //читаем старший байт
}

temp_drob = temp1 & 0b00001111; //Записываем дробную часть в отдельную переменную
temp_drob = ((temp_drob*6)+2)/10; //Переводим в нужное дробное число
temp1 >>= 4;
sign = temp2 & 0x80; //определяем знак температуры
temp2 <<= 4;
temp2 &= 0b01110000;
temp2 |= temp1; //помещаем все в одну переменную

if (sign) { //если минус
temperature = 127-temp2; //глобальная переменная
temp_drob = 10 - temp_drob; //глобальная переменная
} else temperature = temp2;
}

void TX(unsigned char cmd){// 2.ПЕРЕДАЧА настроек датчику

unsigned char temp = 0;
unsigned char i = 0;
temp = cmd;
for (i=0;i<8;i++)
{
if (temp&0x01) {
STATE = 0; //передаем 1
__delay_us(5);
STATE = 1;
__delay_us(70);
}
else { //передаем 0
STATE = 0;
__delay_us(70);
STATE = 1;
__delay_us(5);
}
temp >>= 1;
}
}

unsigned char RX() { // 3.ПОЛУЧЕНИЕ данных температуры

unsigned char d = 0;
unsigned char i = 0;
for (i=0;i<8;i++)
{
STATE = 0; //прижимаем линию
__delay_us(6);
STATE = 1;
d>>=1; //освобождаем место под новый бит
if (PIN == 1) d |= 0x80; //если 1 то записываем 1
__delay_us(70); //ждем до положенного времени
}
return d;
}

static bit INIT(void){ // 4.Инициализация датчика
static bit b;
STATE = 1;
STATE = 0; //Проваливаем линию
__delay_us(500); //Ждем 500 мкс
STATE = 1; //Переключаемся на вход
__delay_us(65); //Ждем 65 мкс
b = PIN; //Смотрим чего там на линии
__delay_us(450); //Дожидаемся до положенного временного интервала
return b; //Возвращаем 0 или 1
}

завтра буду оптимизировать код(большая часть кода - sarge и стандартные библиотеки) и делать в железе(в Протеусе - работает)

еще распишу работу с датчиком - то что я понял... )))

Line term.zip

Edited by Lev@

Share this post


Link to post
Share on other sites

С датчиком температуры разобрался - и в железе работает.

Теперь хочу выводить все на ЖК 16*2

Пишу пробный код:

#include <stdio.h>
#include <pic.h>
#include <htc.h>

#define _XTAL_FREQ 4000000
#define LCD_RS RA3
#define LCD_RW RA2
#define LCD_EN RA1
#define LCD_DATA PORTD //
void lcd_init();
void pic_init();
void lcd_out();
void
main(void)
{
pic_init();
lcd_init();
lcd_out();
for(;;
}
/* ИНИЦИАЛИЗАЦИЯ PIC */
void pic_init()
{
ADCON1 = 0x06; // Disable analog pins on PORTA
TRISA=0;
TRISB=0;
TRISD=0;
PORTA=0b11111111;
PORTB=0;
PORTD=0;
}

/* ИНИЦИАЛИЗАЦИЯ LCD - 8 bit mode */
void lcd_init()
{
PORTA=0;
__delay_ms(150); // Ждем больше 1 сек
__delay_ms(150);
__delay_ms(150);
__delay_ms(150);
__delay_ms(150);
__delay_ms(150);
__delay_ms(150);
LCD_RS = 0;
LCD_EN = 0;
LCD_RW = 0;
LCD_DATA = 0b00110000;
__delay_ms(4);
LCD_RS = 0;
LCD_EN = 0;
LCD_RW = 0;
LCD_DATA = 0b00110000;
__delay_us(100);
LCD_RS = 0;
LCD_EN = 0;
LCD_RW = 0;
LCD_DATA = 0b00110000;
__delay_us(40);

LCD_RS = 0;
LCD_EN = 0;
LCD_RW = 0;
LCD_DATA = 0b00111111; // 0 0 1 DL N F * *
__delay_us(40);
LCD_RS = 0;
LCD_EN = 0;
LCD_RW = 0;
LCD_DATA = 0b00001111; // 0 0 0 0 1 D C B
__delay_us(40);
LCD_DATA = 0b00000001; // Очистка дисплея
LCD_RS = 0;
LCD_EN = 0;
LCD_RW = 0;
LCD_DATA = 0b00000110; // 0 0 0 0 0 1 I/D S
__delay_us(40);
RB0 = 1;
}
void lcd_out()
{
LCD_RS = 0;
LCD_EN = 1;
LCD_DATA = 0x00;
__delay_us(50);
LCD_RS = 0;
LCD_EN = 0;
__delay_us(100);
__delay_us(155);
LCD_RS = 0;
LCD_EN = 1;
LCD_DATA = 0x33;
__delay_us(50);
LCD_RS = 0;
LCD_EN = 0;
}

Моделирую в протеусе - полная тишина. Походу даже инициализация не прошла...

post-57910-0-81287800-1398634288_thumb.png

Edited by Lev@

Share this post


Link to post
Share on other sites

Алекс, нужна помощь - я еще не сильно понимаю Си по этому помоги с вот этим куском кода. Ничего не понял

sprintf(lcd_buff, "Hello !!!");
lcd_gotoxy(0,0);
lcd_puts(lcd_buff);

..............................


/*******************************************************/
void lcd_puts(char * s){
while(*s) lcd_putch(*s++);
}
/*******************************************************/
void lcd_putch(char c){
RS_PIN = 1;
lcd_write(chr_to_cyr(c));
}
/*******************************************************/

Edited by Lev@

Share this post


Link to post
Share on other sites

А что конкретно не понятно ?

lcd_putch - вывод символа.

lcd_puts - вывод строки.

Share this post


Link to post
Share on other sites

Чето я совсем потеряшку поймал

Вот файлик :

#include <stdio.h>
#include <pic.h>
#include <htc.h>
#include "io_pins.c"
#include "function_lcd.h"
#define _XTAL_FREQ 4000000

// ПРОТОТИПЫ ФУНКЦИЙ
extern void pic_init(void);
extern void Lcd_Strobe(void);
extern void lcd_init(void);
extern void SET_DATA(char);
extern void lcd_write(char);
extern void lcd_clear(void);
void main(void)
{
pic_init();
lcd_init();
__delay_us(10);
while(1)
{
;
}
}

это файлик с функциями function_lcd.h :

#define _XTAL_FREQ 4000000
void pic_init()
{
ADCON1 = 0x06; // Disable analog pins on PORTA
TRIS_EN = 0;
TRIS_RS = 0;
TRISD = 0;
}
void Lcd_Strobe(void)
{
LCD_EN=1;
__delay_us(1);
LCD_EN=0;
}
void SET_DATA(char d) //SET
{
PORTD = d;
}
void lcd_write(unsigned char c) // WRITE
{
SET_DATA(c);			 //
__delay_us(2);
Lcd_Strobe();
__delay_us(40);
}
void lcd_clear(void){ //CLEARNING
LCD_RS = 0;
lcd_write(0x01);
__delay_ms(2);
}
void lcd_init(){
LCD_RS = 0;
LCD_EN = 0;
__delay_ms(150); // wait 15mSec after power applied,
SET_DATA(0x30);
Lcd_Strobe();
__delay_ms(5);
SET_DATA(0x30);
Lcd_Strobe();
__delay_us(100);
SET_DATA(0x30);
Lcd_Strobe();
__delay_us(200);
SET_DATA(CMD_SETFUNCTION);
Lcd_Strobe();
__delay_us(200);
lcd_write(CMD_SETFUNCTION); // Set interface length
lcd_write(CMD_SETDISPLAY); // Display On, Cursor off, Cursor Blink off
lcd_clear();
__delay_us(10);
lcd_write(CMD_SETMODE); // Set entry Mode
}

Файлик с описаниями/присвоениями io_pins.c

#define LCD_RS RA3
#define LCD_EN RA2
#define TRIS_EN TRISA2
#define TRIS_RS TRISA3
#define D0_PIN RD0
#define D1_PIN RD1
#define D2_PIN RD2
#define D3_PIN RD3
#define D4_PIN RD4
#define D5_PIN RD5
#define D6_PIN RD6
#define D7_PIN RD7

#define CMD_SETFUNCTION 0b00111000
//	 |||||- *
//	 ||||-- *
//						 |||--- F: 1-5x10 dots, 0-5x8 dots
//						 ||---- N: 1-2 lines, 0-1 lines
//						 |----- DL:1-8 bits, 0-4 bits
#define CMD_SETDISPLAY 0b00001111
//							 |||- B: 1-on, 0-off blinks
//							 ||-- C: 1-on, 0-off cursor
//							 |--- D: 1-on, 0-off display
#define CMD_SETMODE	 0b00000110
//							 ||- S : 1-shift, 0-not shift
//							 |-- ID: 1-Inc, 0-Dec
#define CMD_SHIFT	 0b00010000
// ||||- *
// |||-- *
// ||--- RL: 1-shift right, 0-shift left
// |---- SC: 1-display shift, 0-cursor move

Курсор стоит на второй ячейке и мигает)))

теперь я могу сразу вводить данные, но можно сначала курсор поставить в нужное место... ?!

post-57910-0-86537500-1398798029_thumb.png

Edited by Lev@

Share this post


Link to post
Share on other sites

...ля нашел ошибку - еще плохо знаю камень(точнее совсем не знаю - дата от 877 не подходит )

// ADCON1 = 0x06; // Disable analog pins on PORTA
PORTA = 0;
ANSEL = 0;

не правильно инициализировал порт А

Share this post


Link to post
Share on other sites

Ну и по старой традиции в "железе" ничего не работает(((

вот такой у мну экран raystar rc1602b

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...