Изучить принципы работы с последовательным интерфейсом стандарта RS232 микроконтроллеров Microchip PICMicro

Страницы работы

Содержание работы

ЛАБОРАТОРНАЯ РАБОТА №6

Цель работы: Изучить принципы работы с последовательным интерфейсом стандарта RS232 микроконтроллеров Microchip PICMicro.

Постановка задачи: Привести описание последовательного интерфейса выбранного типа микроконтроллера. Доработать текстовый пример согласно выбранному варианту задания.

Ход работы:

Разрабатываемое устройство будет распознавать три команды:

·  help                       вывод справочной информации;

·  del x/y                    деление  x и y

·  exit                        завершить работу и выключить устройство.

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

Создадим проект “Lab6” для микроконтроллера PIC18F242 в папке “D:\LAB6”. Введем следующий текст программы:

#include <pic18.h>                 

#include <stdio.h>                

#include <string.h>              

#include <stdlib.h>              

__CONFIG(2, WDTDIS);                

#define          BUF_SIZE   32  

void putch(unsigned char byte);  

unsigned char getch();           

unsigned char getche(void);      

void TranslateCommand();         

char Buffer[BUF_SIZE+1];         

char CurChar, CurPos,i;          

char bExit;                      

void main()                      

{

BRGH = 1;                    

SPBRG       = 25;            

SPEN       = 1;              

TXEN = 1;                   

CREN = 1;                    

printf("\Program started.\n");

CurPos = 0;                 

Buffer[0] = 0;             

bExit       = 0;              

while (bExit==0)             

{                            

CurChar = getche();    

if (CurChar == '\n')    

{

TranslateCommand();

CurPos = 0;       

Buffer[0] = 0;    

}

else                   

{

Buffer[CurPos] = CurChar; 

CurPos ++;                

Buffer[CurPos] = 0;       

if (CurPos == BUF_SIZE)   

{

for (i = 1; i <= BUF_SIZE; i++)

Buffer[i-1] = Buffer[i];

CurPos --;          

}

}

}

printf("Program finished.\n");     

while(1);                          

}

void TranslateCommand()            

{

if (strstr(Buffer,"help"))  

{

printf("Terminal system v1.0\n");

printf("Type \'del x/y\' to calculate the razn.\n");

printf("Type \'exit' to exit from terminal.\n");

}

else                         

if (strstr(Buffer,"exit")) 

{

printf("Exit from program\n");

bExit = 1;             

}

else                        

if (strstr(Buffer,"del "))  

{

unsigned int a1=0,a2=0,del=0;

char * ptr;

ptr = strtok(Buffer, " /");

if (ptr!= NULL)            

{

ptr = strtok(NULL, " /");

if (ptr!= NULL)          

{

a1 = atoi(ptr);     

ptr = strtok(NULL, " /");

if (ptr!= NULL)           

{

a2 = atoi(ptr);       

}

}

}

del = a1 / a2;                

printf("del=%d\n",del);      

}

else                                 

printf("Unknown command:  \'%s'\n", Buffer);

}

void putch(unsigned char byte)              

{

while(!TXIF);                        

TXREG = byte;                        

}

unsigned char getch()                       

{

while(!RCIF);                        

return RCREG;                      

}

unsigned char getche(void)                  

{

unsigned char c;                     

putch(c = getch());                  

return c;                            

}

В симуляторе MPLAB SIM должен быть включен режим эмуляции последовательного порта (рисунок 1) и задана тактовая частота микроконтроллера 4 МГц (рисунок 2).

Рисунок 1 – Режим эмуляции последовательного порта

Рисунок 2 – Установка тактовой частоты микроконтроллера

Файл «input.txt» содержит набор команд, эмулирующих работу пользователя в терминале.

Вот текст файла, имитирующего ввод последовательности команд:

//     Тестовая строка        'Test'

wait 1 sec

"T"

wait 20 ms

"e"

wait 20 ms

"s"

wait 20 ms

"t"

wait 20 ms

" "

wait 20 ms

0a

//     Вывести справку 'help'

wait 1 sec

"h"

wait 20 ms

"e"

wait 20 ms

"l"

wait 20 ms

"p"

wait 20 ms

0a

//     Деление двух чисел равно 'del 81/27'

wait 1 sec

"d"

wait 20 ms

"e"

wait 20 ms

"l"

wait 20 ms

" "

wait 20 ms

"8"

wait 20 ms

"1"

wait 20 ms

"/"

wait 20 ms

"2"

wait 20 ms

"7"

wait 20 ms

0a

//     Завершить работу 'exit'

wait 1 sec

"e"

wait 20 ms

"x"

wait 20 ms

"i"

wait 20 ms

"t"

wait 20 ms

0a

После запуска программы на выполнение в окне эмуляции последовательного порта выводится последовательность вводимых команд с терминала и ответы устройств (рисунок 3).

Рисунок 3 – Окно эмуляции последовательного порта

Похожие материалы

Информация о работе