Софтовый СОМ порт для PIC16F84

Поклонники продукции Microchip Technology Inc тусуются тут.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Софтовый СОМ порт для PIC16F84

Сообщение Аlex »

По поводу чтения порта и сброса RBIF. Код работает лишь потому, что после чтения порта и прохода по всему коду, он сразу-же заного заходит в обработчик и попадает на RBIF=0; Но это, естественно, не правильно. Как уже сказал Марк, нужно делать наоборот.
Да и вообще, очень много лишнего в обработчике, всё как-то запутано... Можно половину поубирать, добавив ещё одну проверку (RBIE) в пару с RBIF.
Аватара пользователя
Dima Lerich
Открыл глаза
Сообщения: 44
Зарегистрирован: Пт июл 19, 2013 10:19:19
Откуда: Владивосток

Re: Софтовый СОМ порт для PIC16F84

Сообщение Dima Lerich »

Как-то не считается. Что сделано мною в 10 лет, можете улучшать в свои 50. И Марк и кто хочет, может проявить себя на полную, дорабатывая ЧУЖОЕ. Это кстати вполне естественно, потому как СВОЕ сделать не получается. Ничего особенного, все нормально. Просто мне эта тема уже не интересна, что нужно было сделать, то и сделал в свое время. У меня много всяких таких вот решений, но они рождаются тогда, когда надо. И работают тогда, когда другие только МОГУТ улучшить, но вот проблема, не знают ЧТО именно надо улучшать. Я не спорю, естественно можно улучшать что угодно, в зависимости от задач. Но Вы же не знаете, для каких задач был написан код, значит не можете правильно и оценить сегодня, полтора десятилетия спустя. А я вот так думаю, что лучше делать (читай СОЗДАВАТЬ), чем бесплодно критиковать (НЕ КОНСТРУКТИВНО).
Если Вам это не интересно, можете не улучшать, мне от этого не жарко и не холодно, просто никак. А вот тем, кому надо, снимут код и будут им пользоваться, потому что код рабочий и окажется полезен для конкретной задачи. И им не важно, можно ли его еще улучшить или нет. Так уж человек устроен. А код обсуждать - это как хотите. Вам по-любому поздно, код давно свое дело сделал. Это жесткий факт.
Иногда получается спаять пару проводов...
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Софтовый СОМ порт для PIC16F84

Сообщение oleg110592 »

Выложите код для хайтека - не хочется засорять свой ПК микроси. Под какую версию Хайтеч разрабатывалось? Еще более поражен - у меня чтоб хоть что-то начало получаться на си ушло около года. Со скольких лет вы начали изучать си? ПК в 98 были достаточно дороги, у вас был, я так понимаю дома был ПК, я в то время только мог пользоваться на работе, дома был zx spectrum.
Аватара пользователя
Dima Lerich
Открыл глаза
Сообщения: 44
Зарегистрирован: Пт июл 19, 2013 10:19:19
Откуда: Владивосток

Re: Софтовый СОМ порт для PIC16F84

Сообщение Dima Lerich »

Давайте я отправлю Вам код в личку. Ну если интересно, могу дать некоторые пояснения.
Дело в том, что с тех пор прошло много лет, мой хайтек не работает корректно, не знаю почему и некогда с ним разбираться. Тем более что я перешел полностью на МикроСи. Там сервис лучше, хотя код пишет чуть менее компактно. Не знаю, точен ли код, прошло столько лет(!). А проверить сейчас не могу, настраивать старый софт - дело такое... Тем более под досом. Но код на хайтеке получается на десяток байт короче. Ну может это и важно.
Насчет ПК- тогда у нас дома было три (!) писишника, при этом один ноутбук. Ну естественно я играл, но кроме того, была документация по ПС и МК на русском, и мне казалось что я программирую... Ну почти как на большом ПК, работая с программатором. Вообще тогда была брошюрка кажется от ДОДЕКИ по ПИКам, в которой было все четко расписано и показано. Зато опыт, приобретенный на пиках, существенно помог в дальнейшем. Есть интересная мысль в одной старой книжке: ПРОЕКТИРОВАНИЕ ЦИФРОВЫХ УСТРОЙСТВ НА ОДНОКРИСТАЛЬНЫХ МИКРОКОНТРОЛЛЕРАХ (В.В.Сташин), изложенная на стр. 17, о программирующем профессионале. Когда я недавно ее увидел, многое прояснилось. Навыки программирования позволяют мне легко обходиться без программистов, оставаясь специалистом в своей области. Советую почитать.
Иногда получается спаять пару проводов...
Аватара пользователя
Dima Lerich
Открыл глаза
Сообщения: 44
Зарегистрирован: Пт июл 19, 2013 10:19:19
Откуда: Владивосток

Re: Софтовый СОМ порт для PIC16F84

Сообщение Dima Lerich »

Код отправил. Смотрите, должен работать под хайтек. Кстати на микроси работать легче, и если Вы не решили себя посвятить ДОСу, то смело можно переходить даже на микро си про. Ведь главное конечно что писать, а не на чем. Но на некотором софте просто удобнее.
Иногда получается спаять пару проводов...
Аватара пользователя
Dima Lerich
Открыл глаза
Сообщения: 44
Зарегистрирован: Пт июл 19, 2013 10:19:19
Откуда: Владивосток

Re: Софтовый СОМ порт для PIC16F84

Сообщение Dima Lerich »

Кстати еще одна деталь. Отмечу сразу, что со мной занимались, а ребенок я был один в семье, поэтому любые прихоти исполнялись. Программированием со мной занимался отдельно механик, математик по призванию, программист по природе. Сейчас ему уже под 60, но очень толковый кадр. Он и научил всему этому реместу. Кстати, тогда еще были БК-ашки в ходу, а ПК были редкостью, но зато с железом работало больше народу и делало массу интересных вещей. Сейчас как-то больше с софтом работают, а раньше с "потрохами обшались".
Иногда получается спаять пару проводов...
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Софтовый СОМ порт для PIC16F84

Сообщение oleg110592 »

спасибо - проверил на xc8 + proteus удивительно, но работает
немного переделал:
Спойлер

Код: Выделить всё

#include        <pic.h>
#include        <sys.h>
#define PORTBIT(adr, bit)   ((unsigned)(&adr)*8+(bit))

//      Driver for COM_PORT_PIC16F84A
//    CopyRight (C) Dima Lerich, Vladivostok

#define sDelayTimer  169  //  9,618 Hz for 4 MHz
#define sTimer2      210  //  15000 Hz for 4 MHz

// PORT A
static bit  TxData     @  PORTBIT(PORTA, 1);
// PORT B
static bit  RxData     @  PORTBIT(PORTB, 7);

// RAM DATA
static bit  TxEnabled=0, RxEnabled=0, fDone=0;
static bit  RxBit, RxBitOld;
unsigned char TxByte, RxByte;
char numRxBit, numTxBit;
char PortB,tmp;

void interrupt timer(void)
{
  GIE = 0;
  if(T0IF)
  {
    TMR0 = sDelayTimer;
    T0IF = 0;
    if(TxEnabled)
    {
       if(numTxBit==0)
       {
          numTxBit=1;
          TxData = 0;
       }
       else if(numTxBit>8)
       {
          TxData = 1;
          numTxBit=0;
          TxEnabled=0;
       }
       else
       {
          if(TxByte&1)
             TxData = 1;
          else
             TxData = 0;
          TxByte >>= 1;
          numTxBit++;
       }
    }
    if(RxEnabled)
    {
       if(numRxBit>8)
       {
          RxEnabled=0;
          PortB=PORTB;
          RBIF=0;
          fDone=1;
       }
       else if(numRxBit<8)
       {
          RxByte>>=1;
          if(RxData==1) RxByte+=128;
       }
       numRxBit++;
    }
  }
  if(RBIF)
  {
    RBIF=0;
    PortB=PORTB;
    if(RxData==1)
       RxBit=1;
    else
       RxBit=0;
    if(!RxEnabled && numRxBit==0)
    {
      if(!RxBit && RxBitOld)
      {
        fDone=0;
        RxByte=0;
        numRxBit=0;
        RxEnabled=1;
        RBIE=0;
        T0IF = 0;
        TMR0 = sTimer2;
      }
    }
    RxBitOld=RxBit;
  }
  if(!TxEnabled)
  {
     TxData = 1;
  }
  GIE = 1;
}

InitPic()
{
  OPTION_REG = 0;
  fDone=0;
  TxData = 1;
  numTxBit=0;
  numRxBit=0;
  RxEnabled=0;
  TMR0 = sDelayTimer;
  numRxBit=0;
  TxEnabled=0;
  RxEnabled=0;
  T0SE=1;
  T0CS=0;
  PSA=1;
  RBIE=0;
  TRISB = 192;
  TRISA = 1;
  T0IE = 1;
  GIE = 1;
}

void InitRx()
{
  RxByte=0;
  fDone=0;
  numRxBit=0;
  RxEnabled=0;
  PortB=PORTB;
  RBIE=1;
}

void SendRs(unsigned char x)
{
   while(TxEnabled);
   numTxBit=0;
   TxByte=x;
   TxEnabled=1;
}

char Command()
{
  if(!fDone) return 0;
    RBIE=0;
     switch (RxByte)
   {
   case 0:  break;
   }
    tmp=RxByte;
   InitRx();
  return 1;
}

main(void)
{
InitPic();
InitRx ();
  while(1) {
    if( Command()==1)
    {
        SendRs('O');
        SendRs('K');
        SendRs(tmp);
    }
 }
}

СпойлерИзображение
Аватара пользователя
Dima Lerich
Открыл глаза
Сообщения: 44
Зарегистрирован: Пт июл 19, 2013 10:19:19
Откуда: Владивосток

Re: Софтовый СОМ порт для PIC16F84

Сообщение Dima Lerich »

Ну а что тут удивительного? Код рабочий, все нормально, как и должно быть. В памяти код должен занимать около 200 байт, все работает устойчиво, можно ставить дополнительно рутины для обработки данных. У меня было нечто типа микроосцилографа. Потом уже перешел на 628 процы. Время прошло, но логика то не ржавеет.
Иногда получается спаять пару проводов...
Аватара пользователя
Dima Lerich
Открыл глаза
Сообщения: 44
Зарегистрирован: Пт июл 19, 2013 10:19:19
Откуда: Владивосток

Re: Софтовый СОМ порт для PIC16F84

Сообщение Dima Lerich »

Мне больше нравится все смотреть "живьем" на реально ощущаемом железе. Хотя понятно, софтовые заменители рулят, бесспорно. А если не секрет, для чего СОМ порт хотите применить?
Иногда получается спаять пару проводов...
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: Софтовый СОМ порт для PIC16F84

Сообщение dosikus »

Dima Lerich писал(а): а ребенок я был один в семье,


Вот это слабо повторить?
Вложения
RS232_16f84_19200.rar
(10.92 КБ) 161 скачивание
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Софтовый СОМ порт для PIC16F84

Сообщение Аlex »

А как потестить это, что нужно в терминалку ввести ? Или просто строка выводится ?
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: Софтовый СОМ порт для PIC16F84

Сообщение dosikus »

Аlex писал(а):А как потестить это, что нужно в терминалку ввести ? Или просто строка выводится ?

Вводи что хочешь , там тупой перевывод символов.
Сразу говорю эта хрень такая же как у супер_киндера - никакого практического применения .
Так поиграться.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Софтовый СОМ порт для PIC16F84

Сообщение Аlex »

dosikus писал(а):Вводи что хочешь , там тупой перевывод символов. .
Ну это он сейчас тебе на МикроС за 5 минут сделает. Там есть какие-то подобные недобиблиотеки. :))
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: Софтовый СОМ порт для PIC16F84

Сообщение dosikus »

Аlex писал(а):Ну это он сейчас тебе на МикроС за 5 минут сделает. Там есть какие-то подобные недобиблиотеки. :))

Кто ж спорит . :)))
Вот только в моем примере не миКрос и либа не встроенная .
Ну конечно можно и что нибудь осмысленное сварганить, только не вижу смысла.
Камень г. мамонта ...
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Софтовый СОМ порт для PIC16F84

Сообщение Аlex »

Ну это он сейчас тебе на МикроС за 5 минут сделает
И будет это обычная безделушка, в которую ничего больше толкового не добавишь, т.к. программа будет тупо зациклена в ожидании импульса на RX. Такие уж вот недобиблиотеки в МикроС.
Ответить

Вернуться в «PIC»