3
收藏
微博
微信
复制链接

关于定时计数器的问题?

提问于
2022-07-24 23:36

下面程序用T1可以用,改成T0就用不了了,帮我看下哪里改错了,谢谢!!


#include
#include
sbit s=P3^2;
unsigned char tmp;
main()
{
        SCON = 0x50;                        // 设定串行口工作方式   串口方式1  功能:8位数据UART,可变(T1溢出率/n?课件128
        PCON &= 0xef;                        // 波特率不倍增   课件129


        TMOD = 0x02;                        // 定时器0工作于8位自动重载模式, 用于产生波特率  方式2   自动再装入8位计数器   课件60页


        TH0 = 0xe6;                                // 波特率1200
        TL0 = 0xe6;
        //IE=0x82;
        TR0 =1;                                // 启动定时器0


        EA =1;                        //开总中断
        EX0 = 1;                //允许外部中断0中断
        IT0=0;          //设置为电平触发方式
        //TCON = 0x01;
        //        ES=1;        //允许串口中断  课件73



       
        while(1)
        {
                if(RI)
                {
                        s=0;
                }
        }


}


void External_Interrupt_0() interrupt 0
{

        RI = 0;                 //如果没有 RI=0; 将一直产生中断
        tmp = SBUF;                    // 暂存接收到的数据       
        P0 = tmp;                                // 数据传送到P0口
        SBUF =tmp;
        while(!TI);                                // 等特数据传送  传送完成后TI=1,TI=0说明还没传送完还得继续等待
        TI = 0;                                        // 清除数据传送标志
        s=1;                                        //如果没有 s=1; 将一直产生中断
}

收藏 561 0 3
粉丝
0
关注
0
主题
3
好像51的t0不可以用8位自动重装载方式做波特率发生器用。
0

回答于 · 2022-07-25 02:32

粉丝
0
关注
0
主题
6
根据课本,T0不可以当做波特率发生器用
0

回答于 · 2022-07-25 07:16

粉丝
0
关注
0
主题
5
很好...
0

回答于 · 2022-07-25 08:08