网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
12月25日漏签0天
51单片机吧 关注:74,236贴子:303,365
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 0回复贴,共1页
<<返回51单片机吧
>0< 加载中...

我写的单片机uart通信为什么打印出来的顺序错乱呀

  • 只看楼主
  • 收藏

  • 回复
  • fangding1997
  • 白丁
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
代码如下
# include "SC92F725X_C.h"
bit UartSendFlag = 0; //发送中断标志位
bit UartReceiveFlag = 0; //接收中断标志位
char p[]="linx\r\n";
int i;
int j;
int k;
void Uart_Init(){
P1CON |=0xF3; //给两个引脚1来允许输出
P1PH &=0x0C; //设置两个引脚0来允许上拉的输出
SCON =0x50; //串口控制寄存器,方式1通信高两位表示模式00 01 10 11,第四位表示允许接受
PCON |=0x80; //电源管理寄存器,最高位波特率设置,0在1/12时钟运行,1在1/4时钟运行
//以上是串口设置
T2CON =0x00; //TCON控制timer0和timer1,T2con中不但有timer2控制还有uart选择,这里选择了定时器1收发波特率
TMOD=0X20; //定时器工作模式寄存器,可以选择作为计数器还是定时器,定时模式,8位自动重载模式
TMCON=0X02;//选择计时器1的时钟 是1倍系统时钟
//注意使用timer2的话代码略有不同
TL1 = 217;
TH1 = 217; //UART 波特率24M情况下=38400,计算公式见手册15.2;
TR1 = 1; //启动Timer0
EUART = 1; //允许UART中断
EA = 1; //开总中断
//以上是定时器控制中断设置
}
void UartInt(void) interrupt 4//4表示串口中断
{
if(TI)//SCON中的读写控制,TI发送中断标志
{
TI = 0;
UartSendFlag = 1;
}
if(RI)//SCON中的读写控制,RI接受中断标志
{
RI = 0;
UartReceiveFlag = 1;
}
}
unsigned char tx_data;
void SendByte(tx_data)
{
SBUF=tx_data;//似乎这里会自动把字符指针转换成byte
while(!UartSendFlag)
UartSendFlag=0;
}
void SendString(char *s)
{
while(*s)
{
SendByte(*(s++));
//for (i=200;i<1;i--){
//for (j=200;j<1;j--);}
}
}
void delay(k)
{for (i=200;i<1;i--){
for (j=200;j<1;j--){
while(k>1,k--);}
}
}
void main()
{
Uart_Init();
while(1){
SendString(p);
delay(1000);
}
}


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 0回复贴,共1页
<<返回51单片机吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示