
Интерфейс USB в современных нестандандартных периферийных устройствах - Слизовский Е.В
..pdfFor I := 0 to ( FC1 - 1 ) do
If FT_Out_Buffer[I] <> FT_In_Buffer[I] then Passtest := False; End;
Until FC1 <> FT_In_Buffer_Size; CloseFile(OpenFile); CloseFile(SaveFile);
If PassTest then Memo1.Lines.Add('Проверка пройдена успешно !') else Memo1.Lines.Add('Проверка не пройдена!')
End;
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
var S:String; DeviceIndex : DWord; I : Integer; LV : TListItem; begin
Cfg_f.ListView1.Items.clear; GetFTDeviceCount;
S := IntToStr(FT_Device_Count);
Caption := 'D2XX Тестовая программа - '+S+' устройств подключено ...'; DeviceIndex := 0;
If FT_Device_Count > 0 then
For I := 1 to FT_Device_Count do Begin
LV := Cfg_f.ListView1.Items.Add; LV.Caption := 'Устройство '+IntToStr(I); GetFTDeviceSerialNo( DeviceIndex ); LV.SubItems.Add(FT_Device_String); GetFTDeviceDescription ( DeviceIndex ); LV.SubItems.Add(FT_Device_String); DeviceIndex := DeviceIndex + 1;
End;
end;
procedure TForm1.BitBtn4Click(Sender: TObject); begin
Close;
end;
procedure TForm1.ListView1Click(Sender: TObject); var LV : TListItem;
begin
{If Listview1.SelCount > 0 then Begin
LV := ListView1.Selected;
BitBtn1.Enabled := True; Selected_Device_Serial_Number := LV.SubItems[0]; Selected_Device_Description := LV.SubItems[1]; End else
BitBtn1.Enabled := False; }end;
procedure TForm1.About1Click(Sender: TObject); begin
MessageDlg('программа тестирования FT2XX by ESl <slizovskij@mail.ru>', mtInformation, [mbOk], 0);
end;
procedure TForm1.N3Click(Sender: TObject); begin
MessageDlg('Справка недоступна в данной версии. приносим свои извинения', mtError, [mbOk],0);
end;
procedure TForm1.kugfkgf1Click(Sender: TObject);
61
begin Form1.Close; end;
procedure TForm1.FormCreate(Sender: TObject); begin
//Cfg_f.FTSendFile:= FTSendFile;
//Cfg_f.FTReceiveFile:=FTReceiveFile;
//Cfg_f.FTResend:=FTResend;
end;
procedure TForm1.N7Click(Sender: TObject); begin
Cfg_f.ShowModal; end;
procedure TForm1.Timer2Timer(Sender: TObject); begin
ReceiveFile1.Enabled:=(devConfig.Selected_Device_Serial_Number=''); Configure1.Enabled:=ReceiveFile1.Enabled; SendRxvCompare1.Enabled:=ReceiveFile1.Enabled; ReSend1.Enabled:=ReceiveFile1.Enabled;
end;
procedure TForm1.StartBTNClick(Sender: TObject); begin
stopBtn.Enabled:=true;
StartBtn.Enabled:=false;
Timetime.enabled:=true;
tt:=0;
pointCount:=0;
FTResendExecute(Sender);
min:=0;
max:=0;
sredn:=0;
end;
procedure TForm1.StopBTNClick(Sender: TObject); begin
StopBtn.Enabled:=false;
StartBtn.Enabled:=true;
Timetime.enabled:=false;
end;
function sf(s:string):string; begin
if length(s)<2 then s:='0'+s; result:=s;
end;
procedure TForm1.TimeTimeTimer(Sender: TObject); var
h,m,s:integer; begin
tt:=tt+1; h:=tt div 3600;
tt:=tt-(h*3600); m:=tt div 60; s:=tt mod 60;
label10.Caption:=sf(inttostr(h))+':'+sf(inttostr(m))+':'+sf(inttostr(s));
end;
end.
62

Приложение 3. Некоторые формы программы опроса датчика ускорения.
Рис. 1 Форма конфигурации устройств
Рис. 2 Основная форма.
63
Приложение 4. Библиотека арифметических подпрограмм для МК ЕР1878ВЕ1
;МАТЕМАТИЧЕСКАЯ БИБЛИОТЕКА |
- |
|
||||
;-------------------------------------------------------- |
|
|
|
|
|
|
; |
|
|
|
|
|
|
;Таблица векторов прерываний |
|
|
||||
S:: |
JMP |
T_FSA |
|
;<0> Начальный пуск |
|
|
|
JMP |
ERR |
|
;<1> Сторожевой таймер |
||
|
JMP |
ERR |
|
;<2> Сбой программы (стеки, память) |
||
|
JMP |
ERR |
|
;<3> Таймер A |
|
|
|
JMP |
ERR |
|
;<4> |
|
|
|
JMP |
ERR |
|
;<5> |
|
|
|
JMP |
ERR |
|
;<6> Порт A |
|
|
|
JMP |
ERR |
|
;<7> |
|
|
|
JMP |
ERR |
|
;<8> |
|
|
|
JMP |
ERR |
|
;<9> |
|
|
|
JMP |
ERR |
|
;<10> |
|
|
|
JMP |
ERR |
|
;<11> |
|
|
|
JMP |
ERR |
|
;<12> |
|
|
|
JMP |
ERR |
|
;<13> |
|
|
|
JMP |
ERR |
|
;<14> |
|
|
|
JMP |
ERR |
|
;<15> |
|
|
; |
|
|
|
|
|
: |
;--------------------------------------------------- |
Нормальный выход (без ошибок) |
|
||||
; |
|
: |
||||
;--------------------------------------------------- |
|
EXIT |
|
|
|
: |
EXIT: JMP |
|
|
|
|
||
; |
|
|
|
|
|
: |
;--------------------------------------------------- |
|
Обработка ошибок |
: |
|||
; |
|
: |
||||
;--------------------------------------------------- |
JMP |
ERR |
|
|
|
|
ERR: |
|
|
|
|
||
;Точка старта программы |
|
|
|
|||
T_FSA: |
8 |
;IE=0 |
|
|
|
|
|
cst |
;Установка сегмента A |
|
|||
|
ldr |
#0,40h |
|
|||
|
ldr |
#1,48h |
;Установка сегмента B |
|
||
|
ldr |
#2,50h |
;Установка сегмента C |
|
||
|
ldr |
#3,58h |
;Установка сегмента D |
|
||
|
ldr |
#4,40h |
;Установка IR0 (мл.) |
|
||
|
ldr |
#5,40h |
;Установка IR0 (ст.) (Auto+) |
|||
|
ldr |
#6,00h |
;Установка IR1 (мл.) |
|
||
|
ldr |
#7,00h |
;Установка IR1 (ст.) |
|
||
;Умножение |
|
|
|
|
|
|
;==================================================== |
||||||
;= |
Вариант с беззнаковым умножением 8x8 |
= |
||||
;= |
movl |
%a0,0Fh |
;Исходные |
|
= |
|
;= |
movl |
%a1,0Fh |
; данные |
|
= |
|
;= |
jsr |
MU_8U ;Вызов рабочей подпрограммы = |
||||
;= |
JMP |
EXIT |
;Выход |
= |
|
|
;==================================================== |
||||||
;==================================================== |
||||||
;= |
Вариант со знаковым умножением 8x8 |
= |
||||
;= |
movl |
%a0,0Fh |
;Исходные |
|
= |
|
;= |
movl |
%a1,0Fh |
; данные |
|
= |
|
;= |
jsr |
MU_8S ;Вызов рабочей подпрограммы = |
||||
;= |
JMP |
EXIT |
;Выход |
= |
|
;====================================================
;====================================================
64
;= |
Вариант с беззнаковым умножением 16x16 |
= |
||||||
;= |
movl |
%a0,0Fh |
;Исходные |
|
|
= |
||
;= |
movl |
%a1,0Fh |
; данные |
|
|
= |
||
;= |
movl |
%a2,0Fh |
;Исходные |
|
|
= |
||
;= |
movl |
%a3,0Fh |
; данные |
|
|
= |
||
;= |
jsr |
MU_16U |
;Вызов рабочей подпрограммы = |
|||||
;= |
JMP |
EXIT |
;Выход |
|
= |
|
|
|
;==================================================== |
||||||||
;==================================================== |
||||||||
;= |
Вариант со знаковым умножением 16x16 |
= |
||||||
;= |
movl |
%a0,0Fh |
;Исходные |
|
|
= |
||
;= |
movl |
%a1,0Fh |
; данные |
|
|
= |
||
;= |
movl |
%a2,0Fh |
;Исходные |
|
|
= |
||
;= |
movl |
%a3,0Fh |
; данные |
|
|
= |
||
;= |
jsr |
MU_16S |
;Вызов рабочей подпрограммы = |
|||||
;= |
JMP |
EXIT |
;Выход |
|
= |
|
|
|
;==================================================== |
||||||||
;Деление |
|
|
|
|
|
|
|
|
;==================================================== |
||||||||
;= |
Вариант с беззнаковым делением 8x8 |
|
= |
|||||
;= |
movl |
%a0,0Fh |
;Исходные |
|
|
= |
||
;= |
movl |
%a1,02h |
; данные |
|
|
= |
||
;= |
jsr |
DI_8U ;Вызов рабочей подпрограммы = |
||||||
;= |
JMP |
EXIT |
;Выход |
|
= |
|
|
|
;==================================================== |
||||||||
;==================================================== |
||||||||
;= |
Вариант со знаковым делением 8x8 |
|
= |
|||||
;= |
movl |
%a0,0Fh |
;Исходные |
|
|
= |
||
;= |
movl |
%a1,02h |
; данные |
|
|
= |
||
;= |
jsr |
DI_8S ;Вызов рабочей подпрограммы = |
||||||
;= |
JMP |
EXIT |
;Выход |
|
= |
|
|
|
;==================================================== |
||||||||
;==================================================== |
||||||||
;= |
Вариант с беззнаковым делением 16x16 |
= |
||||||
;= |
movl |
%a0,0Fh |
;Исходные |
|
|
= |
||
;= |
movl |
%a1,03h |
; данные |
|
|
= |
||
;= |
movl |
%a2,03h |
;Исходные |
|
|
= |
||
;= |
movl |
%a3,00h |
; данные |
|
|
= |
||
;= |
jsr |
DI_16U |
;Вызов рабочей подпрограммы = |
|||||
;= |
JMP |
EXIT |
;Выход |
|
= |
|
|
|
;==================================================== |
||||||||
; |
|
|
|
|
|
|
|
|
;Собственно библиотечные подпрограммы |
|
|
||||||
; |
|
|
|
|
|
|
|
|
; |
|
|
|
|
|
|
|
|
;========================================= |
|
|||||||
;== |
Беззнаковое умножение 8x8 |
== |
|
|
||||
;========================================= |
|
|||||||
;-- |
Вход: %A0 - 1-ый множитель |
-- |
|
|
||||
;-- |
|
%A1 - 2-ой множитель |
-- |
-- |
|
|||
;-- |
Выход: |
%A2 - ст. байт рез-та |
|
|||||
;-- |
|
%A1 - мл. байт рез-та |
-- |
-- |
|
|||
;-- |
Исп-ся: |
%A3 - счётчик сдвигов |
|
|||||
;----------------------------------------- |
|
|||||||
MU_8U: |
xor |
%a2,%a2 |
;Инициализация ст. байта результата и CF |
|||||
|
movl |
%a3,9 ;Число битов в байте + 1 |
|
|||||
$2: |
jmp |
$4 |
;На нулевой сдвиг 2-го множителя |
|||||
add |
%a2,%a0 |
;Сложение |
ст. байта результата с 1-ым множителем |
|||||
$3: |
rrc |
%a2 |
;Циклич. сдвиг вправо ст. байта результата |
|||||
$4: |
rrc |
%a1 |
;Циклич. сдвиг вправо мл. байта рез-та и 2-го множ-ля |
|||||
|
jc |
$5 |
;Если CF=1 |
|
|
|
|
65
dec |
%a3 |
;Пока не все |
jnz |
$3 |
; сдвиги |
rts |
%a3 |
;Выход из подпрограммы |
$5: dec |
;Пока не все |
|
sst |
1 |
;CF=1 |
jnz |
$2 |
; сдвиги |
rts |
|
;Выход из подпрограммы |
;
;=========================================
;== |
Знаковое умножение 8x8 |
|
== |
|
|||
;========================================= |
|||||||
;-- |
Вход: %A0 - 1-ый множитель |
-- |
|
||||
;-- |
|
%A1 - 2-ой множитель |
-- |
-- |
|||
;-- |
Выход: |
%A2 - ст. байт рез-та |
|||||
;-- |
|
%A1 - мл. байт рез-та |
-- |
-- |
|||
;-- |
Исп-ся: |
%A3 - счётчик сдвигов |
|||||
;----------------------------------------- |
|||||||
MU_8S: |
xor |
%a2,%a2 |
;Инициализация ст. байта результата и CF |
||||
|
movl |
%a3,8 |
;Число битов в байте |
|
|||
$2: |
jmp |
$3 |
;На битовую проверку |
|
|||
add |
%a2,%a0 |
;Сложение ст. байта результата с 1-ым множителем |
|||||
$3: |
bttl |
%a1,0001b ;Установлен бит 0 в мл. байте рез-та и 2-го множ-ле? |
|||||
|
jz |
.+1 |
;Нет |
;Восстановление ст. байта результата |
|||
|
sub |
%a2,%a0 |
|||||
|
shra |
%a2 |
;Арифметич. сдвиг вправо ст. байта результата |
||||
|
rrc |
%a1 |
;Циклич. сдвиг вправо мл. байта рез-та и 2-го множ-ля |
||||
|
jc |
$5 |
;Если CF=1 |
|
|
|
|
|
dec |
%a3 |
;Пока не все |
|
|
||
|
jnz |
$3 |
; сдвиги |
|
|
|
|
$5: |
rts |
%a3 |
;Выход из подпрограммы |
|
|||
dec |
;Пока не все |
|
|
||||
|
sst |
1 |
;CF=1 |
|
|
|
|
|
jnz |
$2 |
; сдвиги |
|
|
|
|
; |
rts |
|
;Выход из подпрограммы |
|
|||
|
|
|
|
|
|
|
|
;=============================================== |
|||||||
;== |
Беззнаковое умножение 16x16 |
|
== |
||||
;=============================================== |
|||||||
;-- |
Вход: %A0 - мл. байт 1-го множ-ля |
-- |
|||||
;-- |
|
%A1 - ст. байт 1-го множ-ля |
-- |
||||
;-- |
|
%A2 - мл. байт 2-го множ-ля |
-- |
||||
;-- |
|
%A3 - ст. байт 2-го множ-ля |
-- |
||||
;-- |
Выход: |
%A2 - байт 0 рез-та |
-- |
||||
;-- |
|
%A3 - байт 1 рез-та |
|
-- |
|||
;-- |
|
%A4 - байт 2 рез-та |
|
-- |
|||
;-- |
|
%A5 - байт 3 рез-та |
|
-- |
|||
;-- |
Исп-ся: |
%A6 - счётчик сдвигов |
-- |
||||
;----------------------------------------------- |
|||||||
MU_16U: |
clr |
%a5 |
;Инициализация байта 3 результата |
||||
|
xor |
%a4,%a4 |
;Инициализация байта 2 результата и CF |
||||
|
movl |
%a6,17 |
;Число битов в байте + 1 |
||||
$2: |
jmp |
$4 |
;На нулевой сдвиг 2-го множителя |
||||
add |
%a4,%a0 |
;Сложение байта 2 результата с мл. байтом 1-го множ-ля |
|||||
|
adc |
%a5 |
;Сложение байта 3 результата с CF |
||||
|
jnc |
$100 |
;Если не установлен CF |
|
|||
|
add |
%a5,%a1 |
;Сложение байта 3 результата с ст. байтом 1-го множ-ля |
||||
|
sst |
1 |
;Восстановление |
|
|
||
|
jmp |
$3 |
; CF |
;Сложение байта 3 результата с ст. байтом 1-го множ-ля |
|||
$100: add |
%a5,%a1 |
||||||
$3: |
rrc |
%a5 |
;Циклич. сдвиг вправо байта 3 результата |
||||
$4: |
rrc |
%a4 |
;Циклич. сдвиг вправо байта 2 результата |
||||
rrc |
%a3 |
;Циклич. сдвиг вправо байта 1 рез-та и мл.б. 2 множ-ля |
|||||
|
rrc |
%a2 |
;Циклич. сдвиг вправо байта 0 рез-та и ст.б. 2 множ-ля |
||||
|
jc |
$5 |
;Если CF=1 |
|
|
|
66
dec |
%a6 |
;Пока не все |
jnz |
$3 |
; сдвиги |
rts |
%a6 |
;Выход из подпрограммы |
$5: dec |
;Пока не все |
|
sst |
1 |
;CF=1 |
jnz |
$2 |
; сдвиги |
rts |
|
;Выход из подпрограммы |
;
;===============================================
;== |
Знаковое умножение 16x16 |
== |
||
;=============================================== |
||||
;-- |
Вход: %A0 - мл. байт 1-го множ-ля |
-- |
||
;-- |
%A1 - ст. байт 1-го множ-ля |
-- |
||
;-- |
%A2 - мл. байт 2-го множ-ля |
-- |
||
;-- |
%A3 - ст. байт 2-го множ-ля |
-- |
||
;-- |
Выход: |
%A2 - байт 0 рез-та |
-- |
|
;-- |
%A3 - байт 1 |
рез-та |
-- |
|
;-- |
%A4 - байт 2 |
рез-та |
-- |
|
;-- |
%A5 - байт 3 |
рез-та |
-- |
|
;-- |
Исп-ся: |
%A6 - счётчик сдвигов |
-- |
;----------------------------------------------- |
|
|
|
|
MU_16S: |
clr |
%a5 |
;Инициализация байта 3 результата |
|
|
xor |
%a4,%a4 |
;Инициализация байта 2 результата и CF |
|
$1: |
movl |
%a6,16 |
;Число битов в байте |
|
JNC |
$3 |
|
;Сложение байта 2 результата с мл. байтом 1-го множ-ля |
|
$2: |
add |
%a4,%a0 |
||
|
adc |
%a5 |
;Сложение байта 3 результата с CF |
|
|
jnc |
$100 |
;Если не установлен CF |
|
|
add |
%a5,%a1 |
;Сложение байта 3 результата с ст. байтом 1-го множ-ля |
|
|
sst |
1 |
;Восстановление |
|
|
jmp |
$3 |
; CF |
;Сложение байта 3 результата с ст. байтом 1-го множ-ля |
$100: add |
%a5,%a1 |
|||
$3: |
jsr |
RBTTL |
|
|
|
;Нет |
|
||
|
jz |
.+1 |
;Восстановление байта 2 результата |
|
|
sub |
%a4,%a0 |
||
|
jsr |
RBTTL |
;Нет |
|
|
jz |
$4 |
|
|
|
sbc |
%a5 |
;Восстановление |
|
|
jnc |
$200 |
;Если не установлен CF |
|
|
sub |
%a5,%a1 |
; байта 3 результата |
|
|
sst |
1 |
;Восстановление |
|
|
jmp |
$4 |
; CF |
; байта 3 результата |
$200: sub |
%a5,%a1 |
|||
$4: |
shra |
%a5 |
;Арифметич.сдвиг вправо байта 3 результата |
|
|
||||
|
rrc |
%a4 |
;Циклич. сдвиг вправо байта 2 результата |
|
|
rrc |
%a3 |
;Циклич. сдвиг вправо байта 1 рез-та и мл.б. 2 множ-ля |
|
|
rrc |
%a2 |
;Циклич. сдвиг вправо байта 0 рез-та и ст.б. 2 множ-ля |
|
|
JSR |
RDEC |
|
;{Это} |
|
jnz |
$1 |
|
;{всё} |
|
rts |
|
|
;{временно} |
|
jc |
$5 |
;Если CF=1 |
|
|
dec |
%a6 |
;Пока не все |
|
|
jnz |
$3 |
; сдвиги |
|
$5: |
rts |
%a6 |
;Выход из подпрограммы |
|
dec |
;Пока не все |
|||
|
sst |
1 |
;CF=1 |
|
|
jnz |
$2 |
; сдвиги |
|
; |
rts |
|
;Выход из подпрограммы |
|
|
|
|
|
67
;=========================================
;== |
Беззнаковое деление 8/8 |
== |
|
||||
;========================================= |
|||||||
;-- |
Вход: %A0 - делимое |
|
-- |
|
|||
;-- |
|
%A1 - делитель |
|
-- |
-- |
||
;-- |
Выход: |
%A0 - частное |
-- |
||||
;-- |
|
%A2 - остаток |
|
-- |
|||
;-- |
Исп-ся: |
%A3 - счётчик сдвигов |
|||||
;----------------------------------------- |
|||||||
DI_8U: |
xor |
%a2,%a2 |
;Инициализация остатка и CF |
||||
$1: |
movl |
%a3,9 |
;Число битов в байте + 1 |
||||
rlc |
%a0 |
;Циклич. сдвиг влево делимого и частного |
|||||
|
jc |
$4 |
;Если CF=1 |
|
|
|
|
|
dec |
%a3 |
;Пока не все |
|
|
||
|
jnz |
$2 |
; сдвиги |
|
|
|
|
$4: |
rts |
%a3 |
;Выход из подпрограммы |
|
|||
dec |
;Пока не все |
|
|
||||
|
sst |
1 |
;CF=1 |
|
|
|
|
|
jnz |
$2 |
; сдвиги |
|
|
|
|
$2: |
rts |
%a2 |
;Выход из подпрограммы |
|
|||
rlc |
;Циклич. сдвиг влево остатка |
||||||
|
sub |
%a2,%a1 |
;Вычитание из остатка делителя |
||||
|
jnc |
$3 |
;Если разность >0 |
|
|
||
|
add |
%a2,%a1 |
;Иначе - восстанавливается остаток |
||||
|
cst |
1 |
;CF=0 |
|
|
|
|
$3: |
jmp |
$1 |
;Следующий цикл |
|
|
||
sst |
1 |
;CF=1 |
|
|
|
|
|
; |
jmp |
$1 |
;Следующий цикл |
|
|
||
|
|
|
|
|
|
|
|
;========================================= |
|||||||
;== |
Знаковое деление 8/8 |
|
== |
|
|||
;========================================= |
|||||||
;-- |
Вход: %A0 - делимое |
|
-- |
|
|||
;-- |
|
%A1 - делитель |
|
-- |
-- |
||
;-- |
Выход: |
%A0 - частное |
-- |
||||
;-- |
|
%A2 - остаток |
|
-- |
|||
;-- |
Исп-ся: |
%A3 - счётчик сдвигов |
|||||
;-- |
|
|
%A4 - знаковый регистр |
-- |
|||
;----------------------------------------- |
|||||||
DI_8S: |
%a4,%a0 |
;Делимое - в знаковый регистр |
|||||
|
mov |
||||||
|
xor |
%a4,%a1 |
;XOR знакового регистра с делителем |
||||
|
btth |
%a1,1000b ;Делитель <0? |
|
|
|||
|
jz |
.+1 |
;Нет |
|
|
|
|
|
neg |
%a1 |
;Смена знака делителя |
|
|||
|
btth |
%a0,1000b ;Делимое <0? |
|
|
|||
|
jz |
.+1 |
;Нет |
|
|
|
|
|
neg |
%a0 |
;Смена знака делимого |
|
|||
|
clr |
%a2 |
;Инициализация остатка |
|
|||
$1: |
movl |
%a3,9 |
;Число битов в байте + 1 |
||||
rlc |
%a0 |
;Циклич. сдвиг влево делимого и частного |
|||||
|
jc |
$4 |
;Если CF=1 |
|
|
|
|
|
dec |
%a3 |
;Пока не все |
|
|
||
|
jnz |
$2 |
; сдвиги |
|
|
|
|
$4: |
jmp |
$5 |
; |
|
|
|
|
dec |
%a3 |
;Пока не все |
|
|
|||
|
sst |
1 |
;CF=1 |
|
|
|
|
$5: |
jnz |
$2 |
; сдвиги |
|
|
|
|
btth |
%a4,1000b ;Знаковый регистр <0? |
||||||
|
jz |
.+1 |
;Нет |
|
|
|
|
|
neg |
%a0 |
;Смена знака знакового регистра |
||||
|
rts |
|
;Выход из подпрограммы |
|
68
$2: |
rlc |
%a2 |
;Циклич. сдвиг влево остатка |
|
|
sub |
%a2,%a1 |
;Вычитание из остатка делителя |
|
|
jnc |
$3 |
;Если разность >0 |
|
|
add |
%a2,%a1 |
;Иначе - восстанавливается остаток |
|
|
cst |
1 |
;CF=0 |
|
$3: |
jmp |
$1 |
;Следующий цикл |
|
sst |
1 |
;CF=1 |
|
|
|
jmp |
$1 |
;Следующий цикл |
;
;==========================================
;== |
Беззнаковое деление 16/16 |
== |
|
;========================================== |
|||
;-- |
Вход: %A0 - мл. байт делимого |
-- |
|
;-- |
%A1 - ст. байт делимого |
-- |
|
;-- |
%A2 - мл. байт делителя |
-- |
|
;-- |
%A3 - ст. байт делителя |
-- |
|
;-- |
Выход: |
%A0 - мл. байт частного -- |
|
;-- |
%A1 - ст. байт частного |
-- |
|
;-- |
%A4 - мл. байт остатка |
-- |
|
;-- |
%A5 - ст. байт остатка |
-- |
;-- |
Исп-ся: |
%A6 - счётчик сдвигов |
-- |
||
;------------------------------------------ |
|||||
DI_16U: |
clr |
%a4 |
;Инициализация мл. байта остатка |
||
|
xor |
%a5,%a5 |
;Инициализация ст. байта остатка и CF |
||
$1: |
movl |
%a6,17 |
;Число битов в байте + 1 |
||
rlc |
%a0 |
;Циклич. сдвиг влево мл.б. делимого и мл.б. частного |
|||
|
rlc |
%a1 |
;Циклич. сдвиг влево ст.б. делимого и ст.б. частного |
||
|
jc |
$4 |
;Если CF=1 |
|
|
|
dec |
%a6 |
;Пока не все |
|
|
|
jnz |
$2 |
; сдвиги |
|
|
$4: |
rts |
%a6 |
;Выход из подпрограммы |
|
|
dec |
;Пока не все |
|
|||
|
sst |
1 |
;CF=1 |
|
|
|
jnz |
$2 |
; сдвиги |
|
|
$2: |
rts |
%a4 |
;Выход из подпрограммы |
|
|
rlc |
;Циклич. сдвиг влево мл. байта остатка |
||||
|
rlc |
%a5 |
;Циклич. сдвиг влево ст. байта остатка |
||
|
sub |
%a4,%a2 |
;Вычитание из мл.б. остатка мл.б. делителя |
||
|
sbc |
%a5 |
;Вычитание из ст.б. остатка CF |
||
|
jc |
$5 |
;Если разность <0 |
|
|
|
sub |
%a5,%a3 |
;Вычитание из ст.б. остатка ст.б. делителя |
||
|
jnc |
$3 |
;Если разность >0 |
|
|
|
add |
%a4,%a2 |
;Иначе - |
|
|
|
adc |
%a5 |
; восстанавливается |
|
|
|
add |
%a5,%a3 |
; остаток |
|
|
|
cst |
1 |
;CF=0 |
|
|
$3: |
jmp |
$1 |
;Следующий цикл |
|
|
sst |
1 |
;CF=1 |
|
|
|
$5: |
jmp |
$1 |
;Следующий цикл |
|
|
add |
%a4,%a2 |
;Восстанавливается |
|
||
|
adc |
%a5 |
; остаток |
|
|
|
cst |
1 |
;CF=0 |
|
|
|
jmp |
$1 |
;Следующий цикл |
|
|
;---------------------------------- |
|
||||
;подпрограммы для сохранения бита C |
|
||||
RDEC: jc |
$1 |
|
|
|
|
|
dec |
%a6 |
|
|
|
$1: |
rts |
%a6 |
|
|
|
dec |
|
|
|
||
|
sst |
1 |
|
|
|
|
rts |
|
|
|
|
69
RBTTL: |
jc |
$1 |
|
|
bttl |
%a2,0001b |
|
$1: |
rts |
%a2,0001b |
|
bttl |
|||
|
sst |
1 |
|
|
rts |
|
|
RBTTH: |
jc |
$1 |
|
|
btth |
%a4,1000b |
|
$1: |
rts |
%a4,1000b |
|
btth |
|||
|
sst |
1 |
|
|
rts |
|
|
CBTTH1: |
jc |
.+2 |
|
|
btth |
%a1,1000b |
|
|
rts |
%a1,1000b |
|
|
btth |
||
|
sst |
1 |
|
|
rts |
|
|
|
.END |
|
;КОНЕЦ |
Приложение 5. Исходный текст программы опроса датчика ускорения
#define |
ta_dr |
%a4 |
;регистр управления таймера A |
#define |
ta_wr |
%a5 |
;рабочий регистр таймера |
#define |
pa_wr |
%a1 |
;рабочий регистр порта А |
#define |
pb_wr |
%a2 |
;рабочий регистр порта В |
#define |
pa_dr |
%b1 |
;конфигурационный регистр порта А |
#define |
pb_dr |
%b2 |
;конфигурационный регистр порта В |
#define |
datal |
%c0 |
;младший разряд данных |
#define |
datah |
%c1 |
;старший разряд данных |
#define |
new |
%c2 |
;флаг появления новых данных |
;--- |
область векторов прерываний процессора----------------------------- |
|||
|
jmp |
start |
;<0> Начальный пуск программы |
|
|
nop |
|
;<1> Сторожевой таймер(не используется) |
|
|
rst |
err_tmr |
;<2> выход за границу стека |
|
|
jmp |
;<3> Таймер A |
|
|
|
nop |
|
;<8> не используется |
|
|
nop |
intpa |
;<5> не используется |
|
|
jmp |
;<6> Порт A |
(сигнальные линии) |
|
|
nop |
|
;<7> Порт B |
(прерывания не используются) |
|
nop |
|
;<8> |
|
|
nop |
|
;<9> |
|
|
nop |
|
;<10> |
|
|
nop |
|
;<11> |
|
|
nop |
|
;<12> |
|
|
nop |
|
;<13> |
|
|
nop |
|
;<14> |
|
|
rst |
|
;<15>Завершение записи в ЭСППЗУ |
;#######################################################: ; Точка старта программы : ;#######################################################:
start: |
;инициализация портов и таймера |
jsr init |
70