- <font style="background-color: rgb(255, 255, 255);">#include<reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit fm = P2^3;//蜂鸣器对应的接口
- uint time0,time1,time;//time记次数 time0计时器0计数 time1计时器1计数
- uint code num[]={4000,400,80,40,20,10,5,4};//计时器0应该循环的次数
- void main()
- {
- time=0;
- time0=0;
- time1=0;
- fm=1;//高电平时蜂鸣器关闭 低电平时蜂鸣器响
- TMOD=0x11;//确定T0 T1的工作方式为16位定时器/计数器
- TH1=(65536-50000)/256; //计时器0装初值
- TL1=(65536-50000)%256;
- TH0=(65536-250)/256;
- TL0=(65536-250)%256;
- EA=1;//开总中断
- ET0=1;//计时器0开放中断
- ET1=1;
- TR0=1;//启动计时器0
- TR1=1;
-
- time=1;
- while(1)
- {
- if(time1==6)
- {
- time1=0;
- time++;
- if(time==8)
- time=0;
- time0=0;
- }
- else
- {
- if(time0==num[time])
- {
- fm=~fm;
- time0=0;
- }
- }
- }
- }
- //计时器0的中断号为1
- void timer0() interrupt 1
- {
- TH0=(65536-250)/256;
- TL0=(65536-250)%256;
- time0++;
- }
- //计时器1的中断号为3
- void timer1() interrupt 3
- {
- TH1=(65536-50000)/256;
- TL1=(65536-50000)%256;
- time1++;
- }</font>
复制代码
题目如下:
假设
单片机(
芯片为
STC89C52)的晶振为12MHz,同时用两个定时器控制蜂鸣器发声,定时器0控制频率,定时器1控制同个频率持续的时间,间隔300ms依次输出1,10,50,100,200,400,800,1k(hz)的方波。
按照我的理解那个1hz的方波无法输出,不知道是否正确,另外附上程序希望得到各位坛友批评指正。
-
-
lesson3.zip
下载积分: 积分 -1 分
667 Bytes, 下载次数: 6, 下载积分: 积分 -1 分
两个定时器
一周热门 更多>