Цитата(Lexi @ Dec 19 2007, 15:55)

НУ да запрещены.... Нет так нельзя. Он у меня еще и слушать должен "собеседника". Принимать команды. UART работает на ура. Но только не хочет выполнять 1 процедуру. Это выход целых чисел int i=13, и выводить на уарт как 0x31 0x33.
Код
void dprintf(long int i)
....
}
Формируете массив, а затем опять таки функцией printf отправляете его в порт. Зачем так сложно?
Почему бы не оставить printf в покое и работать по прерываниям? Тогда и принимать и передавать сможете без циклов ожидания и прочих проблем.
Код
#define BUF_SIZE 8
uchar Buf[BUF_SIZE];
uint i=13;
uchar TxIndex;
bit TxFlag=0;
void main(void){
....
ownPrintf(Buf,i);
...
}
void ownPrintf(uchar bf, uint Val){
uchar j;
while(!TxFlag);
TxFlag=0;
for(j=0;j<BUF_SIZE;j++) bf[j]=0x30; //чистим
j=0;
while(Val){ // преобразование числа в строку
bf[j++]=((uchar)(Val%10))|0x30;
Val/=10;
}
// Начинаем отправку массива. Тут уже делаете как вам надо, но начинается
// все с записи первого байта в регистр данных УАРТА
TxIndex=0;
UDR=bf[TxIndex++];
}
// один из вариантов прерывания по прередаче
interrupt [USART_TXC] void UART_TransmitComplete(void){
if(TxIndex>=BUF_SIZE) TxFlag=1;
else UDR=Buf[TxIndex++];
}
Это лишь один из вариантов реализации