发新帖我要提问
123
返回列表
打印

大神求救:51单片机发送字符串显示零

[复制链接]
楼主: Jinss
手机看帖
扫描二维码
随时随地手机跟帖
41
Jinss|  楼主 | 2014-9-10 18:10 | 只看该作者 |只看大图 回帖奖励 |倒序浏览
wangch_sh 发表于 2014-9-10 16:51
在一个文件中定义,在其他文件中用extern声明。

请问前辈是C文件还是头文件中定义,在头文件还是C文件中声明?

使用特权

评论回复
42
Jinss|  楼主 | 2014-9-10 18:14 | 只看该作者
前辈,如果在头文件中定义字符数组变量,在C文件中使用,串口发出去的都是零呀。为什么呀?
我之前是吧字符数组直接定义在串口C文件中的就可以

使用特权

评论回复
43
Jinss|  楼主 | 2014-9-10 18:15 | 只看该作者
望前辈指教。

使用特权

评论回复
44
wangch_sh| | 2014-9-10 18:16 | 只看该作者
你不是多个C文件吗?

使用特权

评论回复
45
wangch_sh| | 2014-9-10 18:17 | 只看该作者
多个C文件对应多个H文件

使用特权

评论回复
46
wangch_sh| | 2014-9-10 18:19 | 只看该作者
不管你在C文件里定义还是声明,在一组文件(C文件加上对应的H文件)只能有一个。
也就是说C文件定义了,H文件就什么都不用做。
C文件声明了,H文件就什么也不用做。
反之,也一样。

使用特权

评论回复
47
Jinss|  楼主 | 2014-9-10 18:19 | 只看该作者
我只用一个H文件。其他全是C文件,而且C文件都包含这个H文件。我是这样做的。

使用特权

评论回复
48
wangch_sh| | 2014-9-10 20:23 | 只看该作者
在H文件里定义,在用到的C文件里声明。

使用特权

评论回复
49
xuwulian| | 2014-9-11 11:37 | 只看该作者
C文件:
unsigned char state1data[7]={"STATE1"};
头文件:
extern unsigned char state1data[7];
这样才行

使用特权

评论回复
50
Jinss|  楼主 | 2014-9-11 19:56 | 只看该作者
wangch_sh 发表于 2014-9-10 20:23
在H文件里定义,在用到的C文件里声明。

前辈能不能举个具体的例子。小弟谢谢了。

使用特权

评论回复
51
wangch_sh| | 2014-9-11 20:13 | 只看该作者
ILI9481_HYDIS_IPS035_2.rar (369.17 KB)

使用特权

评论回复
52
Jinss|  楼主 | 2014-9-11 20:19 | 只看该作者
有没有前辈遇到过串口打印出错的情况。

新建位图图像.bmp (60.55 KB )

新建位图图像.bmp

使用特权

评论回复
53
Jinss|  楼主 | 2014-9-11 20:21 | 只看该作者
本帖最后由 Jinss 于 2014-9-11 22:16 编辑

本来应该打印1:0.012:0.151:0.012:0.15
void interrupt0() interrupt 0
{
        timercount = 0;         //reset  
        IE = 0x0;                   //disable all interrupt
//        TCON = 0x05;        //0b0000 0101
                                         //shutdown t0 and t1
                                         //reset t0 and t1 interrupt flag bit
        if(INTc == 0)             //state1
        {
                //TCON = 0x01;//int0 negative edge triggered,int0
                                        //low voltage triggered
                uart();
                IE = 0x83;       //enable t0 and int0 inerrupt
                TR0 = 1;
        }
        else                          //state2
        {
                uart();
                IE = 0x89;        //enable UART1,t1 and int0 interrupt
                TR1 = 1;
        }
        INTc = ~INTc;
}
void uart()
{
        unsigned char i;
        unsigned char state1data[7]={"1:0.01"};
        unsigned char state2data[7]={"2:0.15"};
        RCAP2L = 0xdc;
        RCAP2H = 0xff;
        T2CON = 0x34;        //timer2
        SCON = 0x40;          //0b0100 0000
                                        //mode 1, receive disabled,
        PCON = 0x0;           //baudrate no multiply, frame no error check

使用特权

评论回复
54
xuanxuy| | 2014-9-11 23:03 | 只看该作者
RCAP2L=0xa0;//载入初值9600
RCAP2H=0xff;


应该改为

RCAP2L=0xa0;//载入初值9600
RCAP2H=0xa0;
这样应该就对了

使用特权

评论回复
55
qq2512262471| | 2014-9-11 23:21 | 只看该作者
顶!

使用特权

评论回复
56
Jinss|  楼主 | 2014-9-12 22:04 | 只看该作者
xuanxuy 发表于 2014-9-11 23:03
RCAP2L=0xa0;//载入初值9600
RCAP2H=0xff;

89c52rc的定时器2用作串口时钟的时候,RCAP2H和RCAP2L构成一个16位的寄存器存放定时器溢出的重装值。不是你说的这样的吧。

使用特权

评论回复
57
wangguiyuan1983| | 2014-9-14 19:51 | 只看该作者
学习了!!!!

使用特权

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

本版积分规则