⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 shukong.asm

📁 数控电流源61控制程序 包含zlg7289的61控制程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
.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 + -