单片机定时器0设置为工作方式1为TMOD=0x01;定时器1设置工作方式1时TMOD=0x10;还是和定时器0一样为0x01

来源:百度知道 编辑:UC知道 时间:2024/06/30 23:54:17
请高手帮忙指点一下,还有串口通信(p0控制流水灯)怎么不对呀 我是初学者请师兄师姐不吝指教一下
#include<reg52.h>
void main()
{

while(1)
{
SBUF=0xfe;
while(!TI);
if(RI==1)RI=0;
REN=1;
P0=SBUF;

}
}

在下不胜感激

答:
单片机定时器0设置为工作方式1为TMOD=0x01;定时器1设置工作方式1时TMOD=0x10.阁下看TMOD里的各个位啥意思就知道了。

#include<reg52.h>
void main()
{

while(1)
{
SBUF=0xfe;
while(!TI);
if(RI==1)RI=0;
REN=1;
P0=SBUF;

}
}

这个程序不对。
错误有:
1.主程序没设定波特率、串口工作方式、定时器初值,也没说中断还是查询方式来工作,咋个通讯啊!
2.假设已经设定好了,接下来的也不行。
while(!TI);
后面要加TI=0;清楚发送中断标志。
3.REN要放在最外头,除非你发送时不允许接收,才在里头写。
4. if(RI==1)RI=0;
要写成:while(!RI);RI=0;
一直等到接收完毕才将RI清零。接收时要停在哪儿等着,呵呵。所以是while不能是if.
#include<reg52.h>
void main()
{

TMOD=0x20;
SCON=0x50;//串口通讯方式1
TH1=0xfd;//波特率9600
TL1=0xfd;
TR1=1;
TI=0;//发送中断标志位清零
RI=0;//接收中断标志位清零
while(1)
{
SBUF=0xfe;
while(!TI);Ti=0;
while(!RI);Ri=0 ;
P0=SBUF;

}
}

1.定时器0,1共用一个模式寄存器
低4位用于设置定时器0,高4位用于设置定时器1
所以