基于单片机的水位远程监测系统设计 - 图文(6)

2019-08-03 11:16

唐 山 学 院 毕 业 设 计

pBuf[5] = 'G'; pBuf[6] = 'S'; pBuf[7] = '='; pBuf[8] = '+'; pBuf[9] = '8'; pBuf[10] = '6'; pBuf[11] = '1'; pBuf[12] = '3'; pBuf[13] = '8'; pBuf[14] = '0'; pBuf[15] = '0'; pBuf[16] = '3'; pBuf[17] = '1'; pBuf[18] = '1'; pBuf[19] = '5'; pBuf[20] = '0'; pBuf[21] = '0'; pBuf[22] = ','; pBuf[23] = '1'; pBuf[24] = '4'; pBuf[25] = '5';

pBuf[26] = (char)(index & 0xff + 0x30); //指针指向所需数据 pBuf[27] = '26'; //结束字符 return 28; //返回数据包的长度 }

在该程序中,封装好了命令“AT+CMGS=,[]”命令,为字符串形式的目的地址,为地址类型识别号,当的第一个是“+”时候,的值为数值“145”,否则为“129”。

4.2.5 短信接收

//接收短消息

int revSms(char pBuf[]) {

pBuf[0] = 'A'; pBuf[1] = 'T';

26

唐 山 学 院 毕 业 设 计

pBuf[2] = '+'; pBuf[3] = 'C'; pBuf[4] = 'M'; pBuf[5] = 'G'; pBuf[6] = 'R'; pBuf[7] = '=';

pBuf[8] = (char)(index & 0xff + 0x30); //接收指针指向的数据 pBuf[9] = 13; //结束字符 return 10; //返回数据包长度 }

在该程序中封装好了“AT+CMGR=”其中da为index的具体指针指向数据。

4.2.6 删除短消息

//删除短消息

int deleteSms(char pBuf[]) {

pBuf[0] = 'A'; pBuf[1] = 'T'; pBuf[2] = '+'; pBuf[3] = 'C'; pBuf[4] = 'M'; pBuf[5] = 'G'; pBuf[6] = 'D'; pBuf[7] = '=';

pBuf[8] = (char)(index & 0xff + 0x30); //删除具体内容 pBuf[9] = 13; //结束

return 10; //返回数据包长度 }

在函数中封装好了“AT+CMGD=”指令,删除了指定地址的内容,并且返回了数据包的长度。

27

唐 山 学 院 毕 业 设 计

4.3 串口程序

串口程序主要完成的是单片机与TC35的通信,由于MSP430F149单片机内有UART,因此实现串口通信相当容易,只需要设置适当的寄存器就可以使串口工作起来。串口工作使用中断机制,发送数据和接受数据都采用中断机制。当接收到有数据到来时,设置一个标志来通知主程序数据到来,当主程序有数据要发送的时候,设置一个标志进入中断发送数据,串口通讯流程图如下:

等待 等待 N

N 设置发送标志 数据到来 Y 发送数据 Y 设置标志 图4-5串口通讯流程图

下面是具体的程序

首先完成的是初始化部分,主要是通过设置适当的寄存器相应的位来使能UART功能。

void Init_UART0(void) {

U0CTL = 0X00; //将寄存器的内容清零 U0CTL += CHAR; U0TCTL = 0X00; UBR0_0 = 0X45; UBR1_0 = 0X00;

UMCTL_0 = 0X49; //调整寄存器

ME0 |= UTXE0 + URXE0; //使能UART0的TXD和RXD IE0 |= URXIE0; IE0 |= UTXIE0; P3SEL |= BIT4; P3SEL |= BIT5;

//使能UART0的RX中断 //使能UART0的TX中断 //设置P3.4为UART0的TXD //设置P3.5为UART0的RXD //数据位为8bit //将寄存器的内容清零 //波特率为115200

U0TCTL += SSEL1; //波特率发生器选择SMCLK

28

唐 山 学 院 毕 业 设 计

P3DIR |= BIT4; return; }

//P3.4为输出管脚

串口中断主要是发送和接受中断下面是具体的程序: /////////////////////////////////////// // 处理来自串口 0 的接收中断

interrupt [UART0RX_VECTOR] void UART0_RX_ISR(void) {

UART0_RX_BUF[nRX1_Len_temp] = RXBUF0; //接收来自的数据 nRX1_Len_temp += 1;

if(UART0_RX_BUF[nRX0_Len_temp - 1] == 13) { } }

/////////////////////////////////////// // 处理来自串口 0 的发送中断

interrupt [UART0TX_VECTOR] void UART0_TX_ISR(void) {

if(nTX0_Len != 0) { } }

nTX0_Flag = 0; nSend_TX0 += 1;

if(nSend_TX0 >= nTX0_Len) {

nSend_TX0 = 0; nTX0_Len = 0; nTX0_Flag = 1; }

// 表示缓冲区里的数据没有发送完

TXBUF0 = UART0_TX_BUF[nSend_TX0]; nRX0_Len = nRX0_Len_temp; nRev_UART0 = 1; nRX0_Len_temp = 0;

29

唐 山 学 院 毕 业 设 计

4.4 主处理程序

主处理模块作用是将各个模块进行协调处理和进行数据交互,主处理模块首先完成初始化工作,然后后进入循环处理,在循环过程中主处理获得采集的模拟数据,并将得到的数据发送到上位机,同时下位机也接收来自上位机的数据。整个程序基于中断服务结构,为了实现中断程序与主程序之间的数据交互,通过设置一些全局变量和全局的缓冲区来实现。

通过流程图可以看出,主处理只负责简单的标志判断和设置标志,然后从指定的缓冲区读取数据,或者将数据放到相应的缓冲区,其他的由中断来进行处理,因此主程序主要和中断程序进行数据交换。 主处理模块方框图如下:

采集新数据 等待 打开中断 TC35数据 程序初始化 发送数据 Y 单片机处理 Y 启动/停止水泵 N Y

图4-6 主处理模块方框图

设置发送标志

具体的程序如后面的附录

30


基于单片机的水位远程监测系统设计 - 图文(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:大学生恋爱观的调查分析报告

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: