Цитата(psL @ Aug 19 2005, 19:52)
прошу прощения за невнимательность - смутила нереальная (очень низкая) скорость передачи.
Можно попробовать проверить по косвенным признакам(инвертируя например свободную ногу контроллера) возникают ли прерывания от таймера и при передаче. Если возникают, то возможно в порт записан 0 или аппаратные проблемы.
Если прерывания не возникают, то можно попробовать явно инициализировать все управляющие регистры, не надеясь на то, что они инициализируются по сбросу.
Проверить генерируются ли прерывания по отдельности, то есть отключить прерывание сначала от уарта, а потом от таймера.
Попробовать на другом экземпляре.
Код:
PCON EQU 87H
T2CON EQU 0C8H
RCLK EQU 0CDH ;T2CON.5
AV1 EQU P2.0
AV2 EQU P2.1
ORG 0000H
JMP BEGIN
ORG 001BH
JMP TM1INT
ORG 0023H
JMP SRLINT
ORG 0100H
BEGIN:
MOV A,#0
MOV R0,#0FFH
CLR_RAM:
MOV @R0,A ;все SFR в 0
DJNZ R0,CLR_RAM
CLR AV1
CLR AV2
MOV SCON,#50H
MOV PCON,#80H ;SMOD1=1
MOV TMOD,#10H ;T1- синхронизатор приемника UART
MOV TH1,#0CFH ;baud rate is equal to 5 baud
MOV TL1,#2CH
SETB ES ;Enable serial interrupt
SETB ET1 ;Enable Timer1 interrupt
SETB EA ;Enable global interrupt
SETB TR1 ;Timer 1 run
MOV SBUF,#55H
JMP $
; обработчик Timer 1
TM1INT:
CPL AV1 ;для проверки входа в прерывание
CLR TR1
MOV TH1,#0CFH
MOV TL1,#2CH
SETB TR1
TM1INT_1:
RETI
;обработчик UART
SRLINT:
CLR TI
CPL AV2 ;для проверки входа в прерывание
MOV SBUF,#55H
RETI
end
Результаты:
В прерывание по Timer1 входит - на AV1(P2.0) меандр с периодом 25 мс.
В прерывание по UART не входит - AV2(P2.1) в нуле.
TxD - в единице.
include файла от AT89S8253 не нашел, но все используемые регистры есть в AT89S8252 и имеют теже адреса.
Использую Phyton PICE-51 v.3.02.56.
Программа проверена на двух микроконтроллерах (больше нет).