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

📄 ad5664_driver.asm

📁 凌阳61源码
💻 ASM
字号:
//============================================================
// 文件名称: ad5664_driver.asm
// 功能描述: ad5664底层驱动程序
// 维护记录: 2006-9-17 v2.0.0  Edit by 马占平 
//============================================================
.DEFINE  P_IOA_Data     0x7000
.DEFINE  P_IOA_Buffer   0x7001
.DEFINE  P_IOA_Dir      0x7002
.DEFINE  P_IOA_Attrib   0x7003
.DEFINE  P_IOA_Latch    0x7004

.DEFINE  P_IOB_Data     0x7005          
.DEFINE  P_IOB_Buffer   0x7006
.DEFINE  P_IOB_Dir      0x7007
.DEFINE  P_IOB_Attrib   0x7008

.DEFINE P_Watchdog_Clear	0x7012

.DEFINE Port_Data       P_IOB_Data        //定义用于与ad5664接口的端口是哪一组,便于修改端口
.DEFINE Port_Buffer     P_IOB_Buffer
.DEFINE Port_Dir        P_IOB_Dir
.DEFINE Port_Attrib     P_IOB_Attrib


.define  DIN            0x8000           //定义各个与ad5664上的控制、数据端口连接的具体的SPCE061A口位
.define  SCLK           0x4000
.define  SYNC           0x2000
//=============================================================
.ram
.VAR msb,lsb
.CODE
//========================================================
// 汇编格式: _ad5664_initial
// C格式:  void ad5664_initial(void)
// 实现功能: 初始化端口
// 入口参数: 无
// 出口参数: 无
// 破坏寄存器:r1
//========================================================
.PUBLIC _ad5664_initial
_ad5664_initial:
			  
              push r1 to [sp]
              r1 = [Port_Dir]                     //初始化IOB口为同相低电平输出口
              r1 = r1|(DIN+SCLK+SYNC)
              [Port_Dir] = r1
              
              r1 = [Port_Attrib]
              r1 = r1|(DIN+SCLK+SYNC)
              [Port_Attrib] = r1
              
              r1 = [Port_Buffer]
              r1 = r1&~(DIN+SCLK+SYNC)
              [Port_Buffer] = r1
              pop  r1 from [sp]
              
              retf

//========================================================
// 汇编格式: _ad5664_whrite
// C格式:  unsigned int ad5664_whrite(cammand,data)
// 实现功能: 向D/A写指令和数据
// 入口参数: cammand,data
// 出口参数: 无
// 破坏寄存器:r2,r3,r4,r5
//========================================================

.PUBLIC _ad5664_whrite
_ad5664_whrite:
		push r3,r5 to [sp]
		bp = sp
		r3 = [bp+6]                         //高8位为控制字
		[msb] = r3
        r3 = [bp+7]                         //16位是数据
        [lsb] = r3
   
loop:   r4 = [Port_Buffer]           //SYNC to high
        r4 = r4|SYNC
        [Port_Buffer] = r4
        
        r4 = 0x00ff
loop1:  r4 = r4-1
        jnz loop1
        
        r4 = [Port_Buffer]           //SYNC to LOW
        r4 = r4&(~SYNC)
        [Port_Buffer] = r4
        
        r5 = 0x0008                 //8位控制字计数
        r3 = [msb]                  //数据暂存
 
loop2:  test r3,DIN
        jz loop4
        jmp loop5
        
loop4:  r4 = [Port_Buffer]          //数据位为0的处理程序
		r4 = r4&(~DIN)
		[Port_Buffer] = r4
		jmp maichong
		
loop5:  r4 = [Port_Buffer]          //数据位为1的处理程序
        r4 = r4|DIN
        [Port_Buffer] = r4
        jmp maichong
		
		
maichong:  
		R4 = [Port_Buffer]
        R4 = R4|SCLK
        [Port_Buffer] = R4         //SCLK TO HIGH
		
		nop
		nop
		nop
        
        r4 = [Port_Buffer]
		r4 = r4&(~SCLK)
		[Port_Buffer] = r4          //SCLK TO LOW
        
        r3 = r3 lsl 1
        r5 = r5-1
        jnz loop2
        
        r4 = 0x0001
	    [P_Watchdog_Clear] = r4         //清看门狗
        
        r5 = 0x0010
        r3 = [lsb]                  //数据暂存16位数据
loop3:  test r3,DIN
        jz loop6
        jmp loop7
        
loop6:  r4 = [Port_Buffer]          //数据位为0的处理程序
		r4 = r4&(~DIN)
		[Port_Buffer] = r4
		jmp maichong1
		
loop7:  r4 = [Port_Buffer]          //数据位为1的处理程序
        r4 = r4|DIN
        [Port_Buffer] = r4
        jmp maichong1
	
		
maichong1:		
		R4 = [Port_Buffer]
        R4 = R4|SCLK
        [Port_Buffer] = R4         //SCLK TO HIGH
		
        nop
        nop
        nop
        
       	r4 = [Port_Buffer]
		r4 = r4&(~SCLK)
		[Port_Buffer] = r4          //SCLK TO LOW
        
        r3 = r3 lsl 1
        r5 = r5-1
        jnz loop3 
               
        //r3 = [lsb]
        //r3 = r3+1                 
        //[lsb] = r3                //加上一个步进值
        
        
        r4 = 0x0001
	    [P_Watchdog_Clear] = r4         //清看门狗
	    //goto loop
	    
        
        pop r3,r5 from [sp]
        retf


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -