求助,51单片机的定时器0和串口同时使用问题

sinat_27508443 2015-04-18 01:54:43
我的程序大概如下。我的目的是想单片机定时1s发送数据到PC端,但是不能发送额。
void init()
{
SCON = 0x50;//在11.0592MHz下,设置串行口波特率为9600,方式1,并允许接收
TMOD |= 0x21;//定时器0工作方式1,TH1是重装值,TL1是初值 定时器1工作方式2
TH1=0xFD; //重载值
TL1=0xFD; //初始化值
TH0 =(65536-46080)/256; //50ms
TL0 =(65536-46080)%256;

EA = 1; //开总中断
ET0 = 1;
ET1 = 0;
TR0 = 1;
TR1 = 1;
ES = 1; //打开串口中断

}

void SendOneByte(unsigned char c) //发送字节函数
{
ACC=c;
SBUF =ACC;
while(!TI);
TI = 0;

}
void SendString(char *s) //发送字符串
{
while (*s) //Check the end of the string
{
SendOneByte(*s++); //Send current char and increment string ptr
}
}





void uart() interrupt 4 using 3//串口中断
{

uchar a;
if(RI)
{
RI = 0;
a=SBUF;
// SBUF=a;
// send_char(a);

// table[num++]=SBUF;
// num++;
// num&=0x0f;

}
else
TI = 0;

}

void Timer0(void) interrupt 1 //定时器0中断
{

Time++;

}
void main()
{

init();
while(1)
{
if(Time==20)
{
Time=0;
SendString(“table”);
} }

...全文
558 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
dceacho 2015-04-21
  • 打赏
  • 举报
回复
volatile unsigned char Time;
如果没逻辑分析仪或者硬件仿真的话,用万用表量TX脚,看电压有没有变化, 好确定是没发还是波特率不对
andy_wsj 2015-04-20
  • 打赏
  • 举报
回复
1、初始化时,先打开串口中断,最后打开总中断 2、发送时,既然开来串口中断,以下语句删除 while(!TI); TI = 0; 如果TI在中断被清除,将导致死循环 3、确认波特率是否正确
sinat_27508443 2015-04-18
  • 打赏
  • 举报
回复
来此求助各位兄弟朋友~

27,511

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧