打印

单片机定时发送数据的测试程序,仿真没反应。

[复制链接]
1982|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
横槊赋诗|  楼主 | 2010-5-25 12:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#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;
}

相关帖子

沙发
ayb_ice| | 2010-5-25 13:34 | 只看该作者
-->void Timer0()interrupt 1
应该是UART中断,T1不用中断...

使用特权

评论回复
板凳
一棵小草| | 2010-5-25 13:45 | 只看该作者
好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;
}

使用特权

评论回复
地板
ayb_ice| | 2010-5-25 13:49 | 只看该作者
-->void Timer0()interrupt 1
UART使用T1做波特率,T1不用中断<当然中断也可以用>,UART中断是4

使用特权

评论回复
5
横槊赋诗|  楼主 | 2010-5-25 15:36 | 只看该作者
3楼说的很对,但是怎么会一直发送啊?

使用特权

评论回复
6
ayb_ice| | 2010-5-25 16:04 | 只看该作者
我经常说"正常结果只有一种,错误结果可能千奇百怪"
先排除明显错误...

使用特权

评论回复
7
横槊赋诗|  楼主 | 2010-5-25 16:43 | 只看该作者
我只改了一下这个   while(a<4)
{ a=a+1;//***************改动
   SBUF=bur[a];
   while(!TI);
   TI=0;
   delay1ms();
        }
发现会每隔一秒发送数据,而刚才的会一直发中间并没有停顿,很奇怪啊。
难道执行完中断后又返回了,但是那里不是有一个while(1);吗?

使用特权

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

本版积分规则

0

主题

19

帖子

1

粉丝