Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лекции / ТСАиУ.doc
Скачиваний:
62
Добавлен:
22.02.2014
Размер:
1.28 Mб
Скачать

Текст программы управления обменом информацией для контроллера через универсальный асинхронный приёмопередатчик – uart.

Эта программа может быть написана на языке С или ассемблере и должна обеспечивать выполнение всех действий контроллера, перечисленных в начале главы. Но мы не будем здесь рассматривать все тонкости процесса управления объектом, а обратим внимание на взаимодействие управляющего компьютера и контроллера в этом процессе. Последовательность операций должна быть следующей. После включения питания и начальной установки отдельных регистров, контроллер переходит в режим ожидания команды компьютера о начале работы. Приняв информацию, он сохраняет её в оперативной памяти для последующей обработки, которая здесь не рассматривается и пересылает полученную информацию в регистр данных порта В для наблюдения за процессом. Затем в оперативную память заносится информация, которую надо передать управляющему компьютеру и осуществляется процесс передачи.

Ниже следует откомментированный фрагмент текста программы.

/*********************************************

Project :

Version :

Date : 14.04.2007

Author : TAA

Company : АиУ

Comments: Приём информации через UART по флагу RXC в

регистре состояния USR (Status Register) и передача информации

через UART

Chip type : AT90S2313

Clock frequency : 7,372800 MHz

Memory model : Tiny

Internal SRAM size : 128

External SRAM size : 0

Data Stack size : 32

*********************************************/

#include <90s2313.h>

// External Interrupt 0 service routine

interrupt [EXT_INT0] void ext_int0_isr(void)

{

// Place your code here

}

// External Interrupt 1 service routine

interrupt [EXT_INT1] void ext_int1_isr(void)

{

// Place your code here

}

// Standard Input/Output functions

#include <stdio.h>

// Declare your global variables here

char oj @0x0f; //Глобальная переменная, используемая для

//хранения принятой информации размещена в регистре r15 (0x0f)

char b=0x1a; //инициализация переменной для наблюдения за её

//изменением при выполнении программы

char *p=&oj; //Объявление инициализированного указателя на

// объект типа char

void main(void)

{

// Declare your local variables here

// Input/Output Ports initialization

// Port B

PORTB=0x00;

DDRB=0x0F;

// Port D

PORTD=0x00;

DDRD=0x42;

//…….

// Пропущены операции инициализации неиспользуемых устройств

// UART initialization

// Communication Parameters: 8 Data, 1 Stop, No Parity – 8 бит данных,

// 1 стоп-бит, нет проверки на чётность

// UART Receiver: On. Приёмник включен

// UART Transmitter: On Передатчик включен

// UART Baud rate: 9600 Скорость передачи 9600 Бод

UCR=0x18;

UBRR=0x2F;

// Global enable interrupts

#asm("sei")

while (1)

{

// Place your code here

oj=0xab; //имитация принятого сообщения

#asm //Начало текста на ассемблере

r: sbis USR,RXC ;Ожидание установки флага RXC в состояние 1 –

;пропустить следующую строку, если бит RXC в

;регистре состояния USR установлен в состояние 1

rjmp r ;Вернуться к метке r:

in r15,UDR ;Принять информацию из регистра данных UDR в

;регистр r15

#endasm //Окончание текста на ассемблере

b=*p; /*Переменной b присваивается значение величины,

хранящейся в ячейке с адресом, на который указывает указатель *p

(*p, согласно его определению в начале программы, указывает на

адрес переменной oj) */

DDRB=0x00; //Порт В настроен на приём информации

PORTB=b; //Отображение принятой информации в регистре

// данных порта В

oj=0xfa; //Имитация сообщения подлежащего передаче

#asm

out UDR,r15 ;Передача информации в регистр данных UART-a и

;далее в СОМ-порт управляющего компьютера

#endasm

};

}