Написал простейшую программу (непрерывная передача символа) с помощью библиотечных функций, собрал схему на max232, соединил с PC - всё работает: в гипертерминале отображаются полученные символы. Теперь написал ту же самую программу, но не использовал библиотечные функции, а настраивал модуль USART по даташиту. Соединил с РС по той же схеме и ничего, в гипертерминале ничего нет, хотя программа rs232 регистрирует активность порта. В чем может быть дело? Спасибо.
PS: в протеусе работают обе программы.
Программа без библиотечных функций:
Код: Выделить всё
#include <16f877.h>
#use delay(clock=4000000)
#fuses HS,NOWDT
void init_ports()
//Настройка портов
{
TRISA=0b00000000;
PORTA=0b00000000;
PORTB=0b00000001;
TRISB=0b00000000;
TRISC=0b00000000;
PORTC=0b00000000;
PORTD=0b00000000;
TRISD=0b00000000;
}
void int_on()
//Настройка прерываний
{
GIE=1;
//Глобальное разрешение прерываний
PEIE=1;
//Разрешение прерываний от периферийных устройств
}
void init_USART()
{
BRGH=0;
//Низкоскоростной режим уарт
SPBRG=51;
//Скорость передачи 1200 бод
SYNC=0;
//Асинхронный режим передачи
SPEN=1;
//Включить усарт
TXIE=1;
//Прерывание разрешено от уарт
TX9=0;
//8 разрядная передача
TXEN=1;
//Разрешить передачу данных по уарт, регистр пуст
}
#int_tbe
//буфер передачи пуст
void transmit_usart()
{
TXREG='a';
}
void main (void)
{
init_ports();
//Настройка портов
int_on();
//Настройка прерываний
init_USART();
//Настройка уарт
//При этом TXIF=1 - буфер передатчика пуст
while (1)
{
}
}
