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

📄 sci.h

📁 基于dsp2407a的探测系统程序(兼容usb和串口通讯)
💻 H
字号:
#include	"stdlib.h" 
#define  bi_preset	   re_flag|=0x01
#define  bi_preclr	   re_flag&=~0x01
#define  bi_datset	   re_flag|=0x02
#define  bi_datclr	   re_flag&=~0x02
#define  bi_codset	   re_flag|=0x04
#define  bi_codclr	   re_flag&=~0x04
#define  bi_cheset	   re_flag|=0x08
#define  bi_checlr	   re_flag&=~0x08
#define  bi_endset	   re_flag|=0x10
#define  bi_endclr	   re_flag&=~0x10

#define  ref_hpre	   0x01
#define  ref_npre	   0x00
#define  ref_hdat	   0x03
#define	 ref_ndat	   0x00
#define	 ref_hcod	   0x07
#define  ref_ncod	   0x00
#define  ref_hche	   0x0f
#define  ref_nche	   0x00
#define  ref_hend	   0x1f
#define  ref_nend	   0x00
#define  ref_chan	   0x55
#define  ref_ncha	   0x00
#define  changed	  0x55
#define  nchange	  0xaa

/*****通讯协议定义*****/
#define  op_initsys		0x80
#define  op_setall		0x81
#define  op_setfile		0x82
#define  op_poweron		0x83
#define  op_poweroff	0x84
#define  op_tranmod		0x85
#define	 op_missmod		0x86
#define  op_capfile		0x87
#define  op_delfile		0x88
#define  op_delallf		0x89
#define	 op_trafile		0x8a
#define  op_traallf		0x8b
#define  op_transys		0x8c
#define  op_havrece		0x8d
#define	 op_havsent		0x8e
#define  op_filfull		0x8f
#define  op_filenum		0x90
#define  op_currentdisp 0x91
#define  op_offtimedisp	0x92
#define  op_retransys	0x93
#define  op_savestate	0x94
#define  op_start		0x95
#define  op_stop		0x96
#define  op_busy		0x97
#define  op_nbusy		0x98
#define  op_ndata		0x99
#define  op_reset		0x9a
#define  op_capmode		0x9b
#define  op_shoot		0x9c
#define  op_hold		0x9d
#define  op_sysstate	0x9e
#define  op_empty		0x00
#define  op_full		0x55
#define	 op_capset		0xa0
#define  op_capinterupt	0xa1
#define	 op_capstart	0xa2
#define  op_curcap		0xa3
#define  op_capprechar	0xaa		 //cap->os
#define  op_osprechar	0xbb		 //os->cap
#define  op_endchar		0xff
                                                              


char buf[60];
char re_flag;
static uchar re_num,recdata[16],re_change; 
extern int UsbOrSci;

 
void inttostring(long num)
{
 int i;
 i=ltoa(num,buf);
 buf[i]='\0';
}



/*串行端口初始化*/  
void inline initialsci()
{
  *SCICCR=0X07;  /*一个停止位,不使能奇偶校验,空闲线模式,8位数据*/ 
/*  *SCICTL1=0X11;             /*使能接受中断,sleep=0,禁止接受错误中断,不使用sci唤醒*/
/*  *SCICTL2=0X02;             /*使能接收中断*/   
  *SCICTL1=0X13;/*使能接收发送,sleep=0,禁止休眠,禁止接收错误中断,*/
  				/*txwake=0;没有选定发送特征*/
  *SCICTL2=0X02;/*使能接收发送中断*/
  *SCIHBAUD=0X00; /*  40Mclk 0x0081 for 38400bits 0x0103 for 19200 0x208 for 9600*/
  *SCILBAUD=0x81;/*0x103 for 20Mclk,0X81 for 10Mclk;/*clkout=10M,波特率位9600*/   
  *MCRA=*MCRA|0X03;/*SCI管脚基本功能*/ 
  *PADATDIR=*PADATDIR|0X0100; 
  *SCICTL1=0X33;/*重新使能sci*/
  *SCIPRI=0X60;/*sci中断为低优先级*/   

}

void scisend(char data)
{ 
  uchar ready;
  *SCITXBUF=data; 
wait:
  ready=*SCICTL2&0X80;
  if(ready!=0x80)
  goto wait;
}

void sendstring(const char *string)
{
	for(;(*string)!='\0';string++)
	scisend(*string);
} 

void sendchars(char *string)
{
	for(;(*string)!='\0';string++)
	scisend(*string);
} 
void send0d0a()
{
  scisend(0x0d);
  scisend(0x0a);
}  

void senddis(const char *string,char *chars,long k)
{
  sendstring(string);
  inttostring(k);
  sendchars(chars);
  send0d0a();
}  

void senddata(char *chars,long k)
{
  inttostring(k);
  sendchars(chars);
  send0d0a();
}      
void SciDispose(int re_temp)
{
 
 char i;
 if(re_flag==ref_npre)
 goto receive_pre;
 if(re_flag==ref_hpre)
 goto receive_data;
 if(re_flag==ref_hdat)
 goto receive_code;
 if(re_flag==ref_hcod)
 goto receive_end;
 else 
 goto receive_error;
receive_pre:
   if(re_temp!=op_capprechar)
   goto receive_error;
   if(re_num<0x02)
     {
   	  re_num++;
	 }
   else
    {
    bi_preset;
    re_num=0;	
	} 
   goto receive_over;
receive_data:
   if(re_num<9)
   {
   recdata[re_num]=re_temp;
   re_num++;
   }
   else
    {
	recdata[re_num]=re_temp;
	bi_datset;
	re_num=0;
	}
	goto receive_over;
receive_code:
   recdata[10]=re_temp;
   bi_codset;   
   goto receive_over;
receive_end:
   if(re_temp==op_endchar)
   bi_endset;
receiveend:
	UsbOrSci=0;
    re_change=ref_chan;
receive_error:
   re_num=0;
   re_flag=0;
receive_over:   
    return;
}

⌨️ 快捷键说明

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