Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Странное поведение симулятора ADuC831
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
MihailS
Если кто использовал ADuC831 пробовали-ли вы проверять работу раймеров на симуляторе? У меня почему-то они отказываются работать.
КОД:
main.c

int main(void)
{
TCON_bit.TR1 = 1; // Запуск T1
TCON_bit.TR0 = 1; // Запуск T1
SCON_bit.REN = 1; // Разрешение приёма UART
// IE_bit.EA = 1; // Глобальное разрешение прерываний
P2 = 0xFE; // 485 - ПРИЁМ


while(1)
{
if(TCON_bit.TF1 == 1)
{
TCON_bit.TF1 = 0;
P3 = P3 ^ 0x80;
}

}
}

low_level_init.c
.........
PCON_bit.PCON7 = 1;
//Инициализация T1
TMOD_bit.M11 = 1; // Режим 2. 8-битный автоперезагружаемый таимер
TH1 = TL1 = 0xFF; //
// Инициализация UART
SCON_bit.SM1 = 1; // Режим 1. 8-битный приёмопередатчик
// Инициализация прерываний
IE_bit.ES; // Разрешение прерываний UART
// Инициализация портов В/В
P3 = 0x7F; // Светодиод - ВЫКЛ
............

Таймер - не считает! Флаг TF1 - не устанавливается.
Проверял программу в железе - не работает таймер.
ПРОШУ СОВЕТА
Палыч
Из приведённого Вами примера не видно: когда выполняется код из low_level_init.c ?
По поводу непоявления TF1... Насколько мне помнится: таймер 1 при работе UART забирается для его (UART) тактирования. Таймер 1 для UART настраивается и запускается. В документации не говорится прямо, что сам таймер не будет при этом работать, а проверять, что он нормально работает при работе UART - не приходило в голову... Может для проверки работы таймера 1 - не включать UART? Попробуйте. Что получится?
SSerge
Симуляция в IAR на примере AVR
MihailS
Цитата(Палыч @ Feb 13 2009, 13:47) *
Из приведённого Вами примера не видно: когда выполняется код из low_level_init.c ?
По поводу непоявления TF1... Насколько мне помнится: таймер 1 при работе UART забирается для его (UART) тактирования. Таймер 1 для UART настраивается и запускается. В документации не говорится прямо, что сам таймер не будет при этом работать, а проверять, что он нормально работает при работе UART - не приходило в голову... Может для проверки работы таймера 1 - не включать UART? Попробуйте. Что получится?


Переписал на ассемблере:
#include "ioADUC831.h"
NAME main

PUBLIC main


ASEG
ORG 0000h
ajmp main


ORG 100h
main orl PCON,#0x80
orl TMOD,#0x20
mov TH1,#0xff
mov TL1,#0xff
orl TCON,#0x40



start jnb TCON_TF1,start
xrl P3,#0x80
clr TCON_TF1




sjmp start

END main

Ни симулятор, ни железка ни-гу-гу
Что-то день не задался.....
MihailS
Поздравляю! Косяк найден.
Помогите проанализировать.

Если писать:
orl TCON,#0x22
то работает только таймер 0
если писать
mov TCON,#0x22
то работают оба таймера.
Проверял на разных средах...
Что это? - ГЛЮК?



Всё! Нашёл. Тупо кат-то до безобразия!
В даташитах от AD пишут что после сброса этот регистр обнулён - ЭТО НЕПРАВДА!!!!!
Записал:
mov tmod,0x00
orl tmod,0x22

И ВСЁ ЗАРАБОТАЛО!!!!
Всем спасибо!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.