OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7520|回复: 5

今天用STC12C5A60S2芯片弄串口的时候出现一个问题,至今未解决,求问各位高手

[复制链接]

28

主题

109

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
223
金钱
223
注册时间
2013-4-14
在线时间
24 小时
发表于 2013-8-28 16:08:04 | 显示全部楼层 |阅读模式
u16 add;

void UART_init()
{                     //初始化串行口和波特率发生器 
SCON =0xE0;           //选择串口工作方式3,打开接收允许
TMOD =0x20;           //定时器1工作在方式2,定时器0工作在方式1
TH1 =0xF8;     //实现波特率而计算的填充值
TL1 =0XFA;            //实现波特率9600(系统时钟30MHZ)
TR1 =1;               //启动定时器T1
ET1 =0;
//AUXR=64;            //加上此句波特率可以加倍12倍
ES=1;                 //允许串行口中断
PS=1;                 //设计串行口中断优先级
EA =1;                //单片机中断允许
}
void   uart_isr()    interrupt   4 
{
    if(RI)
    { RI=0;
      add=SBUF;
    }
}
void   Send(u8 a) //发送单字数据
{  
TI=0;  
    SBUF=a;
while(TI==1);
    TI=0;  
}

/*void Send_n() //发送多数据
{
u8 i;
ES=0;
for(i=0;i<8;i++)
{
Send();
}
ES=1;
} */

void SendString(u8 *s)
{
    while (*s!='\0')                  //判断字符串结束标志
    {
        Send(*s);             //发送字符
s++;
DelayMs(100);
    }

}
void  main(void)
{
UART_init(); 
Send('b');
DelayMs(100);            
SendString("ad");
DelayMs(100); //每发送一个字节都需要延时
           Send('k');

程序大概就这样,刚开始只能打印第一个b,调了一下午都不行,结果我一加延时程序就能把后面的都打印完了。如果我不加delayms延时0.1s,那么串口调试助手就只能接受第一个b,延时短了也不行,为什么需要延时???我记得串口不需要延时的?谢谢
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2013-8-28 17:55:34 | 显示全部楼层
回复【楼主位】布沙尼神甫:
---------------------------------
我记得main函数应该有个死循环的。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

28

主题

109

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
223
金钱
223
注册时间
2013-4-14
在线时间
24 小时
 楼主| 发表于 2013-8-28 20:53:37 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
有的有的,main函数我删减了很多不相关的程序,只把串口的留下来了
回复 支持 反对

使用道具 举报

28

主题

109

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
223
金钱
223
注册时间
2013-4-14
在线时间
24 小时
 楼主| 发表于 2013-8-28 21:09:26 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
应该是只贴出串口相关的部分,其它内容都没贴出来
回复 支持 反对

使用道具 举报

3

主题

10

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2013-8-22
在线时间
0 小时
发表于 2013-9-1 16:34:09 | 显示全部楼层
你不要 初始化函数中的 ET1=0 试试  不需要定时器进入中断  还有SCON=0x50; 和TH1和TL1不是要相等吗? 回答错了 不要怪,我也是刚学60s2...
回复 支持 反对

使用道具 举报

28

主题

109

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
223
金钱
223
注册时间
2013-4-14
在线时间
24 小时
 楼主| 发表于 2013-9-1 23:06:04 | 显示全部楼层
回复【5楼】叫兽:
---------------------------------
好的,谢谢,明天上班了试试
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 17:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表