51单片机C语言中断程序定时计数器

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

51单片机C语言中断程序定时/计数器

程序一

利用定时/计数器T0从P1.0输出周期为1s 的方波,让发光二极管以1HZ闪烁,

#include //52单片机头文件

#include //包含有左右循环移位子函数的库#define uint unsigned int //宏定义

#define uchar unsigned char //宏定义

sbit P1_0=P1^0;

uchar tt;

void main() //主函数

{

TMOD=0x01;//设置定时器0为工作方式1

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

EA=1;//开总中断

ET0=1;//开定时器0中断

TR0=1;//启动定时器0

while(1);//等待中断产生

}

void timer0() interrupt 1

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

tt++;

if(tt==20)

{

tt=0;

P1_0=~P1_0;

}

}

程序二

利用定时/计数器T1产生定时时钟,

由P1口控制8个发光二极管,

使8个指示灯依次一个一个闪动,

闪动频率为10次/秒(8个灯依次亮一遍为一个周期),循环。#include //52单片机头文件

#include //包含有左右循环移位子函数的库

#define uint unsigned int //宏定义

#define uchar unsigned char //宏定义

sbit P1_0=P1^0;

uchar tt,a;

void main() //主函数

{

TMOD=0x01;//设置定时器0为工作方式1 TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

EA=1;//开总中断

ET0=1;//开定时器0中断

TR0=1;//启动定时器0

a=0xfe;

while(1);//等待中断产生

}

void timer0() interrupt 1

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

tt++;

if(tt==2)

{

tt=0;

a=_crol_(a,1);

}

}

程序三

同时用两个定时器控制蜂鸣器发声,

定时器0控制频率,定时器1控制同个

频率持续的时间,间隔2s依次输出

1,10,50,100,200,400,800,

1k(hz)的方波

#include //52单片机头文件

#include //包含有左右循环移位子函数的库#define uint unsigned int //宏定义

#define uchar unsigned char //宏定义

sbit beep=P2^3;

uchar tt;

uint fre,flag;

void main() //主函数

{

fre=50000;

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=(65536-fre)%256;

tt++;

if(flag<40) //以下几个if分别用来选取不同的频率

{

tt=0;

fre=50000;

beep=~beep;

}

if(flag>=40&&flag<80) {

tt=0;

fre=50000;

beep=~beep;

}

if(flag>=80&&flag<120) {

tt=0;

fre=10000;

beep=~beep;

}

if(flag>=120&&flag<160) {

tt=0;

fre=5000;

beep=~beep;

}

if(flag>=160&&flag<200) {

tt=0;

fre=2500;

beep=~beep;

}

if(flag>=200&&flag<240) {

tt=0;

fre=1250;

beep=~beep;

}

if(flag>=240&&flag<280) {

tt=0;

fre=625;

beep=~beep;

}

if(flag>=280&&flag<320) {

相关文档
最新文档