MicroCHIP.RU
Главная Документация Отладочные средства Справочник Поиск Ссылки
 Новости   Конференция   Контакты 
 

Помогите найти протокол RS232

 Нoвaя темa  |  Наверх  |  Перейти к теме  |  Поиск  |  Правила  |  Вход 

ВНИМАНИЕ!
Вы просматриваете архив форума.

Этот форум работает только в режиме просмотра и поиска.

Действующий форум переведен на новый движок и
находится по адресу www.microchip.su

 Помогите найти протокол RS232
Автор: jeff ()
Дата:   12/07/2001 13:46

Очень нужен протокол RS232 с временными диаграммами и расшифровкой импульсов. Хочу научить pic16f84 общаться с компом. Буду благодарен за любую полезную инфу.


 
 Re: Помогите найти протокол RS232
Автор: Hog ()
Дата:   12/07/2001 15:20

Могу подкинуть готовую пример проги как раз для PIC16F84, но
в HT-PIC C. (Если хочешь). А протокол и вся "песня" про RS232
в большом числе DATASHITOV почти на любые процы (и не только
ф. Microchip), а также в куче литературы (сходи в любую библиотеку: см. книги, журналы. Ну разве, что в газетах про этот
RS232 еще не писали).
__________________
с уважением, Hog


 
 Re: Помогите найти протокол RS232
Автор: Hog ()
Дата:   12/07/2001 17:36

Jeff! Подставляй ведро :) на 2 примерчика
(ссылку или готовые "стихи" про RS232 подкину попозже.

Hog
_____________________________

----- Пример 1 -----

/******************************************/
/* Пpогpамма MONITOR 54/57/84/71 */
/* Шипов Александp Александpович */
/* Май 1997г раб тел (095) 532-22-01 */
/* дом тел (224) 3-22-78 */
/******************************************/


/*Подключаем "ЖЕЛЕЗО" 16C84*/
//Внимание!! При программировании процессора 16с84
// установите опции программатора: OSC - XT, WDT - OFF

#include <pic.h>

/* ножки пpоцессоpа pаботающие на пpием и пpедачу */

static bit TxData @ (unsigned)&PORTA*8+3; /* PORTA.3-передача*/
static bit RxData @ (unsigned)&PORTA*8+2; /* PORTA.2-прием */

/* пpомпт устройства */

#define PROMPT 'M'

/* упpавление для отладки */

#define STOP while(1){;};//останов пpогpаммы


/* частота кваpца */

#define XTAL 4000000

/* скоpость пеpедачи */

#define BRATE 4800 // при кварце 8 Мгц 9600 бод

/* параметры передачи и приема */

#define DLY 3 /* cycles per loop */
#define TX_OHEAD 20 /* overhead cycles per loop */
#define RX_OHEAD 14 /* receiver overhead per loop */

#define DELAY(ohead) (((XTAL/4/BRATE)-(ohead))/DLY)

//ПРОТОКОЛ ОБМЕНА С МОНИТОРОМ
/*

Скоpость обмена: пpи кваpце 4Мгц-4800,8Мгц-9600 бод
Фоpмат посылки от IBM : Команда,Паpаметp команды
ПРИМЕР : B,0 - инициализировать порт B на вывод.
H,5 - вывести в порт В 5

COM PORT IBM настроить на 4800 бод 2 стоп бита без
проверки на четность.

Вpемя pеакции зависит от скоpости пpедачи, готовность к пpиему
следующий команды можно пpовеpить считав пpомpт пpогpамматоpа
или сделать задержку между посылками

Команды упpавления монитором

A-иниц.поpт А
B-иниц.поpт В
C-иниц.поpт С
D-ввод поpт А
E-ввод поpт В
F-ввод поpт С
G-вывод поpт А
H-вывод поpт В
I-вывод поpт С
P- дать пpомpт пpогpамматоpа

*/

// Глобальные пеpеменные

unsigned char Comm; // команда пpогpамматоpа

/*Об'явления функций*/

void putch(unsigned char c);//пеpедать символ по RS232
char getch(void);//пpинять символ по RS232
void Init(void);//пpоизвести инициализацию устpойства

/*Тело пpогpаммы*/

void main()

{

Init();//инициализиpуем монитор


while(1)//цикл пpиема и отpаботки команды
{

Comm = getch();//пpинимаем команду

switch(Comm) //обpабатываем команду

{

case 'A':
TRISA = getch();break;//настpоим поpт А
case 'B':
TRISB = getch();break;//настpоим поpт В
// case 'C':
// для 16с57 TRISC = getch();break;//настpоим поpт С

case 'D':
putch( PORTA);break;//введем из поpта А
case 'E':
putch(PORTB);break;//введем из поpта В
// case 'F':
// для 16с57 putch(PORTC);break;//введем из поpта С
case 'G':
PORTA = getch();break;//выведем в поpт А
case 'H':
PORTB =getch();break;//выведем в поpт В
case 'I':
// для 16с57 PORTC = getch();break;//выведем в поpт С
case 'P':
putch(PROMPT);break; //дадим пpомпт устpойства

default:break;
}

}
}/*main*/

/*************************************************/
/* ПОДПРОГРАММЫ НЕ ДОЛЖНЫ СОДЕРЖАТЬ ВЫЗОВОВ */
/* ДРУГИХ ПОДПРОГРАММ !!! */
/*************************************************/

/******************************/
/*Подпpогpамма пеpедачи байта*/
/******************************/
void putch(char c)
{
/*фоpмат пеpедачи стаpт бит,8 бит данных,2 стоп бита*/
unsigned char dly, bitno;

bitno = 11;

for(bitno = 11 ;; --bitno) {
switch(bitno) {

case 11: /* старт бит */
TxData = 1;
break;

case 10:
case 9: case 8: case 7: case 6:
case 5: case 4: case 3:
if(c & 1)
TxData = 0;
if(!(c & 1))
TxData = 1;
c >>= 1;/*сдвигаем на бит*/
break;

case 2:
TxData = 0;/* стоп бит */
case 1:
break;
case 0:
return;
}
dly = DELAY(TX_OHEAD);
do
;
while(--dly);
}

}
/*putch*/

/******************************/
/*Подпpогpамма пpиема байта */
/******************************/
char
getch(void)
{
unsigned char c, bitno, dly;

for(;;) {
while(!RxData)//Ждем "1"
continue; /* ожидание старт бита*/
dly = DELAY(3)/2;
do
;
while(--dly);
if(!RxData)//Это действительно "1" ?
continue;

bitno = 8;//пpинимаем 8 бит данных
c = 0;
do {
c >>= 1;//сдвигаем на бит
dly = DELAY(RX_OHEAD);
do
;
while(--dly);
if(RxData)
c |= 0x80;
} while(--bitno);

while(RxData)//Ждем "0"
continue; /* ожидание стоп бита*/
dly = DELAY(3)/2;
do
;
while(--dly);
if(RxData)//Это действительно "0" ?
continue;

return ~c;//инвеpтиpуем !!!!
}
}
/*getch*/

/******************************/
/* Подпpогpамма инициализации */
/******************************/
void Init()
{
TRISA = 0xF7; /*ra.3 - на вывод */
TRISB = 255; /*PORTB-на ввод */
}/*Init*/

------- Пример 2 -------
/*
* Serial port driver for 16Cxx chips
* using RTCC.
*/

/*
* Tunable parameters
*/

#include <pic.h>
#include <conio.h>

/* Transmit and Receive port bits */

static bit TxData @ (unsigned)&PORTA*8+3; /* bit3 in port A */
static bit RxData @ (unsigned)&PORTA*8+2; /* bit2 in port A */

/* Xtal frequency */

#define XTAL 4000000

/* Baud rate */

#define BRATE 9600

/* Don't change anything else */

#define DLY 3 /* cycles per loop */
#define TX_OHEAD 20 /* overhead cycles per loop */
#define RX_OHEAD 14 /* receiver overhead per loop */

#define DELAY(ohead) (((XTAL/4/BRATE)-(ohead))/DLY)

void
putch(char c)
{
unsigned char dly, bitno;

bitno = 11;

TRISA = 7;
for(bitno = 11 ;; --bitno) {

switch(bitno) {

case 11: /* start bit */
TxData = 0;
break;

case 10:
case 9: case 8: case 7: case 6:
case 5: case 4: case 3:
if(c & 1)
TxData = 1;
if(!(c & 1))
TxData = 0;
c >>= 1;
break;

case 2:
TxData = 1; /* stop bit */
case 1:
break;
case 0:
return;
}
dly = DELAY(TX_OHEAD);
do
/* nix */ ;
while(--dly);
}
}

char
getch(void)
{
unsigned char c, bitno, dly;

for(;;) {
while(RxData)
continue; /* wait for start bit */
dly = DELAY(3)/2;
do
/* nix */;
while(--dly);
if(RxData)
continue; /* twas just noise */
bitno = 8;
c = 0;
do {
c >>= 1;
dly = DELAY(RX_OHEAD);
do
/* nix */;
while(--dly);
if(RxData)
c |= 0x80;
} while(--bitno);
return c;
}
}


 
 Re: Помогите найти протокол RS232
Автор: Николай ()
Дата:   13/07/2001 08:31

Я сам некоторое время назад мучился вопросами протокола RS232, точнее - его тонкостями типа того "как им битом (старшим или младшим) вперед передается и принимается инф-ция по TxD и RxD" , "сколько стоповых битов (один или два)", и т.п.

Если тебе некритичен выбор чипа, то рекомендую перейти на PIC16F877. Он, конечно, дороже и сложнее, но имеет встроенный USART, полностью совместимый по протоколу с RS232. Естественно (впрочем как и для 84-го) придется ставить преобразователи уровней с 5В в +/-12В и обратно. Ну и я не говорю уже о широчайших возможностях 877-го (FLASH, куча портов, АЦП, ШИМ и т.д. и т.п). У меня с СОМ-портом (и не только с ним) работает прекрасно.
Желаю успехов.


 
 Re: Помогите найти протокол RS232
Автор: jeff ()
Дата:   13/07/2001 08:56

Спасибо за совет. Уровни сингнала компорта и чипа согласую микрухой MAX232. Если есть что полезное по этой теме (глюки, советы, описания на русском PIC16F877 и т.п.), вышли , буду благодарен.
З.Ы. Чем пики шьешь?


 
 Re: Помогите найти протокол RS232
Автор: Николай ()
Дата:   13/07/2001 17:51

ПИК-и шью COMPIC-ом (дешево и сердито).
Обрати внимание, что с COM-порта по всем выводам, кроме RxD и TxD уровни логических единиц и нулей прямые, т.е. "1" - высокий уровень (+12В), а "0" - (-12В).
На RxD и TxD - уровни обратные !!!, т.е. кроме преобразования уровня, нужна еще и инверсия.
Успехов!


 
 у compic1 нет сведений pic16f877 в файле cpic.ini
Автор: jeff ()
Дата:   23/08/2001 11:37

Долго не писал - был в отпуске.
Купил pic16f877. Почитал доку из pdf - Крутой device.
Накарябал тестовый код, но только вот для compic1 нет сведений по этому процу в файле cpic.ini.
Самый ближайший "родственник" IMHO pic16c77, но и о нем нечего нет.
Если не жалко вышли свой ini (или всю прогу) на jeff@avtograd.ru


 
 Re: Помогите найти протокол RS232
Автор: Михаил ()
Дата:   16/11/2002 13:27

Помогите найти протоколы интерфейса RS 232 Михаил


 
 Re: Помогите найти протокол RS232
Автор: jeff ()
Дата:   17/11/2002 16:51

Как же ты так искал, что откопал тему за 2001 год и не нашел хотябы
http://www.microchip.ru/phorum/read.php?f=2&i=8936&t=8915


 
 А hardware control делали?
Автор: Андрей ()
Дата:   18/11/2002 16:13

Здравствуйте!
Извините что затягиваю периодическую тему о RS232, однако хочу спросить делал ли кто-нибудь контроль связи по RTS/CTS проводам? Я там что читал не совсем понял... Когда какого уровня должен быть по линиям? Когда комп хочеть ПИКу говорить, чего устанавливает; и когда ПИК может слышать чего?

Андрей


 
 Re: А hardware control делали?
Автор: KYV ()
Дата:   18/11/2002 16:28

Вот тут посмотри.
http://www.camiresearch.com/Data_Com_Basics/RS232_standard.html


 
 Re: А hardware control делали?
Автор: Андрей ()
Дата:   18/11/2002 16:44

KYV писал(а):
>
> Вот тут посмотри.
> http://www.camiresearch.com/Data_Com_Basics/RS232_standard.html

Спасибо!
Значит, комп дает +(12)В когда хочеть говорить, после МАХ232 это будет 0, и когда ПИК может принимать, он тоже дает 0 -> +12 В, так ?
С уважением,
Андрей


 
 Помогите найти протокол RS232
Автор: Анатолий ()
Дата:   17/12/2002 17:52

Нужны диаграммы работы по всем линиям квитирования и схемы распайки разъемов
под RS232


 
 Re: Помогите найти протокол RS232
Автор: Demon ()
Дата:   14/05/2004 17:37

www.dieb.matthias-scheller.net/rus/stat.php?id=5329595
Hog писал(а):


 
 Re: Помогите найти протокол RS232
Автор: SSH ()
Дата:   15/05/2004 10:01

Если портов ввода-вывода достаточно, то лучше уж применить PIC16F628. И памяти у
него 2К, и USART и другие навороты есть, а стоят у нас даже дешевле 84-ых.

SSH


 
 Re: Помогите найти протокол RS232
Автор: Aaa ()
Дата:   10/06/2004 18:34

http://www.dieb.matthias-scheller.net/rus/?id=5330121


 
 Re: Помогите найти протокол RS232
Автор: XoR ()
Дата:   16/09/2004 16:25

www.rs232.ru


 
 А дату вопроса смотреть бум? (-)
Автор: IceS ()
Дата:   17/09/2004 10:28

-