Программа синуса на ассемблере к 12 разрядному ЦАП

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
EXtReMe_
Родился
Сообщения: 8
Зарегистрирован: Вт мар 12, 2013 14:51:10

Программа синуса на ассемблере к 12 разрядному ЦАП

Сообщение EXtReMe_ »

Всем привет. Прошу помощи у форумчан как собственно изменить программу что бы подключить 12 разрядный цап к 2м 8-ми битным портам контроллера. Таблицу синусов для 12 разр ЦАП я сформировал.
Вот прога для 8 битного цап

ORG 0000h
SIN:
MOV DPTR,#TABSIN ; загрузка базового счётчика
MOV R7,#1 ; начальное состояние - без инверсии
MOV R6,#255 ; число точек синуса
K:
CLR A ; очистка индексного регистра
MOVC A,@A+DPTR ; выборка очередного отсчёта
MOV P2,A ; вывод значения точки в порт ЦАП(P3)
MOV A,DPL
ADD A,R7 ; переход к следующей точке таблицы
MOV DPL,A
JNC NC ; если переполнение мл. разр. DPTR
INC DPH ; то увеличиваем DPH
NC:
DJNZ R6,K ; перебираем в цикле все точки синуса
JMP SIN
RET
$INCLUDE (CONST.INC) ; Подключаем таблицу синуса
END
petrenko
Друг Кота
Сообщения: 5321
Зарегистрирован: Вт фев 21, 2012 13:51:55
Откуда: Начинающий
Контактная информация:

Re: Программа синуса на ассемблере к 12 разрядному ЦАП

Сообщение petrenko »

Ежели б Вы знали систему команд мк семейства MSC-51 ..
Ассемблер: INC DPTR
Код:
1 0 1 0 0 0 1 1
Время: 2 циклa
Алгоритм: (DPTR):=(DPTR)+1
Пример:
;(DPH)=12H, (DPL)=FEH
INC DPTR
INC DPTR
INC DPTR ;(DPH)=13H, (DPL)=01H
То не стали бы "городить городулю" вида :

Код: Выделить всё

JNC NC ; если переполнение мл. разр. DPTR
INC DPH ; то увеличиваем DPH
и так далее, вытекающее из этой несуразности..
:facepalm:
Переписать лучше всё заново. Советую только , но решать Вам, разумеется.


А вдруг я ошибаюсь и это там у Вас не мк семейства MSC-51 ? :roll:
< виртуальная "кнопочка" >--( WWW ) <- Убедительная просьба интересующимся старыми компьютерами типа РК86 - не пишите в теме в барахолке, пишите Ваши вопросы в ( лс ) пожалуйста
ST_A
Нашел транзистор. Понюхал.
Сообщения: 150
Зарегистрирован: Вт окт 05, 2010 15:25:41
Откуда: г. Кишинев

Re: Программа синуса на ассемблере к 12 разрядному ЦАП

Сообщение ST_A »

EXtReMe_ писал(а):Всем привет. Прошу помощи у форумчан как собственно изменить программу что бы подключить 12 разрядный цап к 2м 8-ми битным портам контроллера. Таблицу синусов для 12 разр ЦАП я сформировал.
Вот прога для 8 битного цап

ORG 0000h
SIN:
MOV DPTR,#TABSIN ; загрузка базового счётчика
MOV R7,#1 ; начальное состояние - без инверсии
MOV R6,#255 ; число точек синуса
K:
CLR A ; очистка индексного регистра
MOVC A,@A+DPTR ; выборка очередного отсчёта
MOV P2,A ; вывод значения точки в порт ЦАП(P3)
MOV A,DPL
ADD A,R7 ; переход к следующей точке таблицы
MOV DPL,A
JNC NC ; если переполнение мл. разр. DPTR
INC DPH ; то увеличиваем DPH
NC:
DJNZ R6,K ; перебираем в цикле все точки синуса
JMP SIN
RET
$INCLUDE (CONST.INC) ; Подключаем таблицу синуса
END


Алгоритм программы слегка избыточен, вдобавок стоит отметить что она не позволяет изменять частоту выходного синусоидального сигнала (она жестко привязана к частоте тактового генератора самого процессора). Для разрядности выходного ЦАП больше 8 бит в массиве данных таблицы синуса на каждую точку отвести 2 байта и при считывании данные писать в 2 порта В/В (младший в 1 порт, остальное в другой порт с минимальным разнобоем во времени) а сам ЦАП повесить на эти 2 порта В/В. Для возможности изменения частоты синуса стоит поломать голову над алгоритмом генератора с накоплением фазы, там есть что воплощать в железо и софт...
Ответить

Вернуться в «Разные вопросы по МК»