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

📄 main.asm

📁 一个凌阳DA转换程序可以产生正弦波
💻 ASM
字号:
//*****************************************************************************/
// 描述: 实现正弦波、三角波、锯齿波三种波形输出,
//		  用3个按键实现不同波形的输出。
//*****************************************************************************/
.INCLUDE hardware.inc;
.INCLUDE key.inc;					    
.DEFINE     p_system_clock      0x7013;
.DEFINE		P_WatchDog_Clear	0x7012; 
.RAM
.VAR I_Key;						        
.iram
.var R_SUM=0x0001,s=0;
//=========================================================================/
//正弦数据表
//=========================================================================/
.data 
TBsin: 
.dw 0x8000,0xb5fb,0xb8f8,0x8000,0x4c47, 0x4680;///

.CODE
//============================================================================= 
// 函数: main()
// 描述:主函数
//=============================================================================
 
.PUBLIC _main;						
_main: 	
	    r2=0x0088;
       [p_system_clock]=r2;             //设置工作频率	
	    R2=0x0000;
    	[P_DAC_Ctrl]=R2; 
		CALL L_User_Init_IO;		    //初始化IO口
		CALL F_Key_Scan_Initial;	    //键盘初始化
L_MainLoop:
		CALL F_Key_Scan_ServiceLoop;    //扫描键盘
        CALL F_Key_DebounceCnt_Down;    //按键去抖
        R4=0x0001;                      //清看门狗
	   	[P_Watchdog_Clear]=R4;	
   		CALL F_SP_GetCh;			    //取键值
	    CMP R1, 0x0008;					
	    JE 	L_MainLoop;	
	    R2=0x0000				
	 	[I_Key] = R1;			        //保存键值
		cmp R1, 0x0001;	                
		je L_Wave1;                     //键1按下,输出锯齿波
		R1=[I_Key]; 
		cmp R1, 0x0002;
		je L_Wave2;                    //键2按下,输出三角波
		R1=[I_Key];
		cmp R1, 0x0004;
		je L_sina;                     //键3按下,输出正弦波
		R4=0x0001;                      //清看门狗
	   	[P_Watchdog_Clear]=R4;	
	   	JMP	L_MainLoop;
L_User_Init_IO:
		R1 = 0x0000;			        //设A口为带下拉电阻的输入
        [P_IOA_Dir] = R1;			
        [P_IOA_Attrib] = R1;
        [P_IOA_Data] = R1;
		RETF;
//==========================================================================
//锯齿波
//==========================================================================		
L_Wave1:   
	R3=0x0040		      //D/A转换为10位,即B15~B6 
    [P_DAC1]=R2;  
    [P_DAC2]=R2;
    CALL L_Delay		  //调用延时
    R2+=R3
    R1 = [P_IOA_Data]
    cmp R1, 0x0001       
    jbe L_Wave1        
    jmp L_MainLoop;       //有其它键按下,则返回键盘扫描子程序
L_Delay:				  //延时
    R1=0  
L_DelayLoop:
 	R4 = 0x0001;                      
	[P_WatchDog_Clear] = R4;	   		
    R1+=2048
    JNZ L_DelayLoop    
    RETF
//==========================================================================  
//三角波
//==========================================================================  
L_Wave2:
   
	R3=0x0100		      //D/A转换为10位,即B15~B6 改变它的频率
    [P_DAC1]=R2;  
    [P_DAC2]=R2;
    CALL L_Delay		  //调用延时
    R2+=R3;
    cmp R2, 0xff00;       //判断是否达到峰值, 还可以改变他的幅值
    je L_Sub;
    R1 = [P_IOA_Data]
    R1|= 0x0002
    cmp R1, 0x0002
    je L_Wave2        
    GOTO L_MainLoop       //有其它键按下,则返回键盘扫描子程序
L_Sub:
    [P_DAC1]=R2;  
    [P_DAC2]=R2;
    CALL L_Delay
    R2-=R3;
    cmp R2, 0x0000;		  //判断是否为零
    jne  L_Sub;
    jmp L_Wave2;
//==========================================================================  
//正弦波
//==========================================================================     
L_sina:  
 	//r2=0x8000;
    //[P_DAC1]=r2  
   // [P_DAC2]=r2 
    bp=TBsin;
    r4 = 0x0000;
    //[P_DAC1]=r2 
    //[P_DAC2]=r2 
    //r3=0
    //[R_SUM]=r3
    //r2=0x4000
    //[P_DAC1]=r2 
    //[P_DAC2]=r2   
 L_wait: 
    //r2=0x0001
    //[P_DAC1]=r2
    //[P_DAC2]=r2     
     r3=bp+[s];            //取相应地址
     r2=[r3]; 
     r4=r4+1;
     [s]=r4;                //地址中数据送r2
     //r3=[R_SUM]
     //r3=r3+[s]
     //r3=r3+1                  //地址指针加1
     //[R_SUM]=[R_SUM]+1;
     [P_DAC1]=r2
     //[P_DAC2]=r2    
     //r4=50
     cmp r4,5
     jb L_wait 
     R4 = 0x0001;                      
	 [P_WatchDog_Clear] = R4;  //清看门狗
     //sr&=0xffdf             
    R1 = [P_IOA_Data]
    R1|= 0x0004
    cmp R1, 0x0004
    je L_next
    goto L_MainLoop         //有其它键按下,则返回键盘扫描子程序
L_next:
    r2=0x0040
    [P_DAC1]=r2
    [P_DAC2]=r2   
    goto L_sina
 
//*****************************************************************************/
//  main.asm 结束
//*****************************************************************************/

⌨️ 快捷键说明

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