zhanshen 发表于 2007-1-7 16:35:46

串口通信问题,电脑上显示与单片机所连接的lcd不符!~请大虾指点!谢谢!~有程序!~

if(oldsec!=sec) //秒有变动就执行下面的语句

    {

   

      display_temp(); //lcd显示

   send_string_com(buffer,6);

       oldsec =sec;

      // LED1=!LED1;

    }

上面是在主函数里调用串口的程序,下面就是串口程序

// char putchar(char ch)

void send_string_com(unsigned char *str,unsigned char strlen)

{    //*str数组指针

    unsigned char k=0;

    do

    {

      putbuf(*(str + k));

      k++;

    } while(k < strlen);

}

以下是时间分配表

void bintobcd()

{

buffer=sec%10;buffer=sec/10;

buffer=min%10;    buffer=min/10;

buffer=hour%10;    buffer=hour/10;

}

为什么程序在lcd上显示是对的时钟程序,而在串口电脑上显示的是错的啊?是不是串口通信中ASCII码有特殊的定义啊?

电脑上的显示:

字符显示?HEX显示06 18 18 18 18 18 F8 18 18 18 18 18 18 F8 ,而我的lcd显示的是00:00:01和

00:00:02,lcd时钟显示正确,但串口显示错误!~

sun926 发表于 2007-1-7 16:43:17

波特率错误。

zhanshen 发表于 2007-1-7 17:02:55

错了的话,我的怎么还显示啊?

j_sunny 发表于 2007-1-7 17:24:14

伙计.你那个掉用有问题,send_string_com(buffer,6);应该是

send_string_com(&buffer,6);

zhanshen 发表于 2007-1-7 21:24:31

我试试去!`

zhanshen 发表于 2007-1-8 11:21:29

j_sunny   你的这句send_string_com(&buffer,6);中加&有什么意义啊?

bozai 发表于 2007-1-8 11:24:06

不要加&的 buffer(数组名)就是指针,3楼说错了。

bozai 发表于 2007-1-8 11:29:41

给个建议,现确定波特率没问题,然后再发时钟的数据时每个数据+0x30后再发。

j_sunny 发表于 2007-1-8 11:39:01

void send_string_com(unsigned char *str,unsigned char strlen)

*str是一个指针;

看你的程序,要显示数组的值,得付你的数组地址,所以要加&

zhanshen 发表于 2007-1-8 11:39:49

+?我用过"|"0x30和03都不行

void send_string_com(unsigned char *str,unsigned char strlen)

{    //*str数组指针

    unsigned char k=0;

    do

    {

      putbuf((*(str + k))|0x03); //你是说的这样吧

      k++;

    } while(k < strlen);

}

zhanshen 发表于 2007-1-8 11:41:03

看看这个

void init_serialcomm(void)

{

    SCON= 0x50;       //SCON: 工作方式1, 8-bit

    TMOD |= 0x20;       //TMOD: 定时器1, 工作方式2, 8-bit

    PCON |= 0x80;       //SMOD=1;

    TH1   = 0xF4;       //4800波特率fosc=11.0592MHz

        TL1   =0xF4;

    IE   |= 0x90;       //使能串口中断

    TR1   = 1;          //运行定时器1

    istart=0;

    iend=0;

}

j_sunny 发表于 2007-1-8 11:42:36

同意7楼的说法,先测试定波特率

zhanshen 发表于 2007-1-8 11:43:57

j_sunny 发表于 2007-1-8 11:52:00

TL1=0xf4;

TH1=0xf4;            /*BAUD RATE = 2400 @ 11.0592M*/

bozai 发表于 2007-1-8 11:52:28

建议j_sunny自己去试试到底要不要加&

不至于我到现在写的那些程序都是错的吧。
-----此内容被bozai于2007-01-08,11:54:27编辑过

joson 发表于 2007-1-8 11:52:56

j_sunny ,建议你回去好好看一看数组名的具体含义

zhanshen 发表于 2007-1-8 11:56:27

81 80 80 ,82 80 80 折实1,2秒的显示!~   亐?,個?

j_sunny 发表于 2007-1-8 11:57:57

send_string_com(&buffer,6);

我一直喜欢用这个,没问题的,试了N年了

bozai 发表于 2007-1-8 11:59:33

这个是对的,用buffer不更好少打几个字

zhanshen 发表于 2007-1-8 12:01:32

TL1=0xf4;

TH1=0xf4;       /*BAUD RATE = 2400 @ 11.0592M*/

你的意思是2400的波特率?

j_sunny 发表于 2007-1-8 12:02:15

哈哈,我用惯了,忘了以前学的了

bozai 发表于 2007-1-8 12:06:48

楼主你先发字符串 最基本的hello world!程序 试试串口有没有问题不就行了吗。

zhanshen 发表于 2007-1-8 12:08:52

???,是2400的时候显示的

鴪`?堾          ,是4800的时候显示的

??&               ,是9600的时候显示的

j_sunny 发表于 2007-1-8 13:44:30

点击此处下载armok01140778.rar



我做了一个UART程序,希望能对你有所帮助,我这边已经测试,没问题,发送的第一个字节是本次发送的长度,一针小于8;能后再回显,比如:05 AA BB CC DD;回显:05 AA BB CC DD;我看你是用MCS-51,我这个也是

j_sunny 发表于 2007-1-8 13:46:24

如果你还有问题,请检查硬件了

j_sunny 发表于 2007-1-8 13:48:03

忘了告诉你,我的那个是2400的波特率

zhanshen 发表于 2007-1-8 15:21:38

好的谢谢你!~呵呵

zhanshen 发表于 2007-1-8 16:53:29

j_sunny你用的什么编程软件啊?

j_sunny 发表于 2007-1-8 17:00:43

KEIL
页: [1]
查看完整版本: 串口通信问题,电脑上显示与单片机所连接的lcd不符!~请大虾指点!谢谢!~有程序!~