- 浏览: 162847 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
yuanyu5237:
Michyo 写道你好,我是用了您的第二段模块代码,但是为什么 ...
32位linux内核2.6.38.2添加系统调用,并编写模块模拟ps命令显示进程信息 -
yuanyu5237:
haolifeng 写道如果不对客户端的连接文件描述符进行监听 ...
简单epoll多线程服务器 -
haolifeng:
如果不对客户端的连接文件描述符进行监听,你这个服务器是有问题的 ...
简单epoll多线程服务器 -
haolifeng:
我对你的代码有一个问题,当获得客户端的连接文件描述符后,为什么 ...
简单epoll多线程服务器 -
Michyo:
你好,我是用了您的第二段模块代码,但是为什么添加了模块后没有输 ...
32位linux内核2.6.38.2添加系统调用,并编写模块模拟ps命令显示进程信息
我这套源码(2个java文件,5个c文件,使用开发环境eclipse+IAR EW for MSP430;实现的功能有,以下代码上有很多不足的地方,仅供参考,如有错误,请予以指正:
java
功能1:上位机读 写串口, 以修改单片机中短信内容
功能2:中文短信的编码
String2Unicode.java
Comm.java
c
功能1:控制GSM模块发送短信
功能2:接收315模块发送的报警指令(包括烟雾,火灾和陌生人入侵信号)
功能3:修改flash中短信内容
UART.h
UART.c
flash.h
flash.c
main.c
java
功能1:上位机读 写串口, 以修改单片机中短信内容
功能2:中文短信的编码
String2Unicode.java
public class String2Unicode { public static void main(String[] args) { System.out.println(convert("工作愉快!")); System.out.println(number("13641285663")); String s = composite("13641285663", "工作愉快!"); System.out.println(s + "\n" + s.length()); System.out.println((char)Integer.parseInt("26")); System.out.println("0891683108100005F0" + s); System.out.println("0891683108100005F011000D91683146215866F30008000a5de54f5c61095febff01".length()); System.out.println((int)'$'); System.out.println((int)'a'); System.out.println((int)'_'); System.out.println("1_25_0891683108100005F011000D91683146215866F30008000a5de54f5c61095febff01$".length()); } public static String composite(String number, String msg) { StringBuffer sb = new StringBuffer(); return sb.append("11000D91").append(number(number)).append("000800") .append(convert(msg)).toString(); } public static String number(String str) { StringBuffer sb = new StringBuffer(); StringBuffer sb2 = new StringBuffer(); int length = str.length(); if (str.length() % 2 != 0) { sb.append(str).append("F"); } sb2.append("68"); for (int i = 0; i < length; ++i) { sb2.append(sb.charAt(i + 1)).append(str.charAt(i)); ++i; } return sb2.toString(); } public static String convert(String str) { String tmp; StringBuffer sb = new StringBuffer(1000); StringBuffer sb2 = new StringBuffer(); char c; int i, j; sb.setLength(0); for (i = 0; i < str.length(); i++) { c = str.charAt(i); if (c > 255) { j = (c >>> 8); tmp = Integer.toHexString(j); if (tmp.length() == 1) sb.append("0"); sb.append(tmp); j = (c & 0xFF); tmp = Integer.toHexString(j); if (tmp.length() == 1) sb.append("0"); sb.append(tmp); } else { sb.append(c); } } int length = sb.length() / 2; tmp = Integer.toHexString(length); if (tmp.length() == 1) tmp = "0" + tmp; sb2.append(tmp).append(sb); return sb2.toString(); } }
Comm.java
import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import javax.comm.CommPortIdentifier; import javax.comm.NoSuchPortException; import javax.comm.PortInUseException; import javax.comm.SerialPort; import javax.comm.UnsupportedCommOperationException; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; /** * * @author ydp * *使用本程序前,请先安装java的串口API *(http://llk.media.mit.edu/projects/cricket/software/javaSerial.zip) *或 *(http://www.oracle.com/technetwork/java/index-jsp-141752.html) *包括三个文件 *win32com.dll放到Windows\System32目录下 *comm.jar放到jdk1.6.0_07\jre\lib\ext目录下 *javax.comm.properties放到jdk1.6.0_07\jre\lib目录下 * * */ public class Comm extends JFrame implements ActionListener { private static final long serialVersionUID = 1L; private JButton openCommBtn; private JLabel recvLabel; private JTextArea recvArea; private JScrollPane recvPane; private JPanel panelTest; private JLabel typeLabel; private JComboBox typeComboBox; private JLabel phoneNumberLabel; private JButton sendMsgBtn; private JTextField phoneNumberField; private JPanel panelPhone; private JTextArea sendMsgArea; private JScrollPane sendMsgPane; private JPanel panelBtn; private JLabel sendMsgLabel; private CommPortIdentifier serialPortId; private SerialPort port; private JLabel commLabel; private JComboBox commComboBox; private InputStream in; private OutputStream out; private String type[] = { "1", "2" }; private String comm[] = { "COM1", "COM2", "COM3", "COM4", "COM5", "COM6","COM7" }; public Comm(String title) { super(title); recvLabel = new JLabel("接收消息"); recvLabel.setSize(30, 5); recvArea = new JTextArea(7, 30); recvArea.setEditable(false); recvArea.setAutoscrolls(true); recvPane = new JScrollPane(recvArea); typeLabel = new JLabel("协议"); typeComboBox = new JComboBox(type); phoneNumberLabel = new JLabel(" 电话号码"); phoneNumberLabel.setSize(5, 5); phoneNumberField = new JTextField(11); sendMsgLabel = new JLabel(" 发送消息 : "); panelPhone = new JPanel(); panelPhone.add(typeLabel); panelPhone.add(typeComboBox); panelPhone.add(phoneNumberLabel); panelPhone.add(phoneNumberField); panelPhone.add(sendMsgLabel); sendMsgArea = new JTextArea(5, 30); sendMsgArea.setAutoscrolls(true); sendMsgPane = new JScrollPane(sendMsgArea); commLabel = new JLabel("串口"); commComboBox = new JComboBox(comm); openCommBtn = new JButton("打开串口"); sendMsgBtn = new JButton("发送消息 "); panelBtn = new JPanel(); panelBtn.add(commLabel); panelBtn.add(commComboBox); panelBtn.add(openCommBtn); panelBtn.add(sendMsgBtn); panelTest = new JPanel(); panelTest.add(recvLabel); panelTest.add(recvPane); panelTest.add(panelPhone); panelTest.add(sendMsgPane); panelTest.add(panelBtn); this.pack(); this.getContentPane().add(BorderLayout.CENTER, panelTest); this.setSize(370, 380); this.setVisible(true); this.setLocation(300, 200); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.openCommBtn.addActionListener(this); } public static void main(String[] args) { new Comm("短信配置工具"); } @Override public void actionPerformed(ActionEvent event) { try { serialPortId = CommPortIdentifier.getPortIdentifier(commComboBox .getSelectedItem().toString()); System.out.println(commComboBox.getSelectedItem().toString()); port = (SerialPort) serialPortId.open("ydp", 30); port.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.FLOWCONTROL_NONE); in = port.getInputStream(); out = port.getOutputStream(); } catch (NoSuchPortException e) { e.printStackTrace(); } catch (PortInUseException e) { e.printStackTrace(); } catch (UnsupportedCommOperationException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } Thread t = new Thread(new Runnable() { @Override public void run() { byte[] data = new byte[256]; while (true) { try { int length = in.read(data); if (0 != length) { recvArea .append(new String(data, 0, length, "UTF-8") + "\n"); } } catch (IOException e) { e.printStackTrace(); } } } }); t.start(); this.sendMsgBtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // System.out.println(sendField.getText()); // System.out.println(sendMsgArea.getText()); String s = String2Unicode.composite(phoneNumberField.getText(), sendMsgArea.getText()); StringBuffer sb = new StringBuffer(); sb.append(typeComboBox.getSelectedItem().toString()) .append("_").append(s.length() / 2).append("_") .append("0891683108100005F0").append(s).append("$"); System.out.println(sb); try { // out.write("AT\r\n".getBytes()); // out.write("AT+CMGF=0\r\n".getBytes()); // out.flush(); // Thread.sleep(1000); // out.write(("AT+CMGS=" + (s.length() / 2) + // "\r\n").getBytes()); // out.flush(); // Thread.sleep(1000); // out.write(("0891683108100005F0" + s + (char) // Integer.parseInt("26") + "\r\n").getBytes()); // System.out.println("0891683108100005F0" + s + (char) // Integer.parseInt("26") + "\r\n"); out.write(sb.toString().getBytes()); out.flush(); } catch (IOException e1) { e1.printStackTrace(); } } }); } }
c
功能1:控制GSM模块发送短信
功能2:接收315模块发送的报警指令(包括烟雾,火灾和陌生人入侵信号)
功能3:修改flash中短信内容
UART.h
#include <stdio.h> #include <msp430x14x.h> #include "delay.h" #define uchar unsigned char #define uint unsigned int #define PRINTSUCCESS 0 #define PRINTNULL 1 #define PRINTTOOLARGE 2 #define UARTBUFLEN 100 void init_uart0(void); void R_S_Byte(uchar R_Byte); unsigned char printArr(uchar* array, uchar len); unsigned char printStr(uchar* string); unsigned char checkUART();
UART.c
#include "UART.h" //#include <string.h> uchar uart_Buf[UARTBUFLEN]; uchar buf_count; uchar finishFlag; // 0表示没有接收完,1表示接收完一条指令 /* //======================初始化串口============================================== void init_uart0(void) { //====================串口工作模式设置======================================== U0CTL=0x00; // U0CTL包含串口0通信协议、通信模式、校验位等设置,允许UART0 U0CTL +=CHAR; //(CHAR=0x10)当CHAR=0时位7位数据,当 CHAR=1时为8位数据 //不需要校验,数据位为8位,无反馈,异步UART通信,UART被允许 //====================串口发送操作设置======================================== U0TCTL=0x00; //U0TCTL包含串口0发送功能操作 U0TCTL +=SSEL0; //波特率发生器选择ACLK //#define SSEL1 (0x20) #define SSEL0 (0x10) //====================串口拨特率设置9600==================================== //===================拨特率计算公式:拨特率=BRCLK/(UBR+(M7+M6+。。。。+M0)/8) UBR0_0=0x03; //UBR0_0为串口0波特率整数部分低地址 UBR1_0=0x00; //UBR1_0为串口0波特率整数部分高地址 UMCTL_0=0x4A; //UBR1_0为串口0波特率小数部分高地址 //===================串口收发使能控制========================================= ME1 |= UTXE0; //串口0发送功能使能 ME1 |= URXE0; //串口0接收功能使能 //===================串口中断使能控制========================================= IE1 |= URXIE0; //串口0接收中断使能 // IE1 |= UTXIE0; //串口0发送中断使能 //===================端口第二功能使能========================================= P3SEL |=BIT4; //设置P3。4为UART0 的TXD P3SEL |=BIT5; //设置P3。5为UART0 的RXD P3DIR |=BIT4; //设置P3。4为输出 UCTL0 &= ~SWRST; // 初始化UART状态机 }*/ void init_uart0(void) { P6DIR |= BIT2;P6OUT |= BIT2; // 关电平转换 P3SEL |= 0x30; // P3.4,5选择为UART收发端口 UCTL0 |= CHAR; // 8-bit character UTCTL0 |= SSEL0; // UCLK = ACLK UBR00 = 0x03; // 32k/9600 - 3.41 UBR10 = 0x00; // UMCTL0 = 0x4A; // Modulation ME1 |= UTXE0 + URXE0; // 使能USART0收发 UCTL0 &= ~SWRST; // 初始化UART0状态机 IE1 |= URXIE0; // 使能接收中断 } //============================================================================== void R_S_Byte(uchar R_Byte) { while((IFG1&UTXIFG0)==0); //是否上一个串口数据发送完成 TXBUF0=R_Byte; } unsigned char printArr(unsigned char* array, unsigned char len) { unsigned char i=0; if(array==NULL) return PRINTTOOLARGE; for(i=0;i<len;i++) { R_S_Byte(array[i]); } return PRINTSUCCESS; } unsigned char printStr(unsigned char* string) { unsigned char i=0; if(string==NULL) return PRINTNULL; while(1) { R_S_Byte(string[i]); delay_us(100); i++; if(string[i]==0x00) return PRINTSUCCESS; if(i==255) return PRINTTOOLARGE; } } /*接收中断函数,将接收到的字符放在uart_Buf中,收到$表示一条命令接收完成*/ #pragma vector = UART0RX_VECTOR __interrupt void UART0_RXISR(void) { //LPM3_EXIT;//退出低功耗模式。 if(finishFlag==0) { uart_Buf[buf_count]=RXBUF0; buf_count++; if(uart_Buf[buf_count-1]=='$'||buf_count>=UARTBUFLEN)//实际buffer的可用空间是UARTBUFLEN-1 { buf_count=0; finishFlag=1; //printStr(uart_Buf); //memset(uart_Buf, 0, sizeof(uart_Buf)); } } }
flash.h
#include <stdio.h> #include <msp430x14x.h> #define uchar unsigned char #define uint unsigned int #define SegmentA 0x1080 //0x01080到0x010FF #define SegmentB 0x1000 //0x1000到0x107F void flash_clr(uint *ptr); void flash_write_int8(uchar *ptr, uchar value); void flash_write_int16(uint *ptr, uint value); void flash_memcpy(uchar *ptr, uchar *from, uint len);
flash.c
#include "flash.h" #define int8_t unsigned char #define int16_t unsigned int void flash_clr(uint *ptr) { _DINT(); //关中断 FCTL3 = 0x0A500; //* Lock = 0 开锁 FCTL1 = 0x0A502; //* Erase = 1 使能擦除 *((int *) ptr) = 0; //* 擦除段 _EINT(); } void flash_write_int8(uchar *ptr, uchar value) { _DINT(); FCTL3 = 0x0A500; // Lock = 0 开锁 FCTL1 = 0x0A540; // Write = 1使能写入 *((int8_t *) ptr) = value; // 写入数据 _EINT(); } void flash_write_int16(uint *ptr, uint value) { _DINT(); FCTL3 = 0x0A500; /* Lock = 0 */ FCTL1 = 0x0A540; /* Write = 1 */ *((int16_t *) ptr) = value; /* Program the flash */ _EINT(); } void flash_memcpy(uchar *ptr, uchar *from, uint len) { _DINT(); FCTL3 = 0x0A500; /* Lock = 0 */ FCTL1 = 0x0A540; /* Write = 1 */ while (len) { *ptr++ = *from++; len--; } _EINT(); }
main.c
#include <msp430x14x.h> #include "UART.h" #include "flash.h" #include <string.h> #include <stdlib.h> unsigned int L1=~((0X01)<<0); unsigned int L2=~((0X01)<<1); unsigned int L3=~((0X01)<<2); unsigned int L4=~((0X01)<<3); unsigned int L5=~((0X01)<<4); unsigned int L6=~((0X01)<<5); unsigned int L7=~((0X01)<<6); unsigned int L8=~((0X01)<<7); unsigned int L9=~((0X01)<<8); extern uchar uart_Buf[UARTBUFLEN]; extern uchar buf_count; extern uchar finishFlag; struct MSG { uint len; uint size; uchar m[100]; }; #define MCLK_C (4)//定义主时钟频率,供延时使用 #define Delay_ms(n) __delay_cycles(n*(1000L)*MCLK_C) void initSys(); void readFlash(uchar* addr, struct MSG *msg); void sendMsg(struct MSG *msg); uint interrupt=0; uchar p4=0; /** 315模块连接线0 */ void main(void) { WDTCTL = WDTPW + WDTHOLD; //关闭看门狗 initSys(); //_EINT(); init_uart0(); //进入低功耗3模式。 //_BIS_SR(LPM3_bits); P2DIR = 0xff; //设置P2口方向为输出 P2OUT = 0xff; P4DIR =0xf0; //设置P4口方向为输入 //P4DIR&=~0x0F; P2OUT |= BIT0; //P2OUT |= BIT2; P2OUT ^= 0x01; P1IE |= 0x10; // P1.4中断使能 P1IES |= 0x10; // P1.4设置为高低边沿中断 P1IFG &= ~0x10; // P1.4中断标志位清零 //_BIS_SR(LPM4_bits + GIE); // 进入LPM4中断 struct MSG msg; uchar * startA = (uchar*)SegmentA; flash_clr((uint*)SegmentA); uchar * startB = (uchar*)SegmentB; flash_clr((uint*)SegmentB); while(1) { if(finishFlag != 0) { P2OUT ^= 0x01; memset(&msg, 0, sizeof(msg)); char temp[100]; char *p; memcpy(temp, uart_Buf, 100); p = strtok(temp, "_"); //短信类型 switch(atoi(p)) { case 1: { p = strtok(NULL, "_"); msg.len = atoi(p); p = strtok(NULL, "_"); msg.size = strlen(p)-1; for(int i=0; i<strlen(p)-1; ++i) { msg.m[i]=p[i]; } printStr("1\r\n"); printStr(msg.m); printStr("\r\n"); flash_clr((uint*)SegmentA); flash_memcpy(startA, (uchar *)&msg,sizeof(struct MSG)); memset(&msg, 0, sizeof(msg)); break; } case 2: { p = strtok(NULL, "_"); msg.len = atoi(p); p = strtok(NULL, "_"); msg.size = strlen(p)-1; for(int i=0; i<strlen(p)-1; ++i) { msg.m[i]=p[i]; } printStr("2\r\n"); printStr(msg.m); printStr("\r\n"); flash_clr((uint*)SegmentB); flash_memcpy(startB, (uchar *)&msg,sizeof(struct MSG)); memset(&msg, 0, sizeof(msg)); break; } default: { //P2OUT ^= 0x02; break; } } finishFlag = 0; memset(p,0,strlen(p)); memset(temp,0,sizeof(temp)); //printArr(uart_Buf, 100); memset(uart_Buf,0,100); finishFlag = 0; } if(interrupt==1) { Delay_ms(50); switch(p4) { case 8: { readFlash(startA, &msg); break; } case 9: { readFlash(startB, &msg); break; } default: { //P2OUT ^= 0x01; //char x[5]; //sprintf(x, "%d", p4); //printStr((uchar*)x); //printStr("\r\n"); break; } } //while(interrupt==1); interrupt=0; } } } void initSys() { unsigned int iq0; _EINT(); BCSCTL1 &=~XT2OFF; //打开高速晶振 do { IFG1 &= ~OFIFG; // 清除振荡器失效标志 for (iq0 = 0xFF; iq0 > 0; iq0--); // 延时,等待XT2起振 } while ((IFG1 & OFIFG) != 0); // 判断XT2是否起振 BCSCTL2 =SELM1+SELS; //MCLK,SMCLK时钟为XT2,MCLK SMCLK为8MHz //???USART0 } void sendMsg(struct MSG *msg) { printStr("AT\r\n"); Delay_ms(100); printStr("AT+CMGF=0\r\n"); Delay_ms(100); printStr("AT+CMGS="); char y[5]; sprintf(y, "%d", msg->len); printStr((uchar*)y); printStr("\r\n"); Delay_ms(100); printStr(msg->m); R_S_Byte(0x1A); printStr("\r\n"); } void readFlash(uchar* addr, struct MSG *msg) { uint l = ((struct MSG *)addr)->size; for(int j=0; j<l; ++j) { msg->m[j]= ((struct MSG *)addr)->m[j]; } msg->len = (uint)((struct MSG *)addr)->len; //printStr("\r\n"); //printStr(msg->m); sendMsg(msg); memset(msg, 0, sizeof(*msg)); } // 端口1的中断服务例程 #pragma vector=PORT1_VECTOR __interrupt void Port_1(void) { //LPM4_EXIT; p4 = P4IN&0x0F; P2OUT ^= 0x01; // P1.0 状态翻转 P1IFG &= ~0x10; // P1.4 中断标志清零 interrupt=1; }
发表评论
-
MSP430外部中断源程序
2011-07-17 08:16 3269#include <msp430x41x.h> ... -
MSP430单片机控制GSM模块发短信(原理)
2011-07-17 08:04 6649首先,GSM发短信,对英文和中文的处理是不一样的,请参考以下资 ... -
MSP430单片机流水灯程序
2011-07-14 16:14 4003转载自http://hi.baidu.com/qiankun_ ... -
LINUX下usb串口编程自发自收数据
2010-12-13 21:57 3836首先,我是一个初学者 ... -
Windows下Up-Atom510安装meego手记
2010-11-29 20:46 15491 准备 首先,本实验的安装环境为:在window ... -
ubuntu10.10下嵌入式QT开发环境搭建手记
2010-10-28 17:33 5172【前言:由于我也是第一次搭建这个环境,整个所用时间不止一周, ...
相关推荐
在本文中,我们将深入探讨如何使用MSP430单片机来控制GSM模块,以便实现无线通信功能。MSP430是由德州仪器(TI)开发的一种超低功耗微控制器,常用于各种嵌入式应用。GSM模块则是一种能够接入全球移动通信系统...
在现代通信技术中,单片机控制GSM模块是实现远程数据传输、语音通话和短信服务的重要手段。GSM(Global System for Mobile communications)作为全球范围内广泛使用的移动通信标准,其模块能够与各种单片机进行有效...
《msp430单片机C语言常用模块与综合系统实例精讲》是秦龙编著的一本关于msp430单片机编程的教材,它深入浅出地讲解了msp430单片机的C语言编程技术,并且包含了丰富的实例、电路图和插图,为学习者提供了一站式的资源...
msp430单片机控制步进电机实验的电路图及C程序 msp430单片机控制步进电机实验的电路图及C程序是msp430单片机控制步进电机实验的相关资料,包括电路图和C程序。该实验的目的是使用msp430单片机控制步进电机的运动,...
《MSP430单片机常用模块与综合系统实例精讲》是一份深度解析MSP430微控制器的教程资料,包含了丰富的电路图和源代码实例,旨在帮助学习者深入理解和应用这款低功耗、高性能的单片机。MSP430系列由德州仪器(TI)开发...
本书针对目前流行的MSP430单片机系列,通过以实例精讲的形式,详细介绍MSP430单片机常用模块与综合应用采用系统设计的方法与技巧。全书共分为3篇,第1篇为基础知识篇,简要介绍MSP430单片机的硬件内部结构、C语言...
在本文中,我们将深入探讨如何使用 MSP430 微控制器来控制 GSM 模块发送短信。MSP430 是由 Texas Instruments 公司推出的一款超低功耗的微控制器,广泛应用于各种嵌入式系统,特别是对于电池供电设备和需要高效能源...
在本文中,我们将深入探讨如何使用MSP430F149单片机来控制GSM模块,实现接收和解读短信的功能。MSP430F149是一款低功耗、高性能的微控制器,由德州仪器(Texas Instruments)生产,广泛应用于各种嵌入式系统,包括...
**MSP430单片机模块程序库详解** MSP430单片机是由德州仪器(TI)推出的超低功耗微控制器系列,广泛应用于各种嵌入式系统,尤其是对能耗有严格要求的场合。这个程序库包含了针对MSP430单片机各个常用外设的程序驱动...
**MSP430单片机与TC35模块收发短信详解** MSP430系列单片机是德州仪器(Texas Instruments, TI)推出的一款超低功耗微控制器,广泛应用于各种嵌入式系统设计。在这个项目中,我们使用的是MSP430F5529型号的单片机,...
### MSP430单片机与GPS模块接口应用 #### GPS系统简介 全球定位系统(Global Positioning System,简称GPS)是一种重要的空间定位系统,它能够实现全球范围内的精确导航和定位服务。随着科技的发展,GPS的应用领域...
为了用MSP430单片机控制LCD12864,首先需要理解两者之间的通信协议。通常,MSP430会通过串行或并行接口与LCD12864交互,发送指令来设置显示模式、清屏、定位光标、写入字符等。MSP430需要配置合适的I/O引脚来驱动LCD...
基于MSP430单片机的智能风力检测与发电控制系统 基于MSP430单片机的节能型路灯 基于MSP430和NRF24L01的封闭环境检测系统 基于MSP430和RFID的小型化智能农业监控系统设计 基于MSP430和Zigbee技术的煤矿综合监控系统...
MSP430教程14:MSP430单片机ADC12模块
MSP430单片机是德州仪器(TI)生产的一种16位RISC微控制器,广泛应用于低功耗嵌入式系统中。本文主要介绍MSP430单片机中的ADC12模块,即12位模拟数字转换模块。 首先,我们来看一下ADC12模块的主要特点和功能。ADC12...
在MSP430F149上初始化GSM模块接收短信,首先要确保电源、串行通信线路以及SIM卡正确连接。接着,通过串口发送AT命令来设置GSM模块进入短信接收模式,例如`AT+CMGF=1`切换到文本模式,`AT+CNMI=2,2,0,0,0`使模块在...
基于MSP430单片机的智能风力检测与发电控制系统 基于MSP430单片机的节能型路灯 基于MSP430和NRF24L01的封闭环境检测系统 基于MSP430和RFID的小型化智能农业监控系统设计 基于MSP430和Zigbee技术的煤矿综合监控系统...
《msp430单片机常用模块与综合系统 随教材的例程》这个资源是针对TI公司的MSP430系列微控制器的学习材料,由秦龙编著的教材配套提供。MSP430是一款低功耗、高性能的16位单片机,广泛应用于各种嵌入式系统,如物联网...
**MSP430单片机与DS18B20温度传感器的C语言实践** 在电子工程领域,MSP430单片机因其低功耗、高性能和丰富的外设接口而广受欢迎,尤其适用于嵌入式系统设计。本教程将深入探讨如何使用MSP430单片机来读取并处理DS...