Микроконтроллер STC8H8K64U может тактироваться различными способами:
- Внутренний высокоточный генератор с частотой от 4 МГц до 45 МГц.
- Генератор с внешним кварцевым резонатором от 4 МГц до 33 МГц.
- Генератор с внешним кварцевым резонатором 32 кГц.
- Внутренний генератор с частотой 32 кГц с большой погрешностью.
Внутренний высокоточный генератор можно настроить с помощью программы для загрузки прошивки AIAPP-ISP. Когда пользователь использует аппаратный USB-порт для загрузки, в программе AIAPP-ISP можно выбрать только одну из 16 предустановленных частот выпадающего списка: 5,5296 МГц, 6 МГц, 11,0592 МГц, 12 МГц, 18,432 МГц, 20 МГц, 22,1184 МГц, 24 МГц, 27 МГц, 30 МГц, 33,1776 МГц, 35 МГц, 36,864 МГц, 40 МГц, 44,2368 МГц, 45,1584 МГц.
При использовании последовательного порта для загрузки, можно ввести любую частоту в диапазоне от 4 до 48 МГц. В программе это не очевидно, но частоту ввести можно вручную, однако данный фокус сработает только при загрузки прошивки с последовательного порта.
Системный тактовый контроллер обеспечивает синхронизацию процессора микроконтроллера и всех периферийных устройств. В качестве системного тактового сигнала можно выбрать любой из источников. Каждый источник тактовой частоты может быть включен или отключен, с помощью пользовательской программы. Также можно настроить встроенный делитель тактовой частоты для снижения энергопотребления. Когда микроконтроллер переходит в режим отключения питания, контроллер тактовой частоты отключает все источники тактирования.
В даташите имя регистра выбора источника тактирования, с адресом 0xfe00, указано как CKSEL, однако в заголовочном файле регистр называется CLKSEL.
Некоторые специальные периферийные устройства микроконтроллеров серии STC8H, такие как UART, SPI, PWM, I2C и управляющие контакты шины, могут быть переключены между несколькими пинами ввода-вывода, что позволяет использовать одно периферийное устройство в качестве нескольких устройств с разделением времени. Для этой функции служат регистры, связанный с функциональными переключателями.
P_SW1 Peripheral port switch register 1
P_SW2 Peripheral port switch register 2
Для работы с контроллером в программу нужно включить заголовочный файл. Если у вас нет заголовочного файла, то его можно создать с помощью программы AIAPP-ISP.
#include "stc8h.h"
На старте все пины контроллера STC8H8K64U находятся в высокоимпендансном состоянии, поэтому желательно сначала настроить пины.
P0M0 = 0x00;
P0M1 = 0x00;
P1M0 = 0x00;
P1M1 = 0x00;
P2M0 = 0x00;
P2M1 = 0x00;
P3M0 = 0x00;
P3M1 = 0x00;
P4M0 = 0x00;
P4M1 = 0x00;
P5M0 = 0x00;
P5M1 = 0x00;
P6M0 = 0x00;
P6M1 = 0x00;
P7M0 = 0x00;
P7M1 = 0x00;
Теперь можем настроить тактирование:
Для внутреннего высокоточного генератор с частотой от 4 МГц до 45 МГц.
P_SW2 = 0x80;
CLKDIV = 0x00; // Clock is not divided
CLKSEL = 0x00; // Select internal IRC (default)
P_SW2 = 0x00;
Для генератора с внешним кварцевым резонатором от 4 МГц до 33 МГц.
P_SW2 = 0x80;
XOSCCR = 0xc0; // Start external crystal
while (!(XOSCCR & 1)); // Waiting for the clock to stabilize
CLKDIV = 0x00; // Clock is not divided
CLKSEL = 0x01; // Select external crystal
P_SW2 = 0x00;
Для генератора с внешним кварцевым резонатором 32 кГц.
P_SW2 = 0x80;
X32KCR = 0x80; // Start external 32KHz oscillator
while (!(X32KCR & 1)); // Waiting for the clock to stabilize
CLKDIV = 0x00; // Clock is not divided
CLKSEL = 0x02; // Select internal 32KHz
P_SW2 = 0x00;
Для внутреннего генератора с частотой 32 кГц с большой погрешностью.
P_SW2 = 0x80;
IRC32KCR = 0x80; // Start internal 32KHz IRC
CLKDIV = 0x00; // Clock is not divided
CLKSEL = 0x03; // Select internal 32KHz
P_SW2 = 0x00;
На этом настройка тактирования завершена. Существуют более глубокие настройки, о которых можно прочитать в даташите.