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

📄 test19.c

📁 2K信号发生器的C程序
💻 C
字号:
#pragma CODE_SECTION(vect,"vect")

#include "math.h"

unsigned int   *pmem=0;

#define PMST   *(pmem+0x001D)
#define SWCR   *(pmem+0x002B)
#define SWWSR  *(pmem+0x0028)
#define BSCR   *(pmem+0x0029)
#define READS  *(pmem+0x4000)
#define IMR    *(pmem+0x0000)
#define IFR    *(pmem+0x0001)
#define TIM0   *(pmem+0x0024)  
#define PRD0   *(pmem+0x0025)  
#define TCR0   *(pmem+0x0026)  

#define PI 3.1415926

int i,A,k,T,BIAN;
int N,j;
int time1_over;
float fo,fs;                     
unsigned int x[4000];

void wave0(void)                       /*正弦波*/
{
   A=1000;
   fo=1000; 
   N=1000;
   fs=N*fo;
   
   for(i=0;i<N;i++)
      x[i]=(int)(A*sin(2*PI*i*fo/fs)+A);    
}

void wave1(void)                       /*余弦波*/
{
   A=1000;
   fo=10;
   N=1000;
   fs=N*fo;            
   
   for(i=0;i<N;i++)
      x[i]=(int)(A*cos(2*PI*fo*i/fs)+A);   
}

void wave2(void)                      /*三角波*/
{
   k=1;
   T=1000;
   N=1000; 
   fs=(float)N/T;
   
   for(i=0;i<N/4;i++)
      x[i]=(int)(k*i*1.0/fs+k*T/4.0);
   
   for(i=N/4;i<N/2;i++)
      x[i]=(int)(k*(T/2.0-i*1.0/fs)+k*T/4.0);
  
   for(i=N/2;i<3*N/4;i++)
      x[i]=(int)(k*(T/2.0-i*1.0/fs)+k*T/4.0);      
   
   for(i=3*N/4;i<N;i++)
      x[i]=(int)(k*(i*1.0/fs-T)+k*T/4.0);    
}

void wave3(void)                       /*方波*/
{
   A=1000;
   T=1000;
   N=T;
   fs=N/T;
   
   for(i=0;i<N;i++)
   {
      if((i/fs)<(T/2.0))
         x[i]=A;
      else 
	     x[i]=0;     
   }
}

void wave4(void)                          /*锯齿波*/                       
{
   k=1;
   T=1000;
   N=T;
   fs=N/T;
   
   for(i=0;i<N;i++)
      x[i]=(int)k*i/fs;     
}

void wave5(void)
{
   k=1;
   T=1000;
   N=T;
   fs=N/T;
   
   for(i=0;i<N;i++)
      x[i]=(int)(-k*i/fs); 
}

void cpu_init()
{
   PMST=0x3fa0;
   SWWSR=0x0fff;
   SWCR=0x0000;
   BSCR=0x0002;
   IMR=0;
   IFR=IFR;
} 

void set_t0()    
{
   asm(" ssbx intm");
   TCR0=0x0a18;
   PRD0=0x001F;       
   IMR=IMR|0x0008;
   IFR=IFR;
   asm(" rsbx intm");
}

main()                       /*正弦波*/
{
   cpu_init();
   set_t0();
   time1_over=0;
   READS=0;
   for(i=0;i<4000;i++)
      x[i]=0;
      
aaaa:     BIAN=(READS&0xF000)>>13;
     
     switch(0)
     {
       case 0: wave0(); break;
       case 1: wave1(); break;
       case 2: wave2(); break;
       case 3: wave3(); break;
       case 4: wave4(); break; 
       case 5: wave5(); break;
     } 
  
   for(;;)
   {
     for(k=0;k<N;k++)
     {   
       TCR0=0x0a28;
       PRD0=0x001F;          
       while(time1_over==0);
       time1_over=0;   
       READS=x[k];
     }
     j=(READS&0xF000)>>13;
     if(j!=BIAN) goto aaaa;
   }         
}

interrupt void tint0()        
{  
  time1_over=1;
} 

void vect()
{
   asm(" .ref _c_int00");
   asm(" .ref _tint0");

   asm(" b _c_int00");  /* reset */
   asm(" nop");
   asm(" nop");
   asm(" rete");        /* nmi  */
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");       /* int0 */
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");       /* int1 */
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");       /* int2 */
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" b _tint0");   /* tint0 */
   asm(" nop");
   asm(" nop");
   asm(" rete");      /* brint0 */
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");      /* bxint0 */
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");      /* dmac0 */
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");       /* tint1 */
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");       /* int3 */
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");       /* hpint */
   asm(" nop");
   asm(" nop");
   asm(" rete");       /* brint1 */
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");       /* bxint1 */
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");       /* dmac4 */
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");     /* dmac5 */
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" nop");
}

⌨️ 快捷键说明

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