微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 51单片机求助~

51单片机求助~

时间:10-02 整理:3721RD 点击:
刚开始学习51单片机  要求是
同时用两个定时器控制蜂鸣器发声,定时器0控制频率,定时器1控制同个频率持续的时间,间隔300ms依次输出1,10,50,100,200,400,800,
1k(hz)的方波。
我的蜂鸣器是p1.2口
#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar num,b;
uint count;
sbit speak=P1^2;
uint code freq[]={1000,100,20,10,5,1}
void main()
{
        EA=1;
        ET0=1;
        ET1=1;
        TMOD=0x11;
        TH0=(65535-500)/256;
        TL0=(65535-500)%256;
        TH1=(65535-50000)/256;
        TL1=(65535-50000)%256;
        TR0=1;
        TR1=1;
        while(1);
}
void speak_ferq() interrupt 1
{
        TH0=(65535-500)/256;
        TL0=(65535-500)%256;
        count++;
        if(count==freq[num])
        {
                speak=!speak;
        }
}
void speak_kg() interrupt 3
{
        TH1=(65535-50000)/256;
        TL1=(65535-50000)%256;
        b++;
        if(b==6)
        {
                TR0=!TR0;
                num++;
                if(num==12);
                {
                        num=0;
                }
        }
}
提示信息
PROJECT2.C(19): error C231: 'TR0': redefinition
PROJECT2.C(20): error C231: 'TR1': redefinition
PROJECT2.C(20): error C231: 'TR1': redefinition
PROJECT2.C(21): error C141: syntax error near 'while'
PROJECT2.C(21): error C141: syntax error near '1'

TR0 和 TR1是重定义错误,后面两个语法错误。重定义看是不是头文件的问题,语法错误那就看看是不是标点符号,括号啊什么的是不是错了。很好找的。
定时器0你定义的是500微秒一次,定时器定义的是50毫秒中断一次,是不是同你的要求不一样,我觉得应该得不到你要的结果,在好好研究下,这个不难的。

恩我看了下 头文件是正确的  并且可以定义 范例中的TR0 和TR1  语法错误的话我还没找到  我再找找看  然后不同的定时器定义   500微秒的定义产生方波(无法产生200 400 800 hz的方波,所以我去掉了200 400 800  hz的要求,想试下程序是否能够运行)

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top