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

📄 send.c

📁 虚拟示波器
💻 C
字号:
/*
;**************************************************************
;*				   北京达盛科技有限公司
;*                    研    发    部
;*
;*             	http://www.techshine.com
;*************************************************************/
/*----------------------- 文件信息 ----------------------------                                      
;*  
;* 文件名称 : Send.C  	
;* 适用平台 : DSP(ARM)CPU挂箱、接口挂箱(用三条扁平电缆连接);
;*(注意:DSP(ARM)CPU挂箱上CPU模块上方的开关SW3有且只有最左侧的一位在"ON"位置);
;* CPU类型  : DSP320VC5409 
;* 软件环境 : CCS2.20 (5000系列)
;* 扩展模块 : E-LAB:GSM模块(正确安装在接口挂箱上)
;* 试验接线 : 1、用短路帽短接GSM模块上的片选CS50的CS0
;*            2、GSM模块上的FLY8用跳线帽短接MCU端
;* 试验现象 : 设置好CCS的环境,打开本工程,编译、下载。
;*            在程序表示处设置断点,运行程序到断点观察变量LCD变化。
;*    短信自收发时,发送短信正确时,LCD显示为:
;*         第一行:发送:XXXXXXXXXXX(发送至手机号11位,在程序中可修改)
;*         第二行:信息:Welcome To Techshine(Welcome To Techshine为短信内容)
;*         第三行:(第二如显示不完短信,则剩余部分在第三行显示;如第二行显示完,刚第四行内容,在第三行显示。)
;*         第四行:返回:71   OK (71为返回短信条数)
;*     如发送失败或发送错误,则在LCD从第一行最左起显示M22返回的错误信息,如:Error。
;* 备注:     
;* 编写时间:2006、1、20
;* 审核时间:
*/
//------------------头文件--------------------------------------
#include "System.h"   //包括CPU寄存器的定义、编译环境定义、试验系统定义
//----------------------------------------------------------
//----------------------------------------------------------
#define     SRTHR    CS0      //接收、发送缓冲器
#define     SIER     port0801 //中断允许寄存器
#define     SLCR     port0803 //线路控制寄存器
#define     SRLSR    port0805 //线路状态寄存器
#define     SLSB     CS0      //波特率除数锁存器低位
#define     SMSB     port0801 //波特率除数锁存器高位

uchar  sjhao[]="13146891434";//接收手机号为13146891434,可修改
uchar Msg[]=" Welcome to Techshine";               //短信内容可以修改
//-------------------------------------------------------------------
/*
************************************************************************
			*********************** 函数定义 ******************
************************************************************************
*/
/*
*************************************************************************************************************
- 函数名称 : Init_16c450(void)
- 函数说明 : 初始化16c450
- 输入参数 : 无
- 输出参数 : 无
*************************************************************************************************************
*/
void Init_16c450(void){
    uchar tempd;
    SLCR = 0x80;  //设置波特率控制位 使能
    SLSB = 0x0C;
    SMSB = 0x00;  //设置波特率96000
    SLCR = 0x03;  //8个数据位,2个停止位,无奇偶校验
    SIER = 0x01;  //允许接收器数据就绪中断
    tempd = SRLSR; //清除线路状态寄存器
    tempd = SRTHR; //清除16C450中的接收数据
}
/*
*************************************************************************************************************
- 函数名称 : void RECV(void *prdata)
- 函数说明 : 接收数据,且有超时退出功能
- 输入参数 : 无
- 输出参数 : 无
*************************************************************************************************************
*/
void RECV(uchar *prdata){
   uint16 cnt=0x8ff;
   while((SRLSR & 0x01)==0);//等待450接收缓冲器有数
   goto rec;
   while(1){
       while((SRLSR & 0x01)==0){//等待450接收缓冲器有数,且有超时退出功能
           cnt--; 
           if(cnt==0){ 
             *prdata = 0x00; //接受完数据后使最后一个数为零。
             goto back;
            }  
       }
     rec:
           *prdata++ = SRTHR;
            cnt = 0x8ff;
       } 
     back:   ;   
           
   /*__asm{
WAIT0:
    ldrb     r2,[0xac00805]
    tst      r2,#1
    bne      REC  
    b     WAIT0
WAIT1:
    mov      r1,#0x4ff 
WAIT:
    ldrb     r2,[0xac00805]
    tst      r2,#1
    bne      REC
    sub      r1,r1,#1
    cmp      r1,#0
    bne      WAIT
    beq      chu
REC:
    ldrb     r2,[0xac00800]
    strb     r2,[r0],#1
    nop
    nop
     b        WAIT1
chu:     
} */

}


/*
*************************************************************************************************************
- 函数名称 : void SEND(uchar udata)
- 函数说明 : 发送数据
- 输入参数 : 无
- 输出参数 : 无
*************************************************************************************************************
*/
void SEND(uchar udata){
     //dellay(50);
     while((SRLSR & 0x20)==0); //等待450发送缓冲器空
     SRTHR = udata;
     
}
/*
*************************************************************************************************************
- 函数名称 : void ATT(void)
- 函数说明 : 发送ATT命令
- 输入参数 : 无
- 输出参数 : 无
*************************************************************************************************************
*/
void ATT(void){
     SEND('A');
     SEND('T');
     SEND(0x0d);
}
/*
*************************************************************************************************************
- 函数名称 : void ATE(void)
- 函数说明 : 发送ATT命令
- 输入参数 : 无
- 输出参数 : 无
*************************************************************************************************************
*/
void ATE(void){
     SEND('A');
     SEND('T');
     SEND('E');
     SEND('0');
     SEND(0x0d);
}
/*
*************************************************************************************************************
- 函数名称 : void CGMI(void)
- 函数说明 : 发送CGMI命令
- 输入参数 : 无
- 输出参数 : 无
*************************************************************************************************************
*/
void CGMI(void){
     SEND('A');
     SEND('T');
     SEND('+');
     SEND('C');
     SEND('G');
     SEND('M');
     SEND('I');
     SEND(0x0d);
}
/*
*************************************************************************************************************
- 函数名称 : void CGMR(void)
- 函数说明 : 发送CGMR命令
- 输入参数 : 无
- 输出参数 : 无
*************************************************************************************************************
*/
void CGMM(void){
     SEND('A');
     SEND('T');
     SEND('+');
     SEND('C');
     SEND('G');
     SEND('M');
     SEND('M');
     SEND(0x0d);
}
/*
*************************************************************************************************************
- 函数名称 : void CMGF1(void)
- 函数说明 : 设置GSM模块短信格式为:1
- 输入参数 : 无
- 输出参数 : 无
*************************************************************************************************************
*/
void CMGF1(void){
     SEND('A');
     SEND('T');
     SEND('+');
     SEND('C');
     SEND('M');
     SEND('G');
     SEND('F');
     SEND('=');
     SEND('1');
     SEND(0x0d);
}
/*
*************************************************************************************************************
- 函数名称 : void CMGS(uchar *ptr)
- 函数说明 : 发送手机号;AT+CMGS="xxxxxxxxxxx(11位手机号)"<CR>
- 输入参数 : 接收手机号码
- 输出参数 : 无
*************************************************************************************************************
*/
void CMGS(uchar *ptr){
 uchar l=0, i1;
   while ((ptr[l])!='\0')
     {l++;}     //统计数组字符数
     SEND('A');
     SEND('T');
     SEND('+');
     SEND('C');
     SEND('M');
     SEND('G');
     SEND('S');
     SEND('=');
     SEND('"');
    for (i1=0;i1<l;i1++)
       SEND(ptr[i1]);//发送单个字符
     SEND('"');
     SEND(0x0d);
}
/*
*************************************************************************************************************
- 函数名称 : void Send_Msg(unchar *pMsg)
- 函数说明 : 发送短信
- 输入参数 : 短信内容
- 输出参数 : 无
*************************************************************************************************************
*/
void Send_Msg(uchar *pMsg){
 uchar l=0, i1;
    while ((pMsg[l])!='\0')
       {l++;}
     for (i1=0;i1<l;i1++)
       SEND(pMsg[i1]);//发送单个字符
     SEND(26);        //发送完毕结束符  
 }
/*
*************************************************************************************************************
- 函数名称 : uchar Check(uchar *prdata)
- 函数说明 : 检查回车换行次数,来确定是正确返回结果,还是错误结果
- 输入参数 : 接收缓冲区
- 输出参数 : 回车换行次数
*************************************************************************************************************
*/
uchar Check(uchar *prdata){
 uchar i=0,ucnt=0;
    while(prdata[i] != 0x00){
        if(prdata[i] == 0x0d)
        ucnt++;
        i++;
    }
  return ucnt;
}
/*
*************************************************************************************************************
- 函数名称 : void DispLcd(uchar *prdata)
- 函数说明 : 显示出错信息
- 输入参数 : 接收缓冲区
- 输出参数 : 无
*************************************************************************************************************
*/
void DispLcd(uchar *prdata){
 uchar x,i=0;
 uchar str1[] = "发到";
 uchar str2[] = "信息";
 uchar str3[] = "返回"; 
    Display(str1, 0x80);  //SEND:
    Display(sjhao,0x82);  //发送的手机号
    Display(str2, 0x90);  //MSG:
    Display(Msg,  0x92);  //显示发送内容
    Display(str3,  0x98);  //Back
    x=(0x0b-0x08)*2;
   Send_cdata(0xf8,0x9b,1);// 定位显示起始地址
    while(prdata[i++] != ':'); //判断':'分号,从分号后面显示
     while(prdata[i] != 0x00){
        if((prdata[i] != 0x0d)&(prdata[i] != 0x0a)){
         Send_cdata(0xfa,prdata[i],1);//输出单个字符
           x++;
          if (x ==0x10){
             x=0;
              hang++;
             switch (hang){
                case 0:Send_cdata(0xf8,0x80,1);
                        break;
                case 1:Send_cdata(0xf8,0x90,1);
                        break;
                case 2:Send_cdata(0xf8,0x88,1);
                        break;
                case 3:Send_cdata(0xf8,0x98,1);
              }
               if (hang>3){
                 Send_cdata(0xf8,0x80,1);
                 hang=0;
               }
            }
          }
          else 
             if(prdata[i] == 0x0a)
             Send_cdata(0xfa,' ',1);//输出单个字符 空格
         i++;
    }
}
/*
*************************************************************************************************************
- 函数名称 : void DispErr(uchar *prdata)
- 函数说明 : 显示出错信息
- 输入参数 : 接收缓冲区
- 输出参数 : 无
*************************************************************************************************************
*/
void DispErr(uchar *prdata){
 uchar i=0,x=0;
    Send_cdata(0xf8,0x80,1);   //把光标移到0点
     while(prdata[i] != 0x00){
        if((prdata[i] != 0x0d)&(prdata[i] != 0x0a)){
         Send_cdata(0xfa,prdata[i],1);//输出单个字符
           x++;
          if (x ==0x10){
             x=0;
              hang++;
             switch (hang){
                case 0:Send_cdata(0xf8,0x80,1);
                        break;
                case 1:Send_cdata(0xf8,0x90,1);
                        break;
                case 2:Send_cdata(0xf8,0x88,1);
                        break;
                case 3:Send_cdata(0xf8,0x98,1);
              }
               if (hang>3){
                 Send_cdata(0xf8,0x80,1);
                 hang=0;
               }
            }
          }
          else 
             if(prdata[i] == 0x0a)
             Send_cdata(0xfa,' ',1);//输出单个字符 空格
         i++;
    }
 
}
/*
*************************************************************************************************************
- 函数名称 : void CLEAR_STAT(void)
- 函数说明 : 清除线路状态寄存器和接受缓冲器
- 输入参数 : 无
- 输出参数 : 无
*************************************************************************************************************
*/
void CLEAR_STAT(void){
 uchar utemp;
 utemp = SRLSR; //清除线路状态寄存器
 utemp = SRTHR; //清除16C450中的接收数据
}
/*
************************************************************
	****************** 主函数 *******************
************************************************************
*/
/*
*************************************************************************************************************
- 函数名称 : Main(void)
- 函数说明 : 系统的主程序入口
- 输入参数 : 无
- 输出参数 : 无
*************************************************************************************************************
*/

void main()
{ uchar i,uhcnt;
  uchar rdata[30];
  
   //----------系统初始化-------------------------------  
   cpu_init(); //目标初始化
   Init_16c450();
   Lcd_Init();
   dellay(10000);
   dellay(10000);
   ATT();            //测试
   dellay(10000);
   ATT();            //关闭回显
   dellay(10000);
   ATE();
   dellay(10000);
   for(i=0;i<30;i++) //清除接收数据区
        rdata[i] = 0;
   CLEAR_STAT();     
   ATT(); 
   RECV(rdata);            //关闭回显
   for(i=0;i<30;i++) //清除接收数据区
        rdata[i] = 0;
   CMGF1();          //设置GSM模块短信格式为:1
   dellay(0xffff);
   CMGS(sjhao);           //发送手机号
   dellay(0xffff);
   CLEAR_STAT();     //清除450状态
   Send_Msg(Msg);            //发送短信内容
   RECV(rdata);               //接收返回数据
   uhcnt = Check(rdata);                           //统计结束缓冲区,在单元中内容为00的单元之前的回车数
   if(uhcnt == 0x04)
     DispLcd(rdata);
   else 
     DispErr(rdata);
    while(1){
       dellay(100);
       asm("  nop");      //设置断点,观察LCD显示内容
    } 
 }

⌨️ 快捷键说明

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