微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 求助PIC18F45K40串口发送字符串的问题

求助PIC18F45K40串口发送字符串的问题

时间:10-02 整理:3721RD 点击:
最近碰到一个棘手的问题,关于这个片子发送字符串的问题,void Uart1Sends(const uchar *str)
{
        TX1STAbits.TXEN=1;
        while(*str!='\0')
        {
                TXREG1=*str;
                str++;
                while(! TX1STAbits.TRMT);
             Delay_us(10);
        }
         TX1STAbits.TXEN=0;
}
void Uart1Send(uchar c)
{
        TX1STAbits.TXEN=1;
        TXREG=c;
        while(!TX1STAbits.TRMT);//等待发送寄存器空
        TX1STAbits.TXEN=0;
}
这两个一个发送字符串一个发送字符,用pic18f4520 在maplab v8.93使用HITECH下可以发送,但是用PIC18F45K40在maplab使用xc8下,只能发送字符,而不能发布字符串,求大神们指导

现在的问题是 字符串的值传递过去后全部都是0,我定义了一个数组存放字符串, 用软件仿真的话都是有值的,一旦下到目标板调试的时候观察变量就没有值了所有的都啊是00  

应该是指针数组调用的问题,查查使用指针做为形参有什么要注意的问题。

这个不能发送的原因还没找到,只是我一层一层的找,发现一个问题
const  uchar atcon[9]={'A','B','C','D','E','F','G','H','I'};这是我定义的一个数组
然后调用
void Uart1Send(uchar c)
{
        TX1STAbits.TXEN=1;
        TXREG1=c;
        while(!TX1STAbits.TRMT);//等待发送完成信号(TI=1)出现
        TX1STAbits.TXEN=0;
}
这个字符发送函数,Uart1Send(atcon[2]); 这个时候发送出来的数据是00感觉数组和字符串的值不能读取,不知道是什么原因,这写在4520,6720上没有出现这个情况,换了个编译器和开发环境就出现了这个情况

可能还是参数调用方式上的问题,C语言很灵活,也有很多隐性的规则,我之前试过调一个51的C程序,用了指针做形参,结果调不通,后来没细查什么问题,换成了其他方式做出了结果。
你可以先用其他的方式把程序调通,然后再看是什么原因导致现在的问题。

const  uchar atcon[9]={'A','B','C','D','E','F','G','H','I'}
再定义一个中间变量,unsigned char temp;
temp=atcon[6];在线调试的时候观察中间变量temp的值是0x00,说明这个字符没有赋给temp,发送是正常的只不过数据都是00 所以while(*str!='\0')这个循环不会进去,不单单是字符,字符串,包括整型的数据。赋给中间变量,这个中间变量也都没有值下图是我在线调试时候的图片,


谢谢人中狼的回答,问题已经找到,是这个片子的硬件bug,按照官方的手册,已经找到了解决办法,现在可以发送了

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top