 
        
        Интерфейс 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
