Перейти к содержанию
    

PIC16F887

Добрый день, помогите( не могу связаться с пк по usart

 

Соединил без max232, у pic допустимо ведь так для портов?

 

Код вот

 

//#include "16F887.h"
#pragma origin 4
#pragma interruptSaveCheck  w


#define FOSC 8000000L

#define delay_us(x) { unsigned char us; \
                      us = (x)/(12000000/FOSC)|1; \
                      while(--us != 0) continue; }

void delay_ms(unsigned int ms)
{
  unsigned char i;
  do {
    i = 4;
    do {
      delay_us(164);
    } while(--i);
  } while(--ms);
}

void init_usart(void)
{
    TRISC=0x80;        //rx - input, tx - output
    BRGH = 0;        //low 
    SPBRG = 12;        //9600 = 8000000/(64(x+1)) =>x=12
    SYNC = 0;         //asynchronous
    SPEN = 1;         //enable serial port pins
    TXIE = 0;         //disable tx interrupts
    RCIE = 0;        //disable rx interrupts
    TX9  = 0;         //8- or 9-bit transmission
    RX9  = 0;         //8- or 9-bit reception

    TXEN = 1;         //enable the transmitter
    CREN = 0;         //disable the transmitter
}

void putch(unsigned char byte)  /* передача одного байта */
{
/*    while(!TXIF) 
        continue;
*/
    TXREG = byte;
}

void main(void)
{
      OSCCON=0x70;
      TRISD = 0x00;

      for(;;) {
        putch(0x43);
          PORTD = 0x0;
        delay_ms(200000);
        PORTD = 0x1;
        delay_ms(200000);
    }
}

 

Cпасибо

Изменено пользователем Mikron

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Соединил без max232, у pic допустимо ведь так для портов?

Допустимо :) Есть вероятность что порт не умрёт, но с чего вдруг оно должно работать? http://en.wikipedia.org/wiki/RS-232#Voltage_levels сравните с TTL уровнями на ножках МК

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

MAX232 инвертирует TxD и RxD в соответствии со стандартом. ЕМНИП, в регистрах УСАРТа ПИКов нет битов, включающих аппаратную инверсию TxD и RxD.

Вероятно us = (x)/(12000000L/FOSC)|1. (на выходе всё равно будет цена на дрова)

Соотнесите delay_ms(200000) с delay_ms(unsigned int ms).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 Cosmojam, xemul, спасибо

 

А если я отключу от линии передачи. и вообще в коде оставлю только бесконечный цикл и

TXEN = 1;  //разрешение приема
SYNC = 0;  //асинхронный режим
SPEN = 1;  //включение работы приемника/передатчика

 

на линии TX будет "1" ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А если я отключу от линии передачи. и вообще в коде оставлю только бесконечный цикл и

на линии TX будет "1" ?

Да, это пассивное состояние ноги TX контроллера.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...