仿真问题咨询

[复制链接]
938|9
手机看帖
扫描二维码
随时随地手机跟帖
llia|  楼主 | 2021-11-13 23:31 | 显示全部楼层 |阅读模式
这个程序
#include <reg51.h>
#include <stdio.h>
void delay1ms()
{
   unsigned int i;
   for(i=500000;i>0;i--);
}
void InitUART(void)  //串口波特率
{
     TMOD = 0x20;
     SCON = 0x50;
     TH1 = 0xFD;
     TL1 = TH1;
     PCON = 0x00;
     EA = 1;
     ES = 1;
     TR1 = 1;
}
void InitTimer0(void) //初始化定时器0
{
     TMOD=0x01;
     TH0=0x0DC;
     TL0=0x00;
     EA=1;
     ET0=1;
     TR0=1;
}

void main()
{
   InitTimer0();
      }  
void Timer0()interrupt 1
{    unsigned int a=0;
        unsigned char bur[4]={'A','1','2','0'};
        InitUART();
        while(a<4)
{
    SBUF=bur[a++];
    delay1ms();
     }
     TH0=0x0DC;
     TL0=0x00;
}

使用特权

评论回复
wyjie| | 2021-11-13 23:33 | 显示全部楼层

-->void Timer0()interrupt 1
应该是UART中断,T1不用中断...

使用特权

评论回复
wangzsa| | 2021-11-13 23:35 | 显示全部楼层
好NX的程序

#include <reg51.h>
#include <stdio.h>
void delay1ms()
{
        unsigned int i;
         for(i=500000;i>0;i--);
}
void InitUART(void)  //串口波特率
{
       ;;;;;; TMOD = 0x20;//已经开过了
        SCON = 0x50;
        TH1 = 0xFD;
        TL1 = TH1;
        PCON = 0x00;
        EA = 1;
        ES = 1;
        TR1 = 1;
}
void InitTimer0(void) //初始化定时器0
{
         TMOD=0x21;       //一下子打开2个得了
         TH0=0x0DC;
         TL0=0x00;
         EA=1;
         ET0=1;
         TR0=1;
}

void main()
{
         InitTimer0();
          InitUART();      //初始化放这里
          while(1);   //要加这个,不然程序跑哪了都不知道。
}  
void Timer0()interrupt 1
{   
        unsigned int a=0;
         unsigned char bur[4]={'A','1','2','0'};
         ;;;;;;;;;;;;;;;;;InitUART();//第一次初始化就好了,不用重复初始化。
         while(a<4)
        {
                 SBUF=bur[a++];
                 whiel(!TI);TI = 0;//最好加这个
                 delay1ms();
         }
          TH0=0x0DC;
          TL0=0x00;
}

使用特权

评论回复
wangzsa| | 2021-11-13 23:37 | 显示全部楼层

-->void Timer0()interrupt 1
UART使用T1做波特率,T1不用中断<当然中断也可以用>,UART中断是4

使用特权

评论回复
heweibig| | 2021-11-13 23:39 | 显示全部楼层
3楼说的很对,但是怎么会一直发送啊?

使用特权

评论回复
llia|  楼主 | 2021-11-13 23:41 | 显示全部楼层
我只改了一下这个   while(a<4)
{ a=a+1;//***************改动
    SBUF=bur[a];
    while(!TI);
    TI=0;
    delay1ms();
         }
发现会每隔一秒发送数据,而刚才的会一直发中间并没有停顿,很奇怪啊。

使用特权

评论回复
zhanghqi| | 2021-11-13 23:44 | 显示全部楼层
然后呢?你是怎么应对这个的呢

使用特权

评论回复
llia|  楼主 | 2021-11-13 23:45 | 显示全部楼层

难道执行完中断后又返回了,但是那里不是有一个while(1);吗?

使用特权

评论回复
juventus9554| | 2021-11-13 23:47 | 显示全部楼层
那就不懂了。。。

使用特权

评论回复
llia|  楼主 | 2021-11-13 23:49 | 显示全部楼层
多谢大家讨论这么多哈,呵呵

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

961

主题

8893

帖子

4

粉丝