51单片机 高手帮忙

来源:百度知道 编辑:UC知道 时间:2024/05/13 02:48:38
请高手给我解释解释这段程序
/*
同时用两个定时器控制蜂鸣器发声,
定时器0控制频率,定时器1控制同个
频率持续的时间,间隔2s依次输出
1,10,50,100,200,400,800,
1k(hz)的方波?
设晶振频率为12MHz。
*/
/*********************************************************/
#include<reg52.h> //52单片机头文件
#include <intrins.h> //包含有左右循环移位子函数的库
#define uint unsigned int //宏定义
#define uchar unsigned char //宏定义
sbit beep=P2^3;
uchar tt;
uint fre,flag;

void main() //主函数
{
fre=50000;
beep=0;
TMOD=0x11;//设置定时器0,定时器1为工作方式1
TH0=(65536-fre)/256;
TL0=(65536-fre)%256;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
EA=1;//开总中断
ET0=1;//开定时器0中断
ET1=1;
TR1=1;
TR0=1;//启动定时器0
while(1);//等待中断产生

}

void timer0() interrupt 1 //定时器0中断
{
TR0=0; //进中断后先把定时器0中断关闭,防止内部程序过多而造成中断丢失
TH0=(65536-fre)/256;
TL0=(655

这个程序写的不好,没有必要讲了,太低水平了,这个程序完全可以不使用这个语句
TH0=(65536-fre)/256;
TL0=(65536-fre)%256;
这个语句会生成很多代码的想写好的程序要了解汇编语言,在给FRE赋值时就可以直接设置下次中断时间,会少生成很多代码的。


这不是郭天翔的程序么
看完书
你就懂了