
程序呢? 下面给你一段杜洋的书上的解释(不过好像楼主提的问题不是这个吧?)你是想问会?C8051
//
[定时/计数器函数]
-----------------------------------------------------------------------------
M1 M0 方式 说明
0 0 0 13位T/C,由TL低5位和TH的8位组成13位计数器
0 1 1 16位T/C,TL和TH共16位计数器
1 0 2 8位T/C,TL用于计数,当TL溢出时将TH中的值自动写入TL
1 1 3 两组8位T/C
-----------------------------------------------------------------------------
/
函数名:定时/计数器初始化函数
调 用:T_C_init();
参 数:无
返回值:无
结 果:设置SFR中T/C1和(或)T/C0相关参数
备 注:本函数控制T/C1和T/C0,不需要使用的部分可用//屏蔽
//
void T_C_init (void){
TMOD = 0x11; //高4位控制T/C1 [ GATE,C/T,M1,M0,GATE,C/T,M1,M0 ]
EA = 1; //中断总开关
TH1 = 0xFF; //16位计数寄存器T1高8位(写入初值)
TL1 = 0xFF; //16位计数寄存器T1低8位
ET1 = 1; //T/C1中断开关
TR1 = 1; //T/C1启动开关
//TH0 = 0x3C; //16位计数寄存器T0高8位
//TL0 = 0xB0; //16位计数寄存器T0低8位(0x3CB0 = 50mS延时)
//ET0 = 1; //T/C0中断开关
//TR0 = 1; //T/C0启动开关
}
//
/
函数名:定时/计数器1中断处理函数
调 用:[T/C1溢出后中断处理]
参 数:无
返回值:无
结 果:重新写入16位计数寄存器初始值,处理用户程序
备 注:必须允许中断并启动T/C本函数方可有效,重新写入初值需和T_C_init函数一致
//
void T_C1 (void) interrupt 3 using 3{ //切换寄存器组到3
TH1 = 0x3C; //16位计数寄存器T1高8位(重新写入初值)
TL1 = 0xB0; //16位计数寄存器T1低8位(0x3CB0 = 50mS延时)
//函数内容
}
//
/
函数名:定时/计数器0中断处理函数
调 用:[T/C0溢出后中断处理]
参 数:无
返回值:无
结 果:重新写入16位计数寄存器初始值,处理用户程序
备 注:必须允许中断并启动T/C本函数方可有效,重新写入初值需和T_C_init函数一致
//
void T_C0 (void) interrupt 1 using 1{ //切换寄存器组到1
TH0 = 0x3C; //16位计数寄存器T0高8位(重新写入初值)
TL0 = 0xB0; //16位计数寄存器T0低8位(0x3CB0 = 50mS延时)
//函数内容
}
//
举例解答如下:
利用定时器T1,对外部脉冲(P35引脚输入)计数,
每输入200次脉冲产生一次中断,累加器+1,
选用T1,计数器模式,方式2(自动重装初值8位计数器),
TMOD
=0110
0000B
=60H
计数初值
=2^8
-200
=256
-200
=56d
=38H,
汇编程序如下:
;
;
主程序:
MAIN:
CLR
A
;
;
累加器清零
MOV
TMOD,
#60H
;
;置T1计数模式、方式2
MOV
TL1,
#38H
;
;
写入计数初值
MOV
TH1,
#38H
;
;
写入留待自动重装的初值
SETB
TR1
;
;
启动T1计数
SETB
ET1
;
;
允许T1中断
SETB
EB
;
;
CPU开中断
SJMP
$
;
;
等待一轮对外部脉冲计数溢出中断
;
;
以下是T1中断处理子程序:
T1_INT:
INC
A
;
;
累加器加1
RETI
;
;
中断返回
以上就是关于单片机c51定时计数器汇编语言程序及解释全部的内容,包括:单片机c51定时计数器汇编语言程序及解释、用C51单片机统计脉冲次数、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)