Гость Artog

At89s8253

9 сообщений в этой теме

Гость Artog   
Гость Artog

Ниже приведен код, который работает на AT89S8252, но не работает на AT89S8253. Выдержка из даташита:

One can achieve very low baud rates with Timer 1 by leaving the Timer 1 interrupt enabled, and configuring the Timer to run as a 16-bit timer (high nibble of TMOD = 0001B), and using the Timer 1 interrupt to do a 16-bit software reload.

Код:

ORG 0000H

JMP BEGIN

ORG 001BH

JMP TM1INT

ORG 0023H

JMP SRLINT

ORG 0100H

BEGIN:

MOV SCON,#50H

MOV TMOD,#10H

MOV TH1,#0CFH ;baud rate is equal to 5 baud

MOV TL1,#2CH

ORL PCON,#10000000B ;SMOD1=1

SETB ES ;Enable serial interrupt

SETB ET1

SETB EA ;Enable global interrupt

SETB TR1 ;Timer 1 run

MOV SBUF,#55H

JMP $

TM1INT:

CLR TR1

MOV TH1,#0CFH

MOV TL1,#2CH

SETB TR1

RETI

SRLINT:

;JNB TI,TI_NINT

CLR TI

MOV SBUF,#55H

TI_NINT:

RETI

end

Может кто чего подскажет?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Быстрый заказ печатных плат

Полный цикл производства PCB по низким ценам!

  • x
    мм
Заказать Получить купон на $5.00
plexor!    4

Попробуй в прерывании TM1INT поставить команду сброса бита SCON.7 = 0. Или, тупо, MOV SCON,#50H.

В AT89S8253 добавлен бит FE (SCON.7=SM0/FE - Framing error bit), который устанавливается при приёме неправильного стоп-бита. Его можно сбросить только! программно.

В отличие от AT89S8252 он был там, только, SCON.7=SM0.

Удачи! :D

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Гость Artog   
Гость Artog
Попробуй в прерывании TM1INT поставить команду сброса бита SCON.7 = 0. Или, тупо, MOV SCON,#50H.

В AT89S8253 добавлен бит FE (SCON.7=SM0/FE - Framing error bit), который устанавливается при приёме неправильного стоп-бита. Его можно сбросить только! программно.

В отличие от AT89S8252 он был там, только, SCON.7=SM0.

Удачи!  :D

Попробовал - не помогло. :(

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
plexor!    4

Давай попробуем с другой стороны.

Что конкретно не работает?

В прерывание TM1INT программа входит?

Что выдает на ножке TXD? Осциллоскопом проверь. С таймингами.

Проц виснет или передаёт/принимает не правильные данные?

В каком редакторе пишешь/отлаживаешь?

include файл от AT89S8253?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Гость Artog   
Гость Artog
Давай попробуем с другой стороны.

Что конкретно не работает?

В прерывание TM1INT программа входит?

Что выдает на ножке TXD? Осциллоскопом проверь. С таймингами.

Проц виснет или передаёт/принимает не правильные данные?

В каком редакторе пишешь/отлаживаешь?

include файл от AT89S8253?

Код:

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.

Программа проверена на двух микроконтроллерах (больше нет).

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Гость Artog   
Гость Artog

Вообще, я должен был сразу сказать, что в остальных режимах UART работает нормально. Timer1 в режиме автоперегрузки в качестве baud rate - работает и Timer2 в режиме автоперегрузки в качестве baud rate тоже работает.

Ятак думаю что это просто глюк, и прийдется делать работу UARTа вручную. :(

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
plexor!    4

Полный трабл с твоей проблемой. :blink:

Еще варианты:

1. попробуй в прерывании "обработчик UART" сбрасывать и бит RI

2. перед засыланием MOV SBUF,#55H сбрось TI

3. после засылания MOV SBUF,#55H дай задержку, гарантированную для передачи байта, или крути цикл до появления TI = 1. Только потом шли следующий байт.

Ждём-с результата... :D

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Гость Artog   
Гость Artog
Полный трабл с твоей проблемой. :blink:

Еще варианты:

1. попробуй в прерывании "обработчик UART" сбрасывать и бит RI

2. перед засыланием MOV SBUF,#55H сбрось TI

3. после засылания MOV SBUF,#55H дай задержку, гарантированную для передачи байта, или крути цикл до появления TI = 1. Только потом шли следующий байт.

Ждём-с результата... :D

Я уже сделал программную эмуляцию UARTа - все отлично работает.

Но ради интеоеса попробовал ваши рекомендации:

PCON    EQU  87H
T2CON   EQU  0C8H
RCAP2L  EQU 0CAH
RCAP2H  EQU 0CBH
RCLK    EQU  0CDH       ;T2CON.5
AV1     EQU     P2.0
AV2     EQU     P2.1
AV3     EQU     P2.3
FLAG    EQU     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
       CLR     AV3
       CLR     FLAG
       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
       CLR     TI
       MOV     R2,#255
       JNB     FLAG,$
       MOV     SBUF,#55H
       JMP $

TM1INT:
       CPL     AV1
       CLR     TR1
       MOV     TH1,#0CFH
       MOV     TL1,#2CH
       SETB    TR1
       DJNZ    R2,TM1INT_1
       SETB    FLAG
       SETB    AV3
TM1INT_1:
       RETI

SRLINT:
       CLR     TI
       CLR     RI
       CPL     AV2
       MOV     SBUF,#55H
       RETI
end

Все тоже. В прерывание по таймеру попадаю, флаг FLAG устанавливается, в прерывание по UART не попадаю, передачи нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
plexor!    4

НЕЕее!! Немного не так.

        ...

       CLR     TI

       MOV     R2,#255

       JNB     FLAG,$

       MOV     SBUF,#55H

       JMP $

Надо:

clr TI

repeat:

mov a,#255

loop: dec a

jnz loop

MOV     SBUF,#55H

       JMP repeat

А в SRLINT убрать команду MOV SBUF,#55H

попробуй...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сообщения

    • предлагают "сменить 2n5551 на более диофильский 2SC3071", технически это нормально? У меня есть подлинные KEC эти  - внешне отличаются в лучшую сторону от китовых, но не слушал их, так как поставил фирмовый Санкен и оч. доволен существенному прогрессу в звуке в сравнении с китовыми.
    • Хочешь, я объясню тебе на пальцах... Средний видишь? Встретились Чубайс и Билл Гейтс. Чубайс говорит: Знаешь, Билл, я покруче тебя буду. Билл Гейтс выпадает в осадок: Это почему, мол? Чубайс говорит: Ну, вот смотри. Ты крутой бизнесмен, я крутой бизнесмен. Ты монополист, я тоже монополист. Билл Гейтс: Ну?.. Чубайс: Только хрен ты отключишь тех, кто тебе за Винды не платит!!! 
    • Почему было не задать вопрос людям "в теме"? Есть специальный раздел по МД.
    • Ничиконы обычные, а ФКП Вима раза в 4 крупнее по габаритам именно на 0.1 и 1 мкф которые, МКП Вима там видимо
    • Вольтметры эти уже затёрты до дыр. Собраны на STM.
    • Приобрёл на АЛИ термометр. Предназначен как заявляли для АВТО, но при получении вроде как для компьютера, так укомплектовали по питанию. Естественно разобрал и посмотрел что внутри и какой датчик.  Датчик обычный терморезистор NTC на 10 к. На плате капля   и индикатор и всё что обнаружил. Вольтметр/Амперметр  по видимому собран на ATtny2313 если судить по количеству выводов. Название затёрто.
        Прислали быстро дней 20 прошло. Остался доволен покупками.   Ещё преобрёл тестер компонентов. GM328 и заказал 2 ATmega328 заменю  прошивку на русское меню как придут.

       
    • Вроде и простой, но не простой усилитель;  ...104-й, значит более поздняя, нежели 004-я, версия. С удовольствием  приложил бы к нему свои лапы - потенциал для моддинга в нём серьёзный. Помнится года 3-4 назад Bender с помощью "тяжёлой артиллерии" аудио-гуру делал из этого усилителя "пулю", вылечив его "детские болячки", которыми страдает большинство советских аппаратов.  А орбита-бабинник у дедушки случайно не из сотых? ...а дедушка-то, думается, не простой. Кто такой?