Смекни!
smekni.com

Микропроцессорный измерительный преобразователь биоэлектрических сигналов (стр. 3 из 4)

Один из самых известных методов программной реализации нормально распределенной случайной величины основан на центральной теореме: распределение суммы независимых случайных величин приближается к нормальному при неограниченном увеличении n, если выполняются следующие условия:

1) все эти величины имеют конечные математические ожидания и дисперсии;

2) ни одна из величин по своему значению резко не отличается от всех остальных.

Согласно этой теореме можно сконструировать алгоритм реализации случайной величины Х на основе аппроксимации распределения N(0,1) суммой независимых случайных величин R1,R2,…,Rn, равномерно распределенной на интервале [0,1). Так как каждая из них имеет математическое ожидание M(Ri)=1/2 и дисперсию D(Ri)=1/12, i=1,2,…,n, то

Согласно центральной предельной теореме распределение случайной величины

при достаточно больших n приближается к N(0,1). Практика показывает , что при n=12 аппроксимация уже удовлетворительна. Тогда формула принимает вид :

Алгоритм


Описание форматов SFR

1. Регистр режима таймера/счётчика TMOD:

М1 М0

Биты М1 и М0 определяют режим работы таймера/счётчика:

М1 М0
0 0 Режим 0
0 1 Режим 1
1 0 Режим 2
1 1 Режим 3

В режиме 0 TL0 работает как 5-битный предделитель частоты.

Режим 1 – 16-битный таймер-счётчик. TH0 и TL0 включены последовательно.

Режим 2 – 8-битный автоперезагружаемый таймер/счётчик. TH0 хранит значение, которое должно быть перезагружено в TL0 каждый раз по переполнению.

Режим 3 – таймер/счётчик 1 останавливается. Таймер/счётчик: TL0 работает как 8-битный таймер/счётчик, и его режим определяется управляющими битами таймера 0. TH0 работает только как 8-битный таймер, и его режим определяется управляющими битами таймера 1 .

Установим таймер/счётчик 0 в режим 1: загружаем в регистр TMOD #01H.

2. Регистр масок прерывания IE.

EA ET0

EA (IE.7) – снятие блокировки прерываний. Сбрасывается программно для запрета всех прерываний независимо от состояний IE4 – IE0.

ET0 – бит разрешения прерывания от таймера 1. Установка/сброс программой для разрешения/запрета прерываний.

(IE)=82h.

3. Регистр управления/статуса таймера TCON.

TR0

TR0 – бит управления таймера 0. Устанавливается/сбрасывается программой для пуска/остановки таймера/счётчика.

(TCON)=10H.

4. Таймер/счётчик 0: регистр TL0 – младший байт,

регистр TH0 – старший байт.

Коды, загружаемые в эти регистры, выбираются исходя из частоты дискретизации. Частота дискретизации hд в данной работе принимается равной 100 Гц. Следовательно, прерывания будут происходить через каждые 10 мс.

1000010=271016.

10000h-2710h=0D8F0h.

Кроме того, необходимо учесть количество импульсов, которое поступит на вход счётчика к моменту записи в него младшего байта (допустим это составит 12мкс) и время, потраченное на переход от запроса прерывания к его обработке, например, 9мкс:

0D8F0H+2110=0D905h.

(TL0)=05h, (TH0)=0D9h.

Программа генерации числовой последовательности

с нормальным распределением

CSEG AT 00 ;

LJMP INIT ;

ORG 0BH ;

LJMP START ;

DSEG AT 02H ;

X_Y: DS 2 ;

X_A: DS 2 ;

X_M: DS 2 ;

X_SUM: DS 8 ;

X_SCHET: DS 1 ;

X_Z: DS 2 ;

X_SCHETCHIK: DS 1 ;

X_RES: DS 15 ;

MY_PROG SEGMENT CODE ;

RSEG MY_PROG ;

ORG 30H ;

INIT: MOV THO,#0D9H;

MOV TL0,#05H ;

MOV TMOD,#01H ;

MOV IE, #82H ;

SETB TR0 ;

WAIT: SJMP WAIT ;

START: CLR EA ;

SETB RS0 ;

MOV R4, X_Y ;

MOV R5,X_Y+1 ;

CLR RS0 ;

SETB RS1 ;

MOV R0,#14H ;

MAIN: CLR RS1 ;

SETB RS0 ;

MOV A,X_Y ;

MOV B, X_A ;

MUL AB ;

MOV R0, A ;

MOV R1, B ;

MOV A,X_Y ;

MOV B,X_A+1 ;

MUL AB ;

MOV R2,B ;

ADD A,R1 ;

MOV R1,A ;

JNC NC1 ;

CLR C ;

INC R2 ;

NC1: MOV A,X_A ;

MOV B,X_Y+1 ;

MUL AB ;

ADD A,R1 ;

MOV R1,A ;

XCH A,B ;

JNC NC2 ;

CLR C ;

INC R2 ;

NC2: ADD A,R2 ;

MOV R2,A ;

JNC NC3 ;

CLR C ;

INC R3 ;

NC3: MOV A, X_Y+1 ;

MOV B,X_A+1 ;

MUL AB ;

ADD A,R2 ;

MOV R2,A ;

JNC NC4 ;

CLR C ;

INC R3 ;

NC4: MOV A, R3 ;

ADD A,B ;

MOV R3, A ;

CJNE R3,#00,NV1 ;

CJNE R2,#00, NV3 ;

LJMP NV5 ;

NV1: MOV A,R0 ;

CLR C ;

SUBB A,X_M ;

MOV RO,A ;

JNC NV2 ;

CLR C ;

DEC R1 ;

JNC NV2 ;

CLR C ;

DEC R2 ;

JNC NV2 ;

CLR C ;

DEC R3 ;

CJNE R3,#00,NV2 ;

MOV A, R1 ;

SUBB A,X_M+1 ;

MOV R1, A ;

LJMP NV3 ;

NV2: MOV A,R1 ;

SUBB A,X_M+1 ;

MOV R1, A ;

JNC NV1 ;

CLR C ;

DEC R2 ;

JNC NV1 ;

CLR C;

DEC R3 ;

CJNE R3,#00,NV1 ;

NV3: MOV A,R0 ;

SUBB A,X_M ;

MOV R0,A ;

JNC NV4 ;

CLR C ;

DEC R1 ;

JNC NV4 ;

CLR C ;

DEC R2 ;

CJNE R2,#00,NV4 ;

MOV A,R1 ;

SUBB A,X_M+1 ;

MOV R1,A ;

LJMP NV5 ;

NV4: MOV A,R1 ;

SUBB A, X_M+1 ;

MOV R1, A ;

JNC NV3 ;

CLR C ;

DEC R2 ;

CJNE R2,#00,NV3 ;

NV5: MOV A,R0 ;

SUBB A,X_M ;

MOV R0,A ;

JNC NV6 ;

CLR C ;

DEC R1 ;

NV6: MOV A,R1 ;

SUBB A,X_M+1 ;

MOV R1,A ;

JNC NV5 ;

MOV A,R0 ;

CLR C ;

ADD A,X_M ;

MOV R0, A ;

MOV X_Y,A ;

MOV A,R1 ;

ADDC A,X_M+1 ;

MOV R1,A ;

MOV X_Y+1,A ;

CLR C ;

MOV A,R0 ;

ADD A,R4 ;

MOV R4,A ;

JNC NEXT ;

CLR C ;

INC R5 ;

NEXT: MOV A,R1 ;

ADD A,R5 ;

MOV R5,A ;

JNC NV8 ;

CLR C ;

INC R6 ;

NV8: INC R7 ;

CJNE R7,#12,NV11 ;

MOV R7,#00 ;

SETB RS1 ;

CLR RS0 ;

MOV A,X_SUM+4 ;

CLR C ;

SUBB A,R1 ;

MOV @R0,A ;

INC R0 ;

JNC NV9 ;

CLR C ;

DEC X_SUM+5 ;

NV9: MOV A,X_SUM+5 ;

SUBB A,R2 ;

MOV @R0,A ;

INC R0 ;

JNC NV10 ;

CLR C ;

DEC X_SUM+6 ;

NV10: MOV @R0,X_SUM+6 ;

INC R0 ;

MOV X_SUM+4,#00 ;

MOV X_SUM+5,#00 ;

MOV X_SUM+6,#00 ;

INC R3 ;

CJNE R3,#05, NV11 ;

MOV R3, #00 ;

SETB EA ;

LJMP OUT ;

NV11: LJMP MAIN ;

OUT:

END ;

Отладка системы в целом

В курсовой работе для отладки системы я использовал программу ProView.

ProView фирмы Franklin Software Inc. – интегрированная среда разработки программного обеспечения для однокристальных микроконтроллеров семейства Intel 8051 и его клонов. Она включает в себя всё, что нужно для создания, редактирования, компиляции, трансляции, компоновки, загрузки и отладки программ:

·стандартный интерфейс Windows,

·полнофункциональный редактор исходных текстов с выделением синтаксических элементов цветом,

·организатор проекта,

·транслятор с языка C,

·ассемблер,

·отладчик,

·встроенную справочную систему.

Среда разработки подобна Visual C++ Microsoft и Borland C++ для Windows. Пользователи, знакомые с любым из этих изделий, будут чувствовать себя в ProView, как дома.

Первый этап разработки программы – запись её исходного текста на каком-либо языке программирования.

Затем производится компиляция или трансляция его в коды из системы команд микроконтроллера, используя транслятор или ассемблер. Трансляторы и ассемблеры – прикладные программы, которые интерпретируют текстовый файл, содержащий исходный текст программы, и создают объектные файлы, содержащие объектный код.

После компоновки объектных модулей наступает этап отладки программы, устранения ошибок, оптимизации и тестирования программы.

ProView объединяет все этапы разработки прикладной программы в единый рекурсивный процесс, когда в любой момент времени возможен быстрый возврат к любому предыдущему этапу.

ProView имеет следующие компоненты.

1.Оптимизирующий кросс-компилятор C51

Язык C – универсальный язык программирования, который обеспечивает эффективность кода, элементы структурного программирования и имеет богатый набор операторов. Универсальность, отсутствие ограничений реализации делают язык C удобным и эффективным средством программирования для широкого разнообразия задач. Множество прикладных программ может быть написано легче и эффективнее на языке C, чем на других более специализированных языках.

C51 – полная реализация стандарта ANSI (Американского национального института стандартов), насколько это возможно для архитектуры Intel 8051. C51 генерирует код для всего семейства микроконтроллеров Intel 8051. Транслятор сочетает гибкость программирования на языке C с эффективностью кода и быстродействием ассемблера.

Использование языка высокого уровня C имеет следующие преимущества над программированием на ассемблере:

·глубокого знания системы команд процессора не требуется, элементарное знание архитектуры Intel 8051 желательно, но не необходимо;

·распределение регистров и способы адресации управляются полностью транслятором;

·лучшая читаемость программы, используются ключевые слова и функции, которые более свойственны человеческой мысли;

·время разработки программ и их отладки значительно короче в сравнении с программированием на ассемблере;

·библиотечные файлы содержат много стандартных подпрограмм, которые могут быть включены в прикладную программу;

·существующие программы могут многократно использоваться в новых программах, используя модульные методы программирования.

2.Макроассемблер A51

Ассемблер A51 совместим с ASM51 Intel для всего семейства микроконтроллеров Intel 8051. Ассемблер транслирует символическую мнемонику в перемещаемый объектный код, имеющий высокое быстродействие и малый размер. Макросредства ускоряют разработку и экономят время, поскольку общие последовательности могут быть разработаны только один раз. Ассемблер поддерживает символический доступ ко всем элементам микроконтроллера и перестраивает конфигурацию для каждой разновидности Intel 8051.