打印

仿真问题咨询

[复制链接]
1276|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
llia|  楼主 | 2022-12-4 13: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;
}

使用特权

评论回复
沙发
chenjunt| | 2022-12-4 13:34 | 只看该作者

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

使用特权

评论回复
板凳
zhaoxqi| | 2022-12-4 13:36 | 只看该作者
好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;
}

使用特权

评论回复
地板
zwll| | 2022-12-4 13:38 | 只看该作者

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

使用特权

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

使用特权

评论回复
6
llia|  楼主 | 2022-12-4 13:49 | 只看该作者
难道执行完中断后又返回了,但是那里不是有一个while(1);吗?

使用特权

评论回复
7
tpgf| | 2023-1-3 16:00 | 只看该作者
对的 执行完成之后肯定是要回到while循环里边

使用特权

评论回复
8
qcliu| | 2023-1-3 16:07 | 只看该作者
llia 发表于 2022-12-4 13:46
我只改了一下这个   while(a

我看楼主配置的是每隔1毫秒发送啊 实际上是一秒一次吗

使用特权

评论回复
9
drer| | 2023-1-3 16:14 | 只看该作者
在初始化的时候尽量把时钟的初始化放在前边比较好

使用特权

评论回复
10
coshi| | 2023-1-3 16:21 | 只看该作者
在系统时钟的配置以及分频系数上是不是有些问题呢

使用特权

评论回复
11
kxsi| | 2023-1-3 16:28 | 只看该作者
zhaoxqi 发表于 2022-12-4 13:36
好NX的程序

#include

whiel(!TI);TI = 0;  请问这个语句的作用是什么啊

使用特权

评论回复
12
wiba| | 2023-1-3 16:48 | 只看该作者
我们在仿真的时候可以在关键部分打断点进行观察吗

使用特权

评论回复
13
MessageRing| | 2023-1-19 20:56 | 只看该作者
执行完成之后肯定是要回到while循环里边

使用特权

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

本版积分规则

961

主题

8893

帖子

4

粉丝