打印

PIC串口发送数据

[复制链接]
3659|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhangyongyi|  楼主 | 2013-9-1 16:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#define BT_PIO0 LATCbits.LATC4
#define BT_PIO1 LATCbits.LATC5
#define BT_TX   LATCbits.LATC6
#define BT_RX   LATCbits.LATC7
unsigned char ReceiveFlag=1;
unsigned char GetReceiveData;
unsigned char receive_data[15];
unsigned char send_data[15];
unsigned int i=0;
void Delay10TCYx(unsigned char);
void Delay1KTCYx(unsigned char);
void BT_PORTinit(void)
{
    TRISCbits.TRISC0=0;
    LATCbits.LATC0=1;
    TRISCbits.TRISC4=0;
    TRISCbits.TRISC5=1;
    TRISCbits.TRISC6=0;
    TRISCbits.TRISC7=1;
    BT_PIO0=0;
    BT_PIO1=0;
}
void BT_URAT_Init(void)
{
    BAUDCON1bits.BRG16=0;
    TXSTA1bits.BRGH=1;
    SPBRG1=71;
    TXSTA1bits.TX9=0;
    TXSTA1bits.SYNC=0;
    TXSTA1bits.TXEN=1;
    RCSTA1bits.CREN=1;
    RCSTA1bits.RX9=0;
    RCSTA1bits.ADDEN=1;
    RCSTA1bits.SPEN=1;
}
void main(void)
{
    unsigned int i=0;
    unsigned char sendstr[]={'L','A','N',' ','Y','A',' ','M','O',' ','K','U','A','I'};
    BT_PORTinit();
    BT_URAT_Init();
  // RCONbits.IPEN=0;
//  INTCON|=0XC0;
  while(1)
  {
    if(1==ReceiveFlag)
{
      ReceiveFlag=0;
     for(i=0;i<14;i++)
    {
      TXREG1=sendstr[i];
      while(0==TXSTA1bits.TRMT);
      sendstr[i]=0;
    }      
}
这是一个单片机串口发送字符程序,用的是查询方式,在PC上能正确显示数据,我想发送35,3.4,120.5,这样的数据该怎么改写啊,在我这个字符串里面unsigned char sendstr[]={35,3.4,120.5};这样收到的就是一串乱码,TXREG1=sendstr[i];,pic发送寄存器只能发一个字符啊,想要发数字的数据该怎么改写,求大侠给我指点怎么改写,万分感谢!
沙发
zhangyongyi|  楼主 | 2013-9-1 16:33 | 只看该作者
还有我要发送这种数据unsigned char sendstr[]={0x01,0x02,0x03};那程序又该怎么修改呢

使用特权

评论回复
板凳
NE5532| | 2013-9-2 11:25 | 只看该作者
PC上显示的字符是ASCII字符,“1”的ASCII码是0x31,楼主把教科书附录翻出来看看。你直接写HEX数据,出来的当然是乱码咯。

使用特权

评论回复
地板
zhangyongyi|  楼主 | 2013-9-2 16:29 | 只看该作者
我要发一串0x55,0x43,0x21,要怎么在PC上显示出来啊,高手求指点,不会写啊

使用特权

评论回复
5
NE5532| | 2013-9-2 17:17 | 只看该作者
zhangyongyi 发表于 2013-9-2 16:29
我要发一串0x55,0x43,0x21,要怎么在PC上显示出来啊,高手求指点,不会写啊

先搞清楚你要发的是HEX数据还是字符。

使用特权

评论回复
6
huangxz| | 2013-9-3 11:00 | 只看该作者
楼主数据类型搞错了啊,unsigned char 怎么可以是浮点数呢。

使用特权

评论回复
7
tianyazhix| | 2013-9-5 14:45 | 只看该作者
要把数据转换成ASCII,才可以在PC上显示的,就是把数字转换成字符就可以了,比如a=0x01;    b为发送到串口的数据,计算方法 b= a + 0x30;

使用特权

评论回复
8
pascal116| | 2016-6-18 14:07 | 只看该作者
我也碰到了这样的问题,单片机可以接收数据,但是想把0x00,0x01,0x02这样的数据发出去,串口助手就接收不到数据了

使用特权

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

本版积分规则

7

主题

18

帖子

0

粉丝