发 帖  
原厂入驻New
[问答]

求助一个单片机串口通信问题,跪求了!

1219 单片机
分享
#include<reg52.h>
#define uchar unsigned char
#define uint unsigend int

uchar flag,num,T0_flag,b,i;
uchar code string[]={" This is "};
sbit buzz=P1^4;           //定义蜂鸣器
void init();           //初始化
void buzz_1();

void main()                   //主函数
{
        init();
        while(1)
        {
                buzz_1();
                if(flag==1)
                {                       
                        ES=0;
                        if(num==4||num==0)
                        {
                                ET0=0;                                 
                                TR0=0;
                                buzz=0;
                        }
                        else if(num==1||num==2||num==3)
                        {
                                ET0=1;
                                TR0=1;
                        }
                        for(i=0;i<9;i++)
                        {
                                SBUF=string[i];       
                                while(!ti);
                                TI=0;
                        }
                        SBUF=num;
                        while(!TI);
                        TI=0;
                        ES=1;
                        flag=0;                                                       
                }
        }
}
void init()
{
        T0_flag=0;
        b=0;
        flag=0;                           //对串口中断标示位初始化
        buzz=0;                           //蜂鸣器初始化为关闭状态
        TMOD=0x20;                 //确定T0定时器工作方式1,T1定时器工作方式2
        TH0=0x4c;                //T0定时器高八位装入初值
        TL0=0x00;                 //T0定时器低八位装入初值 用于设置50ms的中断
        TH1=0xfd;                //T1定时器高八位装入初值
        TL1=0xfd;                 //TI定时器低八位装入初值 设置波特率 为9600
        ET0=0;                         //打开T0 中断
        TR0=0;                          //允许T0中断
        TR1=1;                          //允许T1中断
        REN=1;                          //允许串行接收位
        SM0=0;                         
        SM1=1;                        //设置SM0=1,SM1=1时  串口工作方式1
        EA=1;                        //打开总中断
        ES=1;                        //打开串口中断
}

void buzz_1()
{
        switch(num)
        {
                case 1:
                b=8;
                break;
                case 2:
                b=4;
                break;
                case 3:
                b=2;
                break;
        }
        if(T0_flag==b && T0_flag!=0)
        {
                T0_flag=0;
                buzz=~buzz;
        }
}

void time_1() interrupt 1                 //T0定时器 中断
{
         TH0=0x4c;
         TL0=0x00;
         T0_flag++;
}
void ser() interrupt 4                        //串口中断
{
        RI=0;
        num=SBUF;
        flag=1;
}


这段代码,串口部分没问题 可以收发数据,但是蜂鸣器部分,不响, 我用T0定时器不工作,跪求高手指点! 万分感谢!

0
2014-5-15 16:51:02   评论 分享淘帖 邀请回答
5个回答
检查一下你的定时中断吧,年轻人void time_1() interrupt 1                 //T0定时器 中断
2014-5-15 17:25:29 评论

举报



yumourende 发表于 2014-5-15 17:25
检查一下你的定时中断吧,年轻人void time_1() interrupt 1                 //T0定时器 中断
...



要怎么改,求指点,串口中断执行完后, 定时中断 出问题,由于刚学,没什么经验,求牛人指点下! 感激不尽!
2014-5-15 17:38:24 评论

举报



yumourende 发表于 2014-5-15 17:25
检查一下你的定时中断吧,年轻人void time_1() interrupt 1                 //T0定时器 中断
...



中断一我设置的是50ms ! 用的11.0592MHz的晶振!
2014-5-15 17:40:05 评论

举报



yumourende 发表于 2014-5-15 17:25
检查一下你的定时中断吧,年轻人void time_1() interrupt 1                 //T0定时器 中断
...



谢谢提醒! 万分感谢!  恍然大悟,我定时器0的工作模式没设置!
2014-5-15 21:13:07 评论

举报

昨天晚上 没上的。。。你问我 我没看到啊 SORRY 不过解决问题就好
2014-5-16 08:40:34 评论

举报

撰写答案

你正在撰写答案

如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。

高级模式
您需要登录后才可以回帖 登录 | 注册

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
我要提问
快速回复 返回顶部 返回列表