ЛАБОРАТОРНАЯ РАБОТА №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 – Окно эмуляции последовательного порта
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.