📄 divide.eve
字号:
// 僒儞僾儖僾儘僌儔儉 Divide.eve
//
// 妱嶼婍(DIV) 傪梡偄偨僾儘僌儔儉偱偡丅
// CNT0 傪 16 僒儞僾儖枅偵僀儞僋儕儊儞僩偟丄妱嶼婍偵偰 0x0001/CNT0
// 傪寁嶼偟偨寢壥傪 SDI0 偺 Lch 偵弌椡偟傑偡丅
// 妱嶼婍偺暘曣 (DIVB) 偼惓丄偐偮暘巕 (DIVA) 傛傝戝偒偔側偔偰偼偄偗
// 側偄偺偱丄CNT0 偼 0x0002 偐傜僀儞僋儕儊儞僩偝偣丄0x000A 偺師偼
// 0x0002 偵栠傞傛偆僾儘僌儔儈儞僌偝傟偰偄傑偡丅偮傑傝丄弌椡偼
// 0x0001/0x0002
// 0x0001/0x0003
// 0x0001/0x0004
// :
// 0x0001/0x0009
// 0x0001/0x000A
// 0x0001/0x0002
// 偲側傝傑偡丅
//
// 僆僔儘僗僐乕僾偱 SDO0 Lch 弌椡偺攇宍傪娤應偡傞偲丄
// y=1/x (2=<x=<10)
// 偺孞傝曉偟攇宍傪妋擣偱偒傑偡丅
//
// 偙偺僾儘僌儔儉傪傾僙儞僽儔 EveAsm.exe 偱傾僙儞僽儖偡傞偙偲偵傛傝
// Divide.datEve 偑嶌惉偝傟傑偡丅
//
// -----------------------------------------------------------------
//
// Sample program Divide.eve
//
// This is the program using Divider DIV.
// After incrementing CNT0 by every 16 sample and caluculating 0x0001/CNT0
// in DIV, the result is output from Lch.
// Because the denominator DIVB should be bigger than zero and the numerator
// DIVA, CNT0 is programmed to be incremented from 0x0002 and returned to
// 0x0002 after 0x000A. So the output becomes as below.
// 0x0001/0x0002
// 0x0001/0x0003
// 0x0001/0x0004
// :
// 0x0001/0x0009
// 0x0001/0x000A
// 0x0001/0x0002
//
// When seeing the SDO0 Lch output by oscilloscope, the repeated wave of
// y=1/x (2=<x=<10)
// is confirmed.
//
// Divide.datEve is assembled from this program by executing EveAsm.exe.
// -----------------------------------------------------------------
// -----------------------------------------------------------------
// -----------------------------------------------------------------
#define ERAM_TYPE NO_ERAM //奜晅 RAM 側偟
//============================================================
// EVE Program
// Divide
//============================================================
// COEF define
CDat P0.5 (-1, 0x4000); // +0.5
CDat M0.5 (-1, 0xC000); // -0.5
// Inner DATA define
DAdr Dtmp (0); // temporary 梡
//------------------------------------------------------------
// 幚峴僐儅儞僪僽儘僢僋
// | ERAM | BUS | MAC/JMP
//------------------------------------------------------------
; Dtmp = CNT1; ACC0 = Dtmp * P0.5; // CNT1 偺晞崋 check丅
CNT1--; ; ; // CNT1 傪 -1丅
; REG0 = 0x000A; ; // REG0=10 傪 set 偟偰偍偔丅
; ; ;
; ; ;
; ; if (ACC>=0) jmp end; // CNT1>=0 側傜偦偺傑傑 end 傊丅
; CNT1 = 0x000F; ; // CNT1<0 側傜 CNT1=15 偲 set 偟偰 CAL 傊丅
//------------------------------------------------------------
CAL: ; Dtmp = REG0; ACC0 = Dtmp * P0.5; // 10-CNT0 偺晞崋 check丅
; Dtmp = CNT0; ACC0+= Dtmp * M0.5; //
; ; ;
; ; ;
; ; ;
; ; ;
; ; if (ACC>=0) jmp divide; // 10>=CNT0 側傜偦偺傑傑 divide 傊丅
; CNT0 = 0x0002; ; // 10<CNT0 偺偲偒偼 CNT=0x0002 偲偟偰 divide 傊丅
//------------------------------------------------------------
divide: ; DIVB = CNT0; ; // DIVB = CNT0丅
; DIVA = 0x0001; ; // DIVA = 0x0001
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -