标题:
STC12C5A16S2单片机的定时器操作演示实验
[打印本页]
作者:
DENGWEIXIN
时间:
2016-11-23 22:53
标题:
STC12C5A16S2单片机的定时器操作演示实验
#include<reg51.h>
/************* 本地常量声明 **************/
#define Main_Fosc 11059200UL //定义外部晶振频率
#define TIME (65536-Main_Fosc/1000) //定义定时器时间溢出数
/************* 特殊寄存器声明 **************/
sfr AUXR=0x8E; //辅助寄存器AUXR声明
sfr WAKE_CLKO=0x8F; //时钟输出和掉电唤醒寄存器声明
/************* 特殊位声明 **************/
sbit P1_0=P1^0; //LED灯的控制管脚P1_0声明
/************* 本地变量声明 **************/
unsigned int count; //普通计数变量声明
void main()
{
AUXR=0x80; //定时器0工作在1T模式下
TMOD=0x01; //定时器0工作在模式1(16位定时器/计数器)下
TL0=TIME; //计数值低8位装入定时器低计数寄存器中
TH0=TIME>>8; //计数值高8位装入定时器高计数
TR0=1; //允许定时器0开始计数
ET0=1; //开定时器0中断
P1_0=1; //将P1的第0管脚设置为输出,这时LED灯亮
EA=1; //开中断
count=0; //初始化计数值
while(1)
;
}
/*******************************************************
* 函数名:timer0_out()
* 输入:无
* 输出:无
* 功能描述:定时0溢出终端处理函数。每隔1us产生溢出中断,这时候count的值由5000减1
* 当count值减为0时,改变LED灯状态,同时又从5000开始计数。
******************************************************/
void timer0_out() interrupt 1
{
TL0=TIME;
TH0=TIME>>8;
if(count-- ==0)
{
count=5000;
P1_0=~P1_0;
}
}
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1