打印

仿真没反应

[复制链接]
1463|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
栩栩如生|  楼主 | 2011-7-20 17:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#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;
}
沙发
supernan| | 2011-7-20 17:24 | 只看该作者
-->void Timer0()interrupt 1
应该是UART中断,T1不用中断...

使用特权

评论回复
板凳
llljh| | 2011-7-20 17:30 | 只看该作者
好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;
}

使用特权

评论回复
地板
司徒老鹰| | 2011-7-20 17:34 | 只看该作者
-->void Timer0()interrupt 1
UART使用T1做波特率,T1不用中断<当然中断也可以用>,UART中断是4

使用特权

评论回复
5
renyaq| | 2011-7-21 09:55 | 只看该作者
3楼说的很对,但是怎么会一直发送啊?

使用特权

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

使用特权

评论回复
7
dingy| | 2011-7-21 10:54 | 只看该作者
不懂,帮顶了

使用特权

评论回复
8
栩栩如生|  楼主 | 2011-7-21 11:24 | 只看该作者
难道执行完中断后又返回了,但是那里不是有一个while(1);吗?

使用特权

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

本版积分规则

310

主题

2657

帖子

0

粉丝