/**************************************************************************** sio.c - простейший драйвер последовательного канала для учебного стенда SDK-1.1 (C) sio.c, Ключев А.О. 2007 г. Это свободная программа; вы можете повторно распространять ее и/или модифицировать ее в соответствии с Универсальной Общественной Лицензией GNU, опубликованной Фондом Свободного ПО; либо версии 2, либо (по вашему выбору) любой более поздней версии. Эта программа распространяется в надежде, что она будет полезной, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ; даже без подразумеваемых гарантий КОММЕРЧЕСКОЙ ЦЕННОСТИ или ПРИГОДНОСТИ ДЛЯ КОНКРЕТНОЙ ЦЕЛИ. Для получения подробных сведений смотрите Универсальную Общественную Лицензию GNU. Вы должны были получить копию Универсальной Общественной Лицензии GNU вместе с этой программой; если нет, напишите по адресу: Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ---------------------------------------------------------------------------- Россия, Санкт-Петербург, кафедра вычислительной техники СПбГУИТМО e-mail: kluchev@d1.ifmo.ru ****************************************************************************/ #include "aduc812.h" /**---------------------------------------------------------------------------- init_sio() ------------------------------------------------------------------------------- Инициализирует последовательный канал на заданной скорости. Использует таймер 1 Вход: char speed - скорость. Задается константами, описанными в заголовочном файле sio.h bit sdouble - дублирование скорости: 0 - не дублировать скорость, заданную аргументом speed; 1 - дублировать. Выход: нет Результат: нет ----------------------------------------------------------------------------- */ void init_sio( unsigned char speed ) { TH1 = speed; TMOD |= 0x20; //Таймер 1 будет работать в режиме autoreload TCON |= 0x40; //Запуск таймера 1 SCON = 0x50; //Настройки последовательного канала ES = 0; //Запрещение прерываний от приемопередатчика } /**---------------------------------------------------------------------------- RSioStat() ------------------------------------------------------------------------------- Возвращает ненулевое значение, если буфер приема не пуст Вход: нет Выход: нет Результат: 0 - буфер приема пуст; 1 - был принят символ ----------------------------------------------------------------------------- */ unsigned char rsiostat(void) { return RI; } /**---------------------------------------------------------------------------- wsio ------------------------------------------------------------------------------- Отправляет символ по последовательному каналу Вход: unsigned char c - символ, который нужно отправить Выход: нет Результат: нет ----------------------------------------------------------------------------- */ void wsio( unsigned char c ) { SBUF = c; TI = 0; while( !TI ); } /**---------------------------------------------------------------------------- rsio() ------------------------------------------------------------------------------- Дожидается приема символа из последовательного канала и возвращает его. Вход: нет Выход: нет Результат: принятый символ ----------------------------------------------------------------------------- */ unsigned char rsio(void) { while( !RI ); RI = 0; return SBUF; } /**---------------------------------------------------------------------------- type() ------------------------------------------------------------------------------- Выводит ASCIIZ-строку в последовательный канал Вход: char *str - указатель на строку Выход: нет Результат: нет ----------------------------------------------------------------------------- */ void type(char * str) { while( *str ) wsio( *str++ ); }