实验内容:
使用Keil4编写程序利用AT89C52芯片上的定时器0 工作方式2,使连接在P1.0口的小灯实现0.5秒间隔的亮灭翻转,并利用Proteus进行仿真验证。
仿真图
源代码
#include <reg52.h>
//#include <at89x52.h> 两个头文件二选一
#define uchar unsigned char //宏定义
#define uint unsigned int
uint count;
sbit led=P1^0;
/******************************************************
*函数名:timer0_init
*功能:定时器0初始化
*参数:无
*******************************************************/
void timer0_init()
{
TMOD &= 0xF0; //设置为工作方式2
TMOD |= 0x02;
TH0 = 256-250; //设置自动重装载值为6
TL0 = 256-250; //计数器从6开始计数
ET0=1; //开定时器2中断
TR0=1; //启动定时器2
}
/******************************************************
*函数名:main
*功能:主程序入口
*参数:无
*******************************************************/
void main()
{
timer0_init(); //定时器T2初始化
EA=1; //开启总中断
while(1){ //死循环
;
}
}
/******************************************************
*函数名:timer0_ISR
*功能:中断函数入口
*参数:无
*******************************************************/
void timer0_ISR() interrupt 1
{
count++;
if(count==2000) //250us*2000=500ms=0.5秒中断一次
{
count=0;
led=~led; //翻转小灯
}
}