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

📄 serial.c

📁 这是一个我自己编写的TMS2407的SCIRS232C的程序
💻 C
字号:
/*****************************************************************
TMS2407SCI串口程序
在串口调试助手2.2中输入第一个字符是a后面14个是数据,DSP给电脑返回这15个数据
输入第一个字符是除了a以外的字符,且接收满了15个数据后,DSP给电脑发送Hello PC!,Over!
RS232串口初始化要和电脑的一致
那么还有比较重要的是你用INT1(高优先级中断)还是INT5(低优先级中断)
网上很多232的2407串口程序都不能用
刘和平老师的结构原理及应用我是没看懂(因为是汇编)
c语言开发应用是两个DSP的通讯没法调通。
这里希望大家能够更加快点入手
作者:章明     QQ:158585463
*******************************************************************/

#include "2407c.h"                    
void wait(int nWait);
unsigned char cString[20]={ "Hello PC!,Over!" },cReceive,cBuffer[17],cAnswer[16]={"Oh,you say!"};
int bReceive=0;
unsigned char cReceiveString[20];
int receivestringLen=0; /*定义接收到的字符串长度,我们人为在接收字符串子程序中判断他的长度。过了10个字符他就置0*/
void init_SCIcomm(void)
{  
    unsigned char baud,form; 
    form = 0x00;       /*固定为9600bps,8位字符,1停止位,无校验*/
   	baud = 0x00;
	asm(" setc INTM");
	asm(" clrc SXM");
	asm(" clrc OVM");
	*WDCR=0x6f;
	*WDKEY=0x5555;
	*WDKEY=0xaaaa;    
	*IFR=0xFFFF;        /*清除中断标志位*/ 
	
	*SCSR1=0x81FE;	    /* 40MHz        */
	switch(form)
	{
	    case 0x00 : { *SCICCR=0x07;	 break; }  /*8位字符,1停止位,无校验*/
	    case 0x01 : { *SCICCR=0x67;  break; }  /*8位字符,1停止位,even parity*/
	    case 0x02 : { *SCICCR=0x27;  break; }  /*8位字符,1停止位,odd parity*/
	    default   : { *SCICCR=0x07;  break; }  /*8位字符,1停止位,无校验*/
	}
	*SCICTL1=0x13;	    /* 使能发送和接收 */
	*SCICTL2=0x03;	    /* 使能接收和发送中断 */
	switch(baud)
	{
        case 0x00 : { *SCIHBAUD=0x02; *SCILBAUD=0x07; break; }  /*波特率=9600bps,40MHz;0x0208=30*10^6/(9600*8)-1*/	
        case 0x01 : { *SCIHBAUD=0x01; *SCILBAUD=0x04; break; }  /*19200bps*/
        case 0x02 : { *SCIHBAUD=0x00; *SCILBAUD=0x81; break; }  /*38400bps*/
	    case 0x03 : { *SCIHBAUD=0x00; *SCILBAUD=0x57; break; }  /*57600bps*/
	    case 0x04 : { *SCIHBAUD=0x00; *SCILBAUD=0x2a; break; }  /*115200bps*/
	    default   : { *SCIHBAUD=0x02; *SCILBAUD=0x08; break; }  /*9600bps*/
	}
	*SCICTL1=0x33;	    /* 使能发送和接收,复位SCI */
	*SCIPRI=0x00;
	*MCRA=0x0003;  	    /* use SCITXD,SCIRXD */
	*PADATDIR=0x0100;
	*IMR=0x0001;
	asm(" CLRC INTM ");
}

unsigned char serialReceive(void)   /*接收一个ASC||字符,也就是一个字节的数据,也是一个8bit的数据*/
{
    unsigned char d;
    d = *SCIRXBUF;
    while((*SCIRXST & 0x40)!=0);
    return d;
}

void serialOutput(unsigned char c)    /*发送一个ASC||字符,也就是一个字节的数据,也是一个8bit的数据*/
{  
	*SCITXBUF = c;
	while((*SCICTL2 & 0x80) == 0);   
}

void StringserialOutput( unsigned char *cString1,int i )  /*发送一个ASC||字符串,这里规定每次接收的长度不能超过10个字符,也就是10个字节的数据。80bit的数据*/
{
   int j;
   for(  j=0; j<i; j++)
   {
      serialOutput(*(cString1+j));
      wait(1024);
   }
}
 
main()
{
    init_SCIcomm();        //初始化SCI串口
	while ( 1 )
	{
		if ( bReceive==0 )
		{

		}
		else if(bReceive==1)
		{
//         serialOutput(0x61);
//         serialOutput(0x62);
//         serialOutput(0x63);
         StringserialOutput(cReceiveString,15);
       /*  receivestringLen=0;  //发送完了让长度为0  */
         bReceive=0;     //取数标志清0 
		}
		else  
		{
//		  serialOutput(0x79);
		  StringserialOutput( cString,16);
//		  wait(1024);
		  bReceive=0;
		}

	}
}

void wait(int nWait)
{
	int i,j,k=0;
	for ( i=0;i<nWait;i++ )
		for ( j=0;j<64;j++ )
			k++;
}

void interrupt GISR1()
{
	unsigned char rec;	
	switch(*PIVR)
   	{   	   		
   		case 0x0006: 
      		{ 
//			  rec = *SCIRXBUF;
              rec= serialReceive();
              cReceiveString[receivestringLen++]=rec;
			  if(cReceiveString[0]==0x61 && receivestringLen==15)     /*如果电脑给DSP发送的是字符a,DSP就接收下面的电脑给的数据并且把接收过来的数据发送给电脑*/
			  {			     
			     bReceive=1;
			     receivestringLen=0;
			  }
			  else if(cReceiveString[0]!=0x61 && receivestringLen==15)            /*如果电脑给DSP发送的是AS||码除了a以外的字符,那么DSP就把自己要给电脑发的数据发给电脑。这里发的是"Hello PC!,Over!"*/
			  {
			     bReceive=2;
			     receivestringLen=0;
			  }
			  else
			  {
			     bReceive=0;
			  }
		    }
		default : break;
		*IFR|=0x0001;
		asm(" CLRC INTM ");
	} 
}

void interrupt nothing()
{
   return;
}
















⌨️ 快捷键说明

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