打印

求助关于用PIC16C745 给手机发短信的问题!

[复制链接]
3076|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gomera|  楼主 | 2011-1-27 15:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位高手,

小女子现在在做一个毕业设计 是用pic16c745 然后连接一个usb到电路 再在visual studio2008里面做一个简单的GUI 这样在界面输入手机号码和信息 再一按发送键 指定的手机就能收到短信了!

我用visual studio写的vb程序 然后用MPLAB写的C++程序如下:

1.VB程序 仅有2个textbox和1个button而已

Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
ModemMode()
End Sub
Private Sub ModemMode()
If SerialPort1.IsOpen Then
SerialPort1.Close()
End If
SerialPort1.PortName = "COM1"
SerialPort1.BaudRate = 115200
SerialPort1.Parity = IO.Ports.Parity.None
SerialPort1.DataBits = 8
SerialPort1.StopBits = IO.Ports.StopBits.One
SerialPort1.RtsEnable =
True
SerialPort1.Open()
SerialPort1.WriteLine(
"AT+CMGF=1" + vbCr)
WaitForm.ShowDialog()
TextBox1.Text =
""
TextBox1.Text = SerialPort1.ReadExisting
If InStr(TextBox1.Text, "OK") <> 0 Then
'MessageBox.Show("Successful(CMGF)!")
Else
'MessageBox.Show("Try again(CMGF)")
End If
TextBox1.Text = ""
SerialPort1.WriteLine("AT+CNMI=0,1,0,0,0" + vbCr)
WaitForm.ShowDialog()
WaitForm.ShowDialog()
TextBox1.Text = SerialPort1.ReadExisting
If InStr(TextBox1.Text, "OK") <> 0 Then
'MessageBox.Show("Successful(CNMI)!")
Else
'MessageBox.Show("Try again(CNMI)")
End If
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Call ToReadSMS()
End Sub
Private Sub ToReadSMS()
Dim txtSMS As Integer
Dim txtMessage As String
For txtSMS = 1 To 15
txtMessage = txtSMS
SerialPort1.WriteLine(
"AT+CMGR=" + txtMessage + vbCr) 'read message
System.Threading.Thread.Sleep(500)
TextBox1.Text =
"" 'clear TextBox1
TextBox1.Text = SerialPort1.ReadExisting
SerialPort1.Close()
Next
End Sub
Private Sub btnSend_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSend.Click
Call ToSendSMS()
End Sub
Private Sub ToSendSMS()
SerialPort1.WriteLine(
"AT+CMGS=" + txtPhone.Text + vbCr + Chr(26))
TextBox1.Text = vbNewLine &
"....SMS Sending in progress..."
TextBox1.Refresh()
System.Threading.Thread.Sleep(750)

SerialPort1.WriteLine(Chr(26))
System.Threading.Thread.Sleep(5500)
TextBox1.Text =
""
TextBox1.Text = SerialPort1.ReadExisting
End Sub
Private Sub btnReset_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnReset.Click
txtPhone.Text =
""
txtMessage.Text = ""
End Sub
End
Class

2.我在MPLAB里面写的 之前还没涉及到USB的问题 只是简单的做到 一按电路里的按钮 那个"HELLO"就发到我程序里写的手机号上

#include <htc.h>
#ifndef _XTAL_FREQ
#define _XTAL_FREQ 4000000
#endif

__CONFIG(WDTDIS&PWRTDIS&UNPROTECT&H4);
void Delay(int loop)
{
int i;
for(i=0;i<loop;i++);
}

void init(void)//Assign & Initialize PORTB I/0
{
PORTB=0x02;
TRISB=0x02;
}

void initUSART(void)//Initialize USART
{
TXSTA=0x22;
RCSTA=0x90;
SPBRG=0x9b;
}

void enter(void)//ACSII Keycode for "Enter"
{
while(!TRMT);
TXREG=0x0d;
}

void tx_start(void)//ASCII Keycode for "Ctrl+Z"
{
while(!TRMT);
TXREG=0x1a;
}

void send_msg(const char*str)//Sending String of Characters
{
char ps;
ps=*str;
while(ps>0)
{
str++;
if(ps==0)break;
while(!TRMT);
TXREG=ps;
ps=*str;
}
}

void main(void)
{
init();
initUSART();
while(1)
{
if(RB1=1)
{
RB2=1;
RB3=1;
send_msg("at+cmgf=1");
enter();
__delay_ms(50);
send_msg("at+cmgs=");
send_msg("+6583010050");
enter();
__delay_ms(50);
send_msg("hello");
tx_start();
__delay_ms(50);

RB2=0;
RB3=0;
}
else if(RB1=0)
{
RB2=0;
RB3=0;
}
}
}


3.这是我从网上找的USB的定义程序。。貌似有用。。。
#define TRUE   1
#define FALSE  0
#define NULL   0

#define NUM_CONFIGURATIONS      1
#define NUM_INTERFACES          1

#define ConfiguredUSB() while ((USWSTAT&0x3)!=CONFIG_STATE) {}
#define STALL_EP0  EP_STALL0 = 1
#define Send_0Len_pkt   BD0IBC = 0; BD0IST = 0xc8; USB_dev_req = NULL

static volatile unsigned char bank3 USW_STAT @ 0x197;
#define POWERED_STATE         0x00
#define DEFAULT_STATE         0x01
#define ADDRESS_STATE         0x02
#define CONFIG_STATE         0x03

#define ENDPT_DISABLED         0x00
#define ENDPT_IN_ONLY         0x01
#define ENDPT_OUT_ONLY         0x02
#define ENDPT_CONTROL         0x06 /* enable for in, out and setup */
#define ENDPT_NON_CONTROL  0x0E /* enable for in, and out */

#define TOKEN_OUT (0x01<<2)
#define TOKEN_ACK (0x02<<2)
#define TOKEN_IN (0x09<<2)
#define TOKEN_SETUP (0x0D<<2)

#define CLEAR_FEATURE         0x01
#define GET_CONFIGURATION  0x08
#define GET_DESCRIPTOR         0x06
#define GET_INTERFACE         0x0A
#define GET_STATUS          0x00
#define SET_ADDRESS          0x05
#define SET_CONFIGURATION  0x09
#define SET_FEATURE          0x03
#define SET_INTERFACE         0x0B
#define HID_SET_REPORT   0x21
#define HID_GET_REPORT   0xA1
#define VEND_SET_MEMORY         0x80

#define HOSTTODEVICE            0x00
#define HOSTTOINTERFACE         0x01
#define HOSTTOENDPOINT          0x02
#define DEVICETOHOST            0x80
#define INTERFACETOHOST         0x81
#define ENDPOINTTOHOST          0x82

#define EP0OUT                  0
#define EP0IN                   1
#define EP1OUT                  2
#define EP1IN                   3
#define EP2OUT                  4
#define EP2IN                   5

// Descriptor Types
#define DEVICE                  1
#define CONFIGURATION           2
#define STRING                  3
#define INTERFACE               4
#define ENDPOINT                5


现在这是我所有能做得了 其他的已经不知道如何下手了 讲电路板上的USB插口连到电脑之后 最后要的结果就是在GUI的控制下 能够给手机发短信。。

小女子再次跪求。。而且今天是我的生日 但我实在被这个东西烦得不行了。。所以终于找到了这个论坛寻求帮助!!!

再次感谢!在线等!!

相关帖子

沙发
wljs012| | 2011-1-27 16:51 | 只看该作者
呵呵,看的我也无从下手了。要给手机发短信得有个短信模块啊,WAVECOM或者华为什么的,都是用单片机的串口发送AT指令控制的。单片机收到USB那边的数据后,再通过AT指令控制GPRS或CDMA模块将数据通过短信发出去就可以了。

使用特权

评论回复
板凳
gomera|  楼主 | 2011-1-27 17:47 | 只看该作者
可是我在MPLAB里面的源文件里已经写了AT指令了诶~~

使用特权

评论回复
地板
chunyang| | 2011-1-27 22:25 | 只看该作者
楼主应该看看GSM模块的手册和SMS指令流程。

使用特权

评论回复
5
wljs012| | 2011-1-28 08:11 | 只看该作者
可是我在MPLAB里面的源文件里已经写了AT指令了诶~~
gomera 发表于 2011-1-27 17:47

那就单片机透明传输,收什么就发什么,不对数据处理。
我看你现在好像连方案都没想好就开始动手写VB的程序了,这个顺序是不对的。

如果电脑的VB程序是毕业设计的重点,那就不要在硬件上加单片机,USB转串口后直接接到模块上,实现软件和模块直接通讯。

如果硬件才是重点那就通过单片机来控制GPRS模块,用现成的USB转串口的模块,现在有很多,只需要简单的外围电路,电脑驱动也是芯片公司提供,安装好后,你会发现,当前的USB口被虚拟成了一个串口,这样你的VB软件也省了,直接SSCOM吧,单片机需要有两个串口,也可以扩16C550,但还是直接选一个两个串口的好,简单,方便。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

6

帖子

1

粉丝