📄 shukong.asm
字号:
.include hardware.inc
.define ldacl 0x0010 //IOA4,LDAC, IOA5WR, IOA6CSLSB, IOA7CSMSB
.define ladc0 0xffef
.define wr1 0x0020
.define wr0 0xffdf
.define cslsb1 0x0040
.define cslsb0 0xffdf
.define csmsb1 0x0080
.define csmsb0 0xff7f
.external _zhuanhuan;
.external _zhuanhuan1;
.external _PIDinit;
.external _PIDCalc
.external _jscl;
.external _qianwei;
.external _baiwei;
.external _shiwei;
.external _gewei;
.external _fenwei;
.external _Lastouti;
.external _jsdl;
.ram
.var lxp_Delay_t;
.var Key;
.var gbw_7; //光标位
.var gbw_6;
.var gbw_5;
.var gbw_4;
.var gbw_3;
.var led_7; //
.var led_6;
.var led_5;
.var led_4;
.var led_3;
.var stop; //停止位
.var seti; //设定电流
.var ini; //实际电流
.var inu; //A/D转换结果
.var outu;
.var outi
.var ddflag; //0:显示实际电流;1:显示设定电流;
.code
.public _main
_main:
init:
r1 = 0x0200;
[P_INT_Ctrl] = r1;
irq off;
r1 = 0xb000;
[P_IOA_Dir] = r1;
[P_IOA_Attrib] = r1;
[P_IOA_Data] = r1;
r1 = 0xfff7;
[P_IOB_Dir] = r1;
[P_IOB_Attrib] = r1;
[P_IOB_Data] = r1;
r1 = 0;
[ddflag] = r1;
r1 = 3;
push r1 to [sp];
call _lxp_Init; //调用ZLG7289 的初始化函数
pop r1 from [sp];
r1 = 4;
[gbw_7] = r1; //光标位
r1 = 5;
[gbw_6] = r1;
r1 = 6;
[gbw_5] = r1;
r1 = 7;
[gbw_4] = r1;
r1 = 0;
[gbw_3] = r1;
r1 = 0xff;
[stop] = r1;
call _PIDinit;
keytest:
r1 = 0xa4;
push r1 to [sp];
call _lxp_cmd; //复位
pop r1 from [sp];
irq on; //开键盘中断
led000:
r3 = 8;
ledloop: //显示00000000;
r1 = 0x0000;
push r1 to [sp];
r1 = 0x0000;
push r1 to [sp];
r1 = r3;
r1 += 1;
push r1 to [sp];
r1 = 0x0000;
push r1 to [sp];
call _lxp_Download;
pop r1 from [sp];
pop r1 from [sp];
pop r1 from [sp];
pop r1 from [sp];
r3 -= 1;
jnz ledloop;
waitkey:
r1 = 0x0001; //清看门狗
[P_Watchdog_Clear]=r1;
r1 = [Key];
r2 = 3; //如果Key值为3,跳设定;
cmp r1,r2;
je setled0;
jmp waitkey;
setled0:
r1 = 0xa4;
push r1 to [sp];
call _lxp_cmd; //7289复位
pop r1 from [sp];
r1 = 0xff;
[Key] = r1; //健值复位
setled:
r1 = 0;
[led_7] = r1; //初始化设定值
r1 = 0;
[led_6] = r1;
r1 = 0;
[led_5] = r1;
r1 = 0;
[led_4] = r1;
r1 = 0;
[led_3] = r1;
r3 = gbw_7; //光标位
r4 = led_7;
setled1:
r1 = 0xff;
[Key] = r1; //健值复位
r1 = 0x0001; //清看门狗
[P_Watchdog_Clear]=r1;
r1 = 0x1000;
push r1 to [sp]; //延时
call _Delay;
pop r1 from [sp];
r1 = [r3]; //光标亮
r1 = r1 lsl 3;
r1 += 3;
push r1 to [sp];
r2 = 0x00e0;
push r2 to [sp];
call _lxp_cmd_dat;
pop r2 from [sp];
pop r1 from [sp];
r1 = 0x4000;
push r1 to [sp]; //延时
call _Delay;
pop r1 from [sp];
r1 = [r3]; //光标暗
r1 = r1 lsl 3;
r1 += 3;
push r1 to [sp];
r2 = 0x00c0;
push r2 to [sp];
call _lxp_cmd_dat;
pop r2 from [sp];
pop r1 from [sp]; //光标闪动:
r1 = [Key];
r2 = 6;
cmp r1,r2;
je outp;
jmp nooutp;
outp:
goto output;
nooutp:
r2 = 5;
cmp r1,r2;
je clear;
jmp noclear;
clear:
goto setled0;
noclear:
r1 = 0x0001; //清看门狗
[P_Watchdog_Clear]=r1;
r1 = [Key];
r2 = 30;
cmp r1,r2;
je Key_0;
r2 = 27;
cmp r1,r2;
je Key_1;
r2 = 19;
cmp r1,r2;
je Key_2;
r2 = 11;
cmp r1,r2;
je Key_3;
r2 = 28;
cmp r1,r2;
je Key_4;
r2 = 20;
cmp r1,r2;
je Key_5;
r2 = 12;
cmp r1,r2;
je Key_6;
r2 = 29;
cmp r1,r2;
je Key_7;
r2 = 21;
cmp r1,r2;
je Key_8;
r2 = 13;
cmp r1,r2;
je Key_9;
goto setled1;
Key_0:
r1 = 0;
[r4] = r1;
jmp sdloop;
Key_1:
r1 = 1;
[r4] = r1;
jmp sdloop;
Key_2:
r1 = 2;
[r4] = r1;
jmp sdloop;
Key_3:
r1 = 3;
[r4] = r1;
jmp sdloop;
Key_4:
r1 = 4;
[r4] = r1;
jmp sdloop;
Key_5:
r1 = 5;
[r4] = r1;
jmp sdloop;
Key_6:
r1 = 6;
[r4] = r1;
jmp sdloop;
Key_7:
r1 = 7;
[r4] = r1;
jmp sdloop;
Key_8:
r1 = 8;
[r4] = r1;
jmp sdloop;
Key_9:
r1 = 9;
[r4] = r1;
sdloop:
r2 = [r3];
r5 = 4;
cmp r2,r5;
je fangzhi;
jmp zhengchang;
fangzhi:
r2 = 2;
cmp r1,r2;
ja guodu;
jmp zhengchang;
guodu:
goto setled1;
zhengchang:
r1 = 0xff;
[Key] = r1; //健值复位
r1 = [r4];
push r1 to [sp];
r1 = [r3];
r2 = 7;
cmp r1,r2;
je dpliang;
jmp buliang;
dpliang:
r1 = 1;
jmp liang;
buliang:
r1 = 0x0000;
liang:
push r1 to [sp];
r1 = [r3];
push r1 to [sp];
r1 = 0x0000;
push r1 to [sp];
call _lxp_Download;
pop r1 from [sp];
pop r1 from [sp];
pop r1 from [sp];
pop r1 from [sp];
r3 += 1;
r4 += 1;
r2 = [r4];
r1 = 0xff;
cmp r2,r1;
je setcom;
goto setled1;
setcom:
r1 = [Key];
r2 = 6;
cmp r1,r2;
je output1;
r2 = 5;
cmp r1,r2;
je clearcom;
r1 = 0x0001; //清看门狗
[P_Watchdog_Clear]=r1;
jmp setcom;
clearcom:
goto setled0;
output1:
r1 = [led_3];
push r1 to [sp];
r1 = [led_4];
push r1 to [sp];
r1 = [led_5];
push r1 to [sp];
r1 = [led_6];
push r1 to [sp];
r1 = [led_7];
push r1 to [sp];
call _zhuanhuan;
sp = sp + 5;
[seti] = r1;
r1 = 0xff;
[Key] = r1; //健值复位
output:
r1 = 0x0010;
push r1 to [sp]; //延时
call _Delay;
pop r1 from [sp];
r1 = 0x0001; //清看门狗
[P_Watchdog_Clear]=r1;
active:
r1 = [Key];
r2 = 4;
cmp r1,r2;
je cdisplay;
r2 = 22;
cmp r1,r2;
je setidownorup;
r2 = 14;
cmp r1,r2;
je setidownorup;
r2 = 3;
cmp r1,r2;
je setledfo;
jmp nodownandup;
setledfo:
goto setled0;
cdisplay:
r1 = 0xff;
[Key] = r1; //健值复位
r1 = [ddflag];
jz dpini;
dpset:
r1 = 0;
[ddflag] = r1;
jmp nodownandup;
dpini:
r1 = 1;
[ddflag] = r1;
jmp nodownandup
setidownorup:
r1 = [ddflag];
jz nodownandup;
r1 = [Key];
r2 = 22;
cmp r1,r2;
je setidown;
r2 = 14;
cmp r1,r2;
je setiup;
jmp nodownandup;
setidown:
r1 = 0xff;
[Key] = r1; //健值复位
r1 = [seti];
r1 -= 100;
[seti] = r1;
jmp nodownandup;
setiup:
r1 = 0xff;
[Key] = r1; //健值复位
r1 = [seti];
r1 += 100;
[seti] = r1;
nodownandup:
r1 = [ddflag];
jnz tmd;
jmp nmd;
tmd:
goto displayon;
nmd:
r1 = 0x0001; //清看门狗
[P_Watchdog_Clear]=r1;
call _atod;
r1 = [inu];
push r1 to [sp];
call _jsdl;
sp = sp + 1;
[ini] = r1;
r1 = [seti];
r2 = [ini];
cmp r1,r2;
ja jiadadianya;
cmp r2,r1;
ja jianxiaodianya;
cmp r2,r1;
je henhao;
jiadadianya:
r1 -= r2
r1 = r1 lsr 1;
r2 = [outi];
r2 += r1;
[outi] = r2;
jmp henhao;
jianxiaodianya:
r2 -= r1;
r2 = r2 lsr 1;
r1 = [outi];
r1 -= r2;
[outi] = r1;
henhao:
r1 = 0xffff;
push r1 to [sp]; //延时
call _Delay;
pop r1 from [sp];
r1 = [outi];
push r1 to [sp];
call _jscl;
sp = sp + 1;
[outu] = r1;
call _dtoa;
displayon:
r1 = [ddflag];
jz dpini1;
r1 = [seti];
push r1 to [sp];
call _zhuanhuan1;
sp = sp + 1;
jmp dis;
dpini1:
r1 = [ini];
push r1 to [sp];
call _zhuanhuan1;
sp = sp + 1;
dis:
r1 = [_fenwei];
push r1 to [sp];
r1 = [_gewei];
push r1 to [sp];
r1 = [_shiwei];
push r1 to [sp];
r1 = [_baiwei];
push r1 to [sp];
r1 = [_qianwei];
push r1 to [sp];
call _display;
pop r1 from [sp];
pop r1 from [sp];
pop r1 from [sp];
pop r1 from [sp];
pop r1 from [sp];
goto output;
.public _atod
_atod: .proc
push r1,r5 to [sp];
r1 = [P_IOA_Data];
r1 &= 0x7fff;
[P_IOA_Data] = r1;
status:
r1 = 0x0001; //清看门狗
[P_Watchdog_Clear]=r1;
r1 = [P_IOA_Data];
r2 = 0x4000;
test r1,r2;
jnz status;
r1 = [P_IOA_Data];
r1 &= 0x0fff;
[inu] = r1;
r1 = [P_IOA_Data];
r1 |= 0x8000;
[P_IOA_Data] = r1;
pop r1,r5 from [sp];
retf;
.endp
.public _dtoa
_dtoa: .proc
push r1,r5 to [sp];
r1 = [P_IOB_Data];
r1 &= 0xfeff;
[P_IOB_Data] = r1;
r1 = [outu];
r1 &= 0x0fff;
r1 |= 0xc000;
call _lxp_ShortDelay;
push r1 to [sp];
call _lxp_SPI_Write16;
pop r1 from [sp];
call _lxp_ShortDelay;
r1 = [P_IOB_Data];
r1 |= 0x0100;
[P_IOB_Data] = r1;
pop r1,r5 from [sp];
retf;
.endp
//函数:_lxp_SPI_Write16()
//功能:向SPI 总线写入1 个字节的数据
//参数:dat:要写入的数据
.public _lxp_SPI_Write16
_lxp_SPI_Write16: .proc
push r1,r5 to [sp];
irq off;
r1 = [P_IOB_Dir];
r1 |= 0x0700;
r1 &= 0xffff;
[P_IOB_Dir] = r1;
[P_IOB_Attrib] = r1;
r1 = [P_IOB_Data];
r1 |= 0x0400;
[P_IOB_Data] = r1;
bp = sp + 8; //bp指向参数
r4 = [bp]; //参数放入r1
r3 = 16; //向SPI 总线写入八位数二进制数
loop2:
r1 = [P_IOB_Data];
r1 |= 0x0200;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -