串口通信——读串口信息
来源:互联网 发布:成都家电维修软件 编辑:程序博客网 时间:2024/05/19 19:44
该例程是基于MSP430单片机,利用430单片机内部的温度传感器将数据传到连接在单片机的433M无线模块上,然后由无线模块将数据发送出去,发送至连接在PC机上的433M,由C语言程序将433M的信息(包含通信协议)读取并且写入一个txt文件,代替串口调试助手。
附上MSP430的程序
#include <msp430x14x.h>#include "Config.h" //????????,????IO???? ulong temp;ulong TemperF; //????ulong TemperC; //***********************************************************************// MSP430IO初始化//***********************************************************************uchar i = 0;//端口的初始化void Port_init(){ P6SEL = 0x00; P6DIR = 0xff; //输出状态P4SEL = 0x00; P4DIR = 0xFF; //??????? P5SEL = 0x00; P5DIR|= BIT5 + BIT6 + BIT7; //??????????}void Send_Byte(uchar data){ while(!(IFG1&UTXIFG0)); //????????????? U0TXBUF=data;}//*************************************************************************// MSP430串口的初始化//*************************************************************************void UART_Init(){ U0CTL|=SWRST + CHAR; //??SWRST,8????? U0TCTL|=SSEL1; //SMCLK????? U0BR1=baud_h; //BRCLK=8MHZ,Baud=BRCLK/N U0BR0=baud_l; //N=UBR+(UxMCTL)/8 U0MCTL=0x00; //??????0,???9600bps ME1|=UTXE0; //UART0???? ME1|=URXE0; //UART0???? U0CTL&=~SWRST; IE1|=URXIE0; /* U1CTL|=SWRST + CHAR; //??SWRST,8????? U1TCTL|=SSEL1; //SMCLK????? U1BR1=baud_h; //BRCLK=8MHZ,Baud=BRCLK/N U1BR0=baud_l; //N=UBR+(UxMCTL)/8 U1MCTL=0x00; //??????0,???9600bps ME2|=UTXE1; //UART0???? ME2|=URXE1; //UART0???? U1CTL&=~SWRST; IE2|=URXIE1; */ P3SEL|= BIT4 + BIT5; //??IO????????,??UART?? P3DIR|= BIT4; //??TXD0??????}//接收中断#pragma vector=UART0RX_VECTOR__interrupt void UART0_RX_ISR(void){ uchar data; data=U0RXBUF; P6OUT = data;}//*************************************************************************//ADC初始化函数//*************************************************************************void ADC_Init(){ P6SEL|=0x01; //??ADC?? ADC12CTL0|= ADC12ON + SHT0_2 + REF2_5V + REFON; //ADC?????,16?CLK,????2.5V ADC12CTL1|= ADC12SSEL1 + ADC12SSEL0; //SMCLK???? ADC12MCTL0= SREF0 + INCH_0; //??????????,??????0 ADC12IE|= 0x01; //???? ADC12CTL0|= ENC; //?????}//*************************************************************************//ADC中断程序//*************************************************************************#pragma vector=ADC_VECTOR__interrupt void ADC12ISR(void) { temp = ADC12MEM0; //保存转换结果}void Print_Str(uchar *s){ while(*s != '\0') { Send_Byte(*s++); }}//*************************************************************************// 主函数//*************************************************************************void main(void){ WDT_Init(); //看门狗设置 UART_Init(); Clock_Init(); //系统时钟设置 Port_init(); //系统初始化,设置IO口属性 delay_ms(100); //延时100ms ADC12CTL0 = SHT0_8 + REFON + ADC12ON; //内部1.5V参考电压,打开ADC12模块,设置采样保持定时器 ADC12CTL1 = SHP; //采使用采样定时器 ADC12MCTL0 = SREF_1 + INCH_10; //参考电压和通道选择 ADC12IE = BIT0; //ADC12MEM0 ADC12CTL0 |= ENC; //允许转换 _BIS_SR(GIE); //开启系统中断 while(1) { ADC12CTL0 |= ADC12SC; //开始采样并AD转换 //oF = ((x/4096)*1500mV)-923mV)*1/1.97mV = x*761/4096 - 468 //IntDegF = (ADC12MEM0 - 2519)* 761/4096 TemperF = (temp - 2519) * 761; TemperF = TemperF / 4096; //简化的华氏温度转换公式 //oC = ((x/4096)*1500mV)-986mV)*1/3.55mV = x*423/4096 - 278 //IntDegC = (ADC12MEM0 - 2692)* 423/4096 TemperC = (temp - 2692) * 423; TemperC = TemperC / 4096; //简化的摄氏温度转换公式 Send_Byte('!'); //编写简单的通信协议,避免不同的433M之间数据接收混乱 Send_Byte('!'); Send_Byte('!'); Send_Byte(TemperC/10+0x30); Send_Byte(TemperC%10+0x30); Send_Byte('C'); Send_Byte(' '); Send_Byte('#'); 结束标志 delay_ms(1500); _NOP(); //加入断点可用来观察TemperF和TemperC结果 }}
接着是C语言读取串口的C语言程序:
#include <stdio.h>#include <windows.h>FILE * fileFP;int main(void){ FILE *fp; char temp; int count = 0, cnt = 0; //char buf[100]; if((fp=fopen("com3", "r")) == NULL) puts("can't open the com/n"); if((fileFP=fopen("testdata.txt", "w")) == NULL) puts("can't open the file/n"); while(1) { temp = 0; fscanf(fp, "%c", &temp); if(temp == '!') //判断协议 count++; if(temp == '#') { count = 0; cnt++; // 接收数据计数 } if(count == 3&&temp != '!') { putchar(temp); fprintf(fileFP, "%c", temp); } else Sleep(100); if(cnt >= 5){ //设置每次读取五个数据 break; } } fclose(fp); //关闭文件以及串口 fclose(fileFP); return 0;}
阅读全文
0 0
- 串口通信——读串口信息
- Symbian串口通信——设备上USB串口通信
- STM32——串口通信
- android——串口通信
- 串口通信——写串口(C语言)
- 51单片机串口通信——串口设置
- 串口通信—Winbase.h—描述
- 裸机系列——2440串口通信
- 裸机系列——2440串口通信
- python串口通信模块——pySerial
- MFC点点滴滴——串口通信
- 【串口通信】——简单例子
- stm32学习笔记——串口通信
- windows程序设计——串口通信
- QT5串口通信——基础篇
- android串口通信——电子扫描枪
- android串口通信——电子锁
- STM32F103学习笔记——串口通信
- Thinkphp3.2.3分页锁定搜索条件
- JSTL表达式
- 关于对电离层物理的一点理解
- LA 4064 求n个点 可以组成多少个锐角或者直角三角形
- POJ 3414 Pots(广搜)
- 串口通信——读串口信息
- 全新认识Material Design
- lucene基础
- hdu6045 Is Derek lying? -逻辑题-2017多校联盟2 1题
- hdu1429 胜利大逃亡(续) (BFS+简单状态压缩)
- 欢迎使用CSDN-markdown编辑器
- 消息队列
- XML解析
- Qt 键盘事件与消息过滤器