Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пояснительная_записка.doc
Скачиваний:
2
Добавлен:
01.03.2025
Размер:
5.24 Mб
Скачать
        1. Организация бесконечного цикла встроенного приложения

Бесконечный цикл организован в функции main(), внутри которого проходит сеанс соединения с ПК (соединения, получение настроек, отправка результатов АЦП). Бесконечный цикл создан, чтобы была возможность многократных запросов со стороны пользователя.

        1. Отключение сторожевого таймера

Регистр WDTCN:

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

Значение при сбросе:

ххххх111

Бит 7

Бит 6

Бит 5

Бит 4

Бит 3

Бит 2

Бит 1

Бит 0

Биты 7-0: Управление WDT

  • Запись 0хA5 как включает, так и перезагружает WDT

  • Запись 0xAD в течение 4 тактовых циклов после записи 0xDE отключает WDT

  • Запись 0xFF блокирует функцию отключения

Отлючение сторожевого таймера (WDT) производится в функции MC_Config с помощью последовательной записи значений 0xDE и 0xAD в регистр WDTCN. Это иллюстрируют следующие строки кода:

EA = 0; // forbid all interrupts

WDTCN = 0xde; // turn off WDT

WDTCN = 0xad;

EA = 1; // Enable all interrupts

Между записью этих значений должно пройти не более четырех тактовых циклов, иначе операция отключения игнорируется. На время этой процедуры необходимо запретить прерывания (EA = 0) во избежание задержки между записями в регистр управления WDT. После завершения операции отключения WDT следует вновь разрешить прерывания (EA=1).

        1. Переключение с внутреннего генератора на внешний

Регистр OSCXCN:

R

R/W

R/W

R/W

R

R/W

R/W

R/W

Значение при сбросе:

00000000

XTLVLD

XOSCMD2

XOSCMD1

XOSCMD0

-

XFCN2

XFCN1

XFCN0

Бит 7

Бит 6

Бит 5

Бит 4

Бит 3

Бит 2

Бит 1

Бит 0

Бит 7: XTLVLD – флаг стабилизации кварцевого генератора (действиетелен, только если XOSCMD = 11х)

0 - кварцевый генератор не используется или еще не стабилен

1 - Кварцевый генератор работает и стабилен

Биты 6-4: XOSCMD2-0 – биты выбора режима внешнего генератора

00х - внешний генератор выключен

010 - тактовые импульсы поступают от внешнего КМОП-счетчика через вывод XTAL1

011 - тактовые импульсы поступают от внешнего КМОП-счетчика через вывод XTAL1 и внутренний делитель 2

10х - режим RC/C-генератора с делением тактовой частоты на 2

110 - режим кварцевого генератора

111 – режим кварцевого генератора с делением тактовой частоты на 2

Бит 3: зарезервирован. Читается как 0b. Запись не оказывает никакого влияния.

Биты 2-0: XFCN2-0: Биты управления частотой внешнего генератора

Для переключения с внутреннего генератора на внешний необходимо выполнить следующий алгоритм в функции SYSCLK_Init():

  1. Включить внешний генератор (записать в регистр OSCXCN значение 0x77)

Значение 0х77 (01110111)- режим кварцевого генератора с делением тактовой частоты на 2 и частота внешнего генератора задается от 10 МГц до 30 МГц.

  1. Выдержать паузу длительностью как минимум 1мс, чтобы исключить преждевременное переключение системы от внешнего генератора;

  2. Опрашивать бит XTLVLD регистра OSCXCN до обнаружения перехода его состояния из '0' в '1' (бит автоматически устанавливается в '1', как только внешний генератор выходит на стабильный режим работы);

XTLVLD установлен в единицу, когда значение (OSCXCN & b10000000) ненулевое, т.е. когда (OSCXCN & 0х80) или (OSCXCN & 128) ненулевое.

  1. Переключиться на работу от внешнего генератора (записать в регистр CLKSEL значение 0x01 = b00000001).

  2. Отключить внутренний генератор записью значения 0х00 в регистр OSCICN.

Следующий код функции SYSCLK_Init() иллюстрирует вышеописанную процедуру:

OSCXCN = 0x77; // start external oscilator, frequency =(22 118 400 / 2)Hz

for (i=0; i <5000; i++) ; // dalay > 1 msec (setting XTLVLD)

while (!(OSCXCN & 128)) ; // wait until generator is stable

CLKSEL |= 0x01; // switch to external oscilator

OSCICN = 0x00; // disable internal oscillator