求教!c8051串口发送数据

[复制链接]
4739|10
 楼主| jhzh951753 发表于 2011-9-9 14:14 | 显示全部楼层 |阅读模式
c8051f120当用串口发送数据是这样写函数对不对呢?调试的时候怎么到while(!flag_send);的时候就不动了。。

unsigned char flag_send=0;  
unsigned char flag_rece=0;


void uart_sendB(unsigned char const sbyte)
{
SBUF0=sbyte;
while(!flag_send);
flag_send=0;
}
dengm 发表于 2011-9-9 14:20 | 显示全部楼层
flag_send is TI.
草履虫 发表于 2011-9-9 14:22 | 显示全部楼层
不对.
串口发送中断标志位 = 0;
sbuf = 要发送的数据;
while(!串口发送中断标志位);
串口发送中断标志位 = 0;
另外需要注意寄存器页地址问题.
 楼主| jhzh951753 发表于 2011-9-9 14:28 | 显示全部楼层
3# 草履虫 串口中断标志位 是哪个啊?上面的程序flag_send=0;就是串口标志位啊 。。sbuf0 也是要发送的数据。。
joyme 发表于 2011-9-9 14:36 | 显示全部楼层
为什么不直接用TI,而用flag_send,你的flag_send是怎么定义的?TI 是单片机里的特殊寄存器,用sfr(可能不同的单片机不一样)关键词定义的
 楼主| jhzh951753 发表于 2011-9-9 14:44 | 显示全部楼层
5# joyme
我也不知道我是拿得别人的程序改得。。直接用TI0 么?
joyme 发表于 2011-9-9 15:04 | 显示全部楼层
 楼主| jhzh951753 发表于 2011-9-9 15:22 | 显示全部楼层
debug的时候查看SBUF0里面一直是0x00,,即使给他赋值的话也不行。。。
ayb_ice 发表于 2011-9-9 15:28 | 显示全部楼层
这样也行,但中断要做适当处理
void isr_uart0(void) interrupt 4
{
     if(TI0){
        TI0 = 0;
         flag_send = 1;
     }
.............
}
wanghongxing 发表于 2011-9-9 17:56 | 显示全部楼层
wanghongxing 发表于 2011-9-9 18:06 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:<table><tr><td>我在这里呢!!~ </td></tr></table>

1

主题

127

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部