001 /***********************************************************
002 程序功能:52系列单片机定时器计数器2使用
003 程序设计:燕山大学 鲁信琼
004 晶振选择:24MHz, 如果晶振不匹配,请修改延时函数参数;P2^6口接数码管段选控制位; P2^7口接数码管位选控制位; P1^7口作为测试指示灯
005 本实验注意事项:
006 1. 定时器2的中断使能为IE^6位,也就是ET2; 中断服务程序标号为5。
007 2. 定时器2工作在16为自动重装模式下,不需要在中断服务程序中重新赋初值,在程序初始化的时候我们应该给RCAP2L和RCAP2H赋值,TH2和TL2将会在中断产生时自动使TH2=RCAP2H,TL2=RCAP2L。
008 3. 定时器2的中断标志位TF2不能够由硬件清零,所以要在中断服务程序中将其清零,为了使定时尽量准确,我们常在终端服务程序中第一步就使TF2=0。
009 4. 使定时器2产生中断的有两个中断源,如果EXEN2(定时器2外部使能标志)置1的话,使定时器2进入中断的有可能是定时器2计数溢出,也可能是捕获到T2EX(单片机P1^1口)有负跳变,所以需要在中断服务程序中判断EXF2是否为1。
010
011 承接51单片机、PIC单片机程序、VB/VC++上位机程序、电子产品软硬件设计开发工作
012
013 EMail: xqlu(at)ysu.net.cn QQ: 9790335
014 ***********************************************************/
015
016 #include
017 #include
018 #define uchar unsigned char
019 #define uint unsigned int
020 #define LED_DATA P0
021 sbit DULA=P2^6;
022 sbit WELA=P2^7;
023 sbit LED=P1^7;
024 uchar timer2_ctr,num;
025 uchar code table[]={0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71, 0x40, 0};
026
027 //24MHz晶振延时x毫秒函数
028 void delay_ms(uint xms)
029 {
030 uint x,y;