PIC 16F84. Последовательная передача через порт

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Аватара пользователя
Hispanus
Грызет канифоль
Сообщения: 262
Зарегистрирован: Сб мар 26, 2011 14:17:14
Откуда: Оренбург

PIC 16F84. Последовательная передача через порт

Сообщение Hispanus »

Вообщем задумал я организовать дистанционное управление на оптопаре, но сначала решил всё проверить на компе и как всегда это бывает ничего у меня не получилось))
Код для передатчика:

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

#include <16f84.h>
#use delay(clock=4000000)
#fuses  XT,NOWDT
#byte PORTB = 0x06
#byte TRISB = 0x086
#byte PORTA = 0x05
#byte TRISA = 0x085
#byte INTCON = 0x0B
#byte OPTION_REG = 0x081
#bit T0CS = OPTION_REG.5
#bit PS0 = OPTION_REG.0
#bit PS1 = OPTION_REG.1
#bit PS2 = OPTION_REG.2
#bit GIE = INTCON.7
#bit T0IE = INTCON.5
#bit T0IF = INTCON.2
void main ()
{
PORTA=0;
TRISA=0b1111;
PORTB=0b00000001;
TRISB=0;
   while (1)
   {
      if (PORTA==0b0001)
   {
      PORTA=0;
      PORTB=0b10000001;
T0CS=0;
PS0=1;
PS1=1;
PS2=1;
      T0IE=1;
      GIE=1;
      while (T0IF!=1)
      {
      PORTB=0b00000001;
      }
      T0IF=0;
      while (T0IF!=1)
      {
      PORTB=0b00000001;
      }
      T0IF=0;
      while (T0IF!=1)
      {
      PORTB=0b00000001;
      }
      T0IF=0;
      while (T0IF!=1)
      {
      PORTB=0b10000001;
      }
      T0IF=0;
      T0IE=0;
      GIE=0;
   }
   }
}

Код для приёмника:

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

#include <16f84.h>
#use delay(clock=4000000)
#fuses  XT,NOWDT
#byte PORTB = 0x06
#byte TRISB = 0x086
#byte INTCON = 0x0B
#byte OPTION_REG = 0x081
#bit GIE = INTCON.7
#bit T0IF = INTCON.2
#bit T0IE = INTCON.5
#bit T0CS = OPTION_REG.5
#bit PS0 = OPTION_REG.0
#bit PS1 = OPTION_REG.1
#bit PS2 = OPTION_REG.2
int8 result=0b00000000;
void main()
{
TRISB=0b00000001;
PS0=1;
PS1=1;
PS2=1;
T0CS=0;
PORTB=0;
while(1)
{
if (PORTB==0b00000001)
{
T0IE=1;
GIE=1;
PORTB=0;
while (T0IF!=1)
{
if (PORTB==0b00000000)
result=0;
}
T0IF=0;
while (T0IF!=1)
{
if (PORTB==0b00000000)
result=0;
}
T0IF=0;
while (T0IF!=1)
{
if (PORTB==0b00000000)
result=0;
else
result=result | 0b00000010;
}
T0IF=0;
while (T0IF!=1)
{
if (PORTB==0b00000000)
result=0;
else
result=result | 0b00000001;
}
T0IF=0;
T0IE=0;
GIE=0;
}
if (result==0b00000001)
PORTB=0b10000000;
}
}

Идея в том, что по нажатию кнопки выполняется какое то действие. Для примера я сделал, чтобы загорался светодиод.
Вот только ничего не происходит...
Вот схемка этого чудо устройства

Изображение
Вложения
Схема.JPG
(47.98 КБ) 993 скачивания
У радио нет будущего. Летательные аппараты тяжелее воздуха невозможны. Скоро выяснится, что рентгеновские лучи - мистификация.

[i]Лорд Кельвин, физик, 1899 г.[/i]
Аватара пользователя
kazaff
Родился
Сообщения: 4
Зарегистрирован: Вс мар 27, 2011 09:22:49

Re: PIC 16F84. Последовательная передача через порт

Сообщение kazaff »

чтобы загорался светодиод

для этого надо убрать оба мк и поставить 1 (одну) кнопку
Аватара пользователя
Hispanus
Грызет канифоль
Сообщения: 262
Зарегистрирован: Сб мар 26, 2011 14:17:14
Откуда: Оренбург

Re: PIC 16F84. Последовательная передача через порт

Сообщение Hispanus »

kazaff писал(а):
чтобы загорался светодиод

для этого надо убрать оба мк и поставить 1 (одну) кнопку

C такими идеями тебе прямиком в каменный век))))
У радио нет будущего. Летательные аппараты тяжелее воздуха невозможны. Скоро выяснится, что рентгеновские лучи - мистификация.

[i]Лорд Кельвин, физик, 1899 г.[/i]
Аватара пользователя
kazaff
Родился
Сообщения: 4
Зарегистрирован: Вс мар 27, 2011 09:22:49

Re: PIC 16F84. Последовательная передача через порт

Сообщение kazaff »

Просто лучше чем сложно
Аватара пользователя
Hispanus
Грызет канифоль
Сообщения: 262
Зарегистрирован: Сб мар 26, 2011 14:17:14
Откуда: Оренбург

Re: PIC 16F84. Последовательная передача через порт

Сообщение Hispanus »

Куда уже проще
У радио нет будущего. Летательные аппараты тяжелее воздуха невозможны. Скоро выяснится, что рентгеновские лучи - мистификация.

[i]Лорд Кельвин, физик, 1899 г.[/i]
Аватара пользователя
Hispanus
Грызет канифоль
Сообщения: 262
Зарегистрирован: Сб мар 26, 2011 14:17:14
Откуда: Оренбург

Re: PIC 16F84. Последовательная передача через порт

Сообщение Hispanus »

Немного поломав голову всё заработало)
Передатчик:

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

#include <16f84.h>
#use delay(clock=4000000)
#fuses  XT,NOWDT
#byte PORTB = 0x06
#byte TRISB = 0x086
#byte PORTA = 0x05
#byte TRISA = 0x085
void main ()
{
  PORTA=0;
  TRISA=0b1111;
  PORTB=0b00000001;
  TRISB=0;
  while (1)
   {
     if (PORTA==0b0001)
      {
        PORTA=0;
        PORTB=0b10000001;
        PORTB=0b00000001;
        delay_ms(60);
        PORTB=0b00000001;
        delay_ms(60);
        PORTB=0b00000001;
        delay_ms(60);
        PORTB=0b00000001;
        delay_ms(60);
        PORTB=0b10000001;
        delay_ms(60);
        PORTB=0b00000001;
      }
     if (PORTA==0b0010)
         {
           PORTA=0;
           PORTB=0b10000001;
           PORTB=0b00000001;
           delay_ms(60);
           PORTB=0b00000001;
           delay_ms(60);
           PORTB=0b00000001;
           delay_ms(60);
           PORTB=0b10000001;
           delay_ms(60);
           PORTB=0b00000001;
           delay_ms(60);
           PORTB=0b00000001;
         }
     if (PORTA==0b0011)
         {
           PORTA=0;
           PORTB=0b10000001;
           PORTB=0b00000001;
           delay_ms(60);
           PORTB=0b00000001;
           delay_ms(60);
           PORTB=0b00000001;
           delay_ms(60);
           PORTB=0b10000001;
           delay_ms(60);
           PORTB=0b10000001;
           delay_ms(60);
           PORTB=0b00000001;
         }
    }
}

Приёмник:

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

#include <16f84.h>
#use delay(clock=4000000)
#fuses  XT,NOWDT
#byte PORTB = 0x06
#byte TRISB = 0x086
#byte PORTA = 0x05
#byte TRISA = 0x085
char result=0b00000000;
void main()
{
TRISB=0b00000001;
PORTB=0;
PORTA=0b0001;
TRISA=0;
    while(1)
     {
       if (PORTB==0b00000001)
          {
             PORTB=0;
             result=0b00000000;
             delay_ms(90);
             if (PORTB==0b00000000)
             result=result | 0b00000000;
             else
               {
                 if (PORTB==0b00000001)
                 result=result | 0b00001000;
               }
             delay_ms(60);
             if (PORTB==0b00000000)
             result=result | 0b00000000;
             else
               {
                 if (PORTB==0b00000001)
                 result=result | 0b00000100;
               }
             delay_ms(60);
             if (PORTB==0b00000000)
             result=result | 0b00000000;
             else
               {
                 if (PORTB==0b00000001)
                 result=result | 0b00000010;
               }
             delay_ms(60);
             if (PORTB==0b00000000)
             result=result | 0b00000000;
             else
               {
                 if (PORTB==0b00000001)
                 result=result | 0b00000001;
               }
             if (result==0b00000001)
             PORTB=0b10000000;
             if (result==0b00000010)
             PORTB=0b00000000;
             if (result==0b00000011)
             PORTB=0b00100000;
          }
   }
}
Вложения
Проект протеус.rar
(19.22 КБ) 155 скачиваний
У радио нет будущего. Летательные аппараты тяжелее воздуха невозможны. Скоро выяснится, что рентгеновские лучи - мистификация.

[i]Лорд Кельвин, физик, 1899 г.[/i]
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»