打印

晶振为20M的52,进行串口发送,为什么总出错啊?望各大侠指教

[复制链接]
1531|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cozy|  楼主 | 2007-12-17 13:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
程序:
#include <reg51.h>
#include <string.h>
void init_serialcomm(void)
{
    SCON  = 0x50;       //SCON: serail mode 1, 8-bit UART, enable ucvr 
    TMOD |= 0x20;       //TMOD: timer 1, mode 2, 8-bit reload 
    PCON |= 0x80;       //SMOD=1; 
    TH1   = 0xFB;       //Baud:4800  fosc=11.0592MHz 
    IE   |= 0x90;       //Enable Serial Interrupt 
    TR1   = 1;          // timer 1 run 
   // TI=1; 
}
 void send_char_com(unsigned char ch)  
{
    SBUF=ch;
    while(TI==0);
    TI=0;
}
main()
{
init_serialcomm();

send_char_com('a');      }

结果如下图所示:


相关帖子

沙发
computer00| | 2007-12-17 13:59 | 只看该作者

晕...估计是波特率不对吧?

使用特权

评论回复
板凳
xwj| | 2007-12-17 14:03 | 只看该作者

LZ,你的波特率是20833bps...

自己不会计算吗?

使用特权

评论回复
地板
cozy|  楼主 | 2007-12-17 15:26 | 只看该作者

谢谢大家,现在改成这样了,还有个小问题

#include <reg51.h>
#include <string.h>
void init_serialcomm(void)
{
    SCON  = 0x50;       //SCON: serail mode 1, 8-bit UART, enable ucvr 
    TMOD |= 0x20;       //TMOD: timer 1, mode 2, 8-bit reload 
    PCON |= 0x80;       //SMOD=1; 
    TH1   = 0xF5;       //Baud:9600  fosc=120MHz 
    IE   |= 0x90;       //Enable Serial Interrupt 
    TR1   = 1;          // timer 1 run 
   // TI=1; 
}
 void send_char_com(unsigned char  ch)  
{
    SBUF=ch;
    while(TI==0);
    TI=0;
 }
main()
{
init_serialcomm();

send_char_com('a');    
能在电脑上显示字符'a',但总连续显示,我本来想让让单片机只发送一次,再次请教各位大侠,程序哪个地方设置的不对

使用特权

评论回复
5
孤星119| | 2007-12-17 16:00 | 只看该作者

程序都错了

上面程序怎么能编译通过的?第一个main()还有"}",后面贴的根本就没有了,还有整个程序都没有循环结构.程序末尾应该加个while(1);

使用特权

评论回复
6
cozy|  楼主 | 2007-12-17 20:19 | 只看该作者

"}"我的程序中倒是有,就是没有while(1),不加循环不行吗?

使用特权

评论回复
7
cly1005| | 2007-12-17 20:59 | 只看该作者

要加循环结构,不然程序会跑飞的---所以会发送多次

使用特权

评论回复
8
gyt| | 2007-12-18 13:56 | 只看该作者

厉害厉害

使用特权

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

本版积分规则

94

主题

178

帖子

0

粉丝