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

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

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

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

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

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

Сообщение oleg110592 »

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

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

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

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

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

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

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

Сообщение 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);
    }
 }
}
СпойлерИзображение
Открыл глаза
Аватара пользователя
Сообщения: 44
Зарегистрирован: Пт июл 19, 2013 10:19:19
Откуда: Владивосток

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

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

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

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

Сообщение dosikus »

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

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

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

Сообщение dosikus »

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

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

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

Сообщение dosikus »

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

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

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

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