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
Страницы: 1, 2, 3, 4
|