Автор работы: Пользователь скрыл имя, 23 Марта 2014 в 21:56, курсовая работа
В ходе развития технологии микроэлектроники происходила миниатюризация электронных схем, и появились СБИС. Массовое производство СБИС привело к их удешевлению. Одним из дешёвых и миниатюрных устройств является микроконтроллер (МК). Микроконтроллер – это СБИС, содержащая на одном кристалле процессор, ПЗУ, ОЗУ, последовательный или параллельный интерфейс связи, таймеры, схему прерываний и другие периферийные устройства. Таким образом, на одной ИС можно реализовать множество различных устройств, в которых требуется управлять каким то процессом. Причём совершенствование технологии изготовления СБИС привело к повышению их производительности, и микроконтроллеры могут достаточно быстро реагировать на событие и обрабатывать его.
В программе задаются следующие значения этих параметров:
P1=30h.
M0=0 - внутренний генератор символов ROM.
М1=0 - генератор символов RAM1; 32 знака.
М2=0 - высота символа 8 пикселов (2716 или эквивалент ROM).
W/S=0 - однопанельное управление
IV=1- нет коррекции верхней строки экрана (нет смещения)
T/L=1 - режим ТВ
DR=0 - нормальная операция
P2=87h.
FX=7h - ширина символа равна 8 пикселей.
WF=1 - двухкадровое управление АС
P3 = FY= 07h - высота символа равна 8 пикселей.
P4 = С/R = 27h - адресный диапазон равен 40 байтов на одну строку дисплея.
P5 = TC/R =39h - длина строки равна 58 байтов.
P6 = L/F = EFh - количество линий на кадр равно 240.
P7 = AL = 28h и P8 = AH = 0 - горизонтальный адресный диапазон (текстовый) равен 40.
Значения параметров команды «Scroll» (код 44h):
P1 = SAD 1L = 0 и P2 = SAD1H = 0 - начальный адрес первого экранного блока прокрутки.
P3 = SL1 = P6 = SL2 = EFh - 255 строк на прокручиваемый блок.
P4 = SAD2L = B0h и P5 = SAD2H = 04h - начальный адрес второго блока прокрутки.
P7 = SAD3L = 0h и P8 = SAD3H = 0h - начальный адрес третьего блока прокрутки.
P9 = SAD4L = 0h и P10 = SAD4H = 0h - начальный адрес четвёртого блока прокрутки.
Значения параметров команды «CURSOR FORM» (код 5Dh):
P1= CRX = 04h – ширина курсора равна 5 пикселей.
P2 = 86h.
CRY = 6h - высота курсора равна 7 пикселей
CM = 1 – блочный курсор.
Далее выставляется команда «CURSOR DIRECTION» с кодом 4Сh. Два младших бита кода команды CD1 и CD2 сброшены, поэтому курсор будет двигаться вправо.
Значения параметра команды «HORIZONTAL SCROLL RATE» (код 5Ah):
P1 = 0 – ноль пикселей для прокрутки.
Значения параметра команды «OVERLAY» (код 5Ah): P1 = 01h.
MX0 = 0 и MX1 = 1 - метод композиции наслоённого экрана следующий: (L1 and L2) or L3.
DM1 = DM2 = 0 – текстовый режим отображения блоков экрана 1 и 3, соответственно.
Командой «DISPLAY ON/OFF» (код 59h) включается дисплей (P1=16h).
Изображение выводится на дисплей сканированием его памяти. Курсор двигается слева направо и сверху вниз. Каждый бит в памяти соответствует пикселю на дисплее. Контроллер настроен так, что ширина горизонтальной линии равна 40 байтов (40*8=320) и этих линий 240. Контроллер сканирует память дисплея, пока не достигнет конца ряда, а потом переходит на следующий ряд. То есть адрес начала ряда с номером n равен 40*n или 28h*n.
Информация о сигнале с канала 1 хранится в XRAM микроконтроллера по адресу 000h – 0F0h (240 байтов).
Для отображения осциллограммы по вертикали нужно 256 пикселей, так как АЦП 8 – ми разрядный. По горизонтали будем использовать 240 пикселей. То есть размер графического экрана равен байтов. Эти байты будут храниться в XRAM по адресу 0200h – 1FFFh.
Коду 0 соответствует напряжение -0.512 В, а коду 255 соответствует напряжение +0.512 В. Коду 128 – напряжение 0 В. В каждом байте, которые хранятся по адресу 000h – 0F0h содержится номер пикселя в строке дисплея, который нужно зажечь. Адрес байта – это номер строки (Рисунок 5.2).
Рисунок 5.2 – Соответствие байтов памяти дисплея и положения пикселей на дисплее.
На рисунке 5.3 более подробно приведены блок-схемы подпрограмм для записи команд и данных в память дисплея.
Перед выводом осциллограммы посылается команда с кодом 46h «CSRW» - установка адреса курсора. У неё два параметра – два байта шестнадцатиразрядного адреса. Мы устанавливаем курсор в начало графической страницы.
Осциллограмма выводится путём подачи команды «MWRITE» контроллеру SED1335. После выставления кода команды 42h производится посылка байтов данных в память дисплея.
Текст программы представлен в приложении A. В программе приведена только подпрограмма InputADC1, так как подпрограмма InputADC2 – такая же.
Изменены лишь названия переменных.
Рисунок 5.3 – Блок схема алгоритма подпрограммы WrComm и WrData
240 команд идущих подряд, записывающих данные с АЦП с частотой дискретизации 10 МГц также не приведены.
ПРИЛОЖЕНИЕ A
Программа для МК цифрового осциллографа.
;-----------------------------
; НГТУ РЭФ Кафедра ЭП 2006г.
; Азанов М.А. РЭ3-11
; FILE NAME : dig_osc.asm
; TARGET MCU : C8051F120
; DESCRIPTION : Программа для МК цифрового осциллографа.
; NOTES : Прием данных с АЦП, сохранение выборки в памяти, вывод данных
; на ЖКИ, прием данных о параметрах сигнала и установка нужной
; частоты дискретизации и уровня сигнала
;-----------------------------
$include (c8051f120.inc)
;-------------------------
;Объявление переменных
;-------------------------
kf equ R0 ;коэффициент частоты дискретизации
; kfn f Т
; 1 10М 100н
; 2 5М 200н
; 3 2.5М 400н
; 4 500к 2мк
; 5 250к 4мк
; 6 50к 20мк
; 7 25к 40мк
; 8 5к 200мк
; 9 2.5к 400мк
;10 500 2м
;11 250 4м
CoefAmplif equ R2 ;коэффициент усиления
i equ R3 ;переменная - cчётчик1
Num equ R4
kf1 equ R5
kf2 equ R6
switch equ P2
;порт, управляющий аналоговыми
Button_kf equ P6
Button_CoefAmplif equ P7
Padc1 equ P4 ;АЦП канал 1
Padc2 equ P5 ;АЦП канал 2
;-----------------------------
; Векторы прерывания и сброса
;-----------------------------
cseg AT 0 ;Определение сегмента в адресном пространсве CODE по адресу 0
jmp Config ;Относительный переход на Config
;-----------------------------
; Объявленеие сегмента Main
;-----------------------------
Main segment CODE ;объявление сегмента Main, имеющего класс памяти CODE
rseg Main ;выбор сегмента Main
using 0 ;использовать банк регистров 0
Config:
mov SP,#07Fh ;стек расположен по адресу 80h в ОЗУ
;-----------------------------
; Настройка WDT
;-----------------------------
;Отключение WDT
clr EA ;Запретить все прерывания
mov WDTCN, #0DEh
mov WDTCN, #0ADh
setb EA
;-----------------------------
; Настройка портов ввода-вывода
;-----------------------------
mov SFRPAGE, #00Fh ;Переход на страницу F SFR
;Связывание периферийных устройств с разрядами портов
mov XBR0, #000h
mov XBR1, #080h ;биты SYSCKE T2EXE T2E INT1E T1E INT0E T0E CP1E
;значения 1 0 0 0 0 0 0 0
;/SYSCLK подключен
mov XBR2, #040h ;биты WEAKPUD XBARE CNVST2E T4EXE T4E UART1E EMIFLE CNVST0E
;значения 0 1 0 0 0 0 0 0
;Разрешить установленные перемычки
;Настройка режимов вывода разрядов портов
;1 - режим Push-Pull
;0 - режим Open-Drein
mov P0MDOUT, #03Fh
;Результат настройки портов ввода-вывода
;порт P0
;P0.0 = SYSCLK (Push-Pull Output)(Digital)
;P0.1 = GP I/O (Push-Pull Output)(Digital)
;P0.2 = GP I/O (Push-Pull Output)(Digital)
;P0.3 = GP I/O (Push-Pull Output)(Digital)
;P0.4 = GP I/O (Push-Pull Output)(Digital)
;P0.5 = GP I/O (Push-Pull Output)(Digital)
;P0.6 = GP I/O (Open-Drain Output/Input)(Digital)
;P0.7 = GP I/O (Open-Drain Output/Input)(Digital)
mov P1MDOUT, #0FFh
mov P3MDOUT, #0FFh
;-----------------------------
; Настройка генератора (SYSCLK=100 МГц и на P0.6 выводится 50 МГц )
;-----------------------------
mov SFRPAGE, #00Fh
mov OSCICN, #083h ;1 ;биты IOSCEN IFRDY - - - - IFCN1 IFCN0
;значения 1 0 1 1
;внутренний генератор разрешён
;частота не программируется
;значение предделителя = 1 (SYSCLK=25 МГц)
mov PLL0CN, #000h ;2 ;PLL использует в качестве опорной частоты
;частоту внутреннего генератора
mov SFRPAGE, #000h
mov FLSCL, #030h ;3 ;биты - - FLRT - - - FLWE
;значения 1 1 0
;стирание и запись Flash памяти запрещена
;Память работает на частоте SYSCLK <= 100 MHz
mov SFRPAGE, #00Fh
mov PLL0CN, #001h ;4 ;PLL включен
mov PLL0DIV, #001h ;5 ;предделитель PLL установлен в 1
mov PLL0FLT, #001h ;6 ;диапазон частот, которые делятся 19-30 МГц
;7 ;выходная частота PLL = 65-100 МГц
mov PLL0MUL, #004h ;8 ;коэффициент умножения PLL равен 4
;задержка - 5 мкс ;9
mov i, #040h ;установка задержки
djnz i, $ ;i-- и переход на себя, если не 0
mov PLL0CN, #003h ;10 ;включение PLL
mov i, #0FFh ;установка задержки
PLL_WAIT:
dec i
mov ACC, i ;если нет синхронизации с PLL в течении 5us,
jz PLL_NOWAIT ;то ошибка в установках PLL
mov ACC, PLL0CN
jnb ACC.4, PLL_WAIT ;задержка до появления синхроимпульсов с PLL
mov CLKSEL, #022h ;системная частота берётся с PLL и
;делится на 4 перед выводом на P0.0
PLL_NOWAIT:
;-----------------------------
; Настройка таймера
;-----------------------------
;таймер 3 используется
для задания частоты
mov SFRPAGE, #001h;
mov TMR3CF, #008h ; Таймер 3 тактируется от частоты SysClk
;-----------------------------
; Настройка прерываний
;-----------------------------
mov SFRPAGE, #000h
mov IE, #000h ;Запретить все прерывания
mov IP, #000h ;Все устройства имеют низкий приоритет
;-----------------------------
; Главная часть программы
;-----------------------------
; Настройка контроллера SED1335
ConfigSED1335:
mov R1,#40h ;установка системы
lcall WrComm
mov DPTR,#msg1 ;параметры установки системы
lcall WrData
mov R1,#44h ;прокрутка
lcall WrComm
mov dptr,#msg2 ;параметры прокрутки
lcall WrData
mov r1,#5Dh ;форма курсора
lcall WrComm
mov dptr,#msg3 ;параметры курсора
lcall WrData
mov r1,#4Ch ;направление курсора
lcall WrComm
mov R1,#5Ah ;прокрутка по точкам
lcall WrComm
mov DPTR,#msg18 ;параметр прокрутки по точкам
lcall WrData
mov dptr,#5Bh ;наложение
lcall WrComm
mov dptr,#msg4 ;параметр наложения
lcall WrData
mov r1,#59h ;включение/выключение дисплея
lcall WrComm
mov dptr,#msg5; параметр дисплея
lcall WrData
Dig_osc:
mov kf,Button_kf
;Выделение битов b2,b1,b0 и запись в kf1
mov A, kf
anl A, #007h
mov kf1, A
;Выделение битов b5,b4,b3 и запись в kf2
mov A, kf
RR A
RR A
RR A
anl A, #007h
mov kf2, A
mov CoefAmplif,Button_CoefAmplif
mov switch,CoefAmplif
call InputADC1
call Converting
; Вывод осциллограммы
mov R1,#46h; установка курсора
lcall WrComm
mov DPTR,#msg6
lcall WrData
mov R1,#42h; запись в память дисплея
lcall WrComm
mov DPTR,#00h
M0: movx A, @DPTR ;загрузка в A данных из XRAM
cjne A, #0A1h, M1 ;загружены все данные?
ljmp M2
M1:
mov R1, A
clr p3.2 ;a0=0=данные
mov A, R1 ; послать байт данных
mov P1, A
clr P3.0 ; CS - строб
clr P3.1 ; дисплея
setb P3.1
setb P3.0
inc DPTR
sjmp M0 ; следующий байт
M2:
sjmp Dig_osc
; Подпрограммы
; WrComm посылает байт в контроллер в виде команды
WrComm:
setb P3.2 ; a0=1=команда
WrComm_1:
mov A, R1 ; послать байт данных
mov P1, A
clr P3.0 ; CS - строб
clr P3.1 ; дисплея
setb P3.1
setb P3.0
ret
Write: clr p3.2 ;a0=0=данные
sjmp WrComm_1
; WrData посылает байт на который указывает
; DPTR в контроллер ввиде данных.
WrData: clr A
movc A, @A+DPTR ;загрузка в A значения параметра, записанного в ПЗУ
cjne
A, #0A1h, WrData1;загружены все
ret
WrData1:
mov R1, A
lcall Write ; отправить
inc DPTR
sjmp WrData ; следующий байт
;-----------------------------
; Подпрограмма ввода с канала 1 АЦП
;-----------------------------
InputADC1:
mov SFRPAGE, #00Fh
;Ввод в XRAM 240 байтов
cjne kf1,#001h,_5MHz1
;--------------------------
;Частота дискретизации 10 МГц
;--------------------------
_10MHz1:
mov DPTR, #000h ;3
mov ACC, Padc1 ;3
movx @DPTR, A ;3
nop ;1
mov DPTR, #001h
mov ACC, Padc1
movx @DPTR, A
nop
mov DPTR, #002h
mov ACC, Padc1
movx @DPTR, A
nop
; .
; .
; .
mov DPTR, #0EFh
mov ACC, Padc1
movx @DPTR, A
nop
;---------------------------
;Частота дискретизации 5 МГц
;---------------------------
_5MHz1:
cjne kf1, #002h, _2_5MHz1
mov DPTR, #000h
Input1_2:
mov A, Padc1
movx @DPTR, A
inc DPTR
mov A, #0F0h
;задержка 70 нс
nop
nop
nop
nop
nop
nop
nop
cjne A, DPL, Input1_2
;-----------------------------
;Частота дискретизации 2.5 МГц
;-----------------------------
_2_5MHz1:
cjne kf1, #003h, _500KHz1
; Задание числа c которого считает таймер
mov DPTR, #000h
Input1_3:
mov A, Padc1 ;2
movx @DPTR, A
inc DPTR
mov A, #0F0h
;задержка 270 нс
mov i,#008h ;2
djnz i,$ ;3
nop
nop
cjne A, DPL, Input1_3
;-----------------------------
;Частота дискретизации 500 КГц
;-----------------------------
_500KHz1:
cjne kf1, #004h, _250KHz1
; Задание числа c которого считает таймер
mov SFRPAGE, #001h
mov RCAP3H,#0FFh
mov RCAP3L,#05Ch
mov DPTR, #000h
Input1_4:
mov SFRPAGE, #00Fh ;3
mov A, Padc1 ;2
movx @DPTR, A ;3
inc DPTR ;1
mov A, #0F0h ;2