采用定时器/计数器T0对外部脉冲进行计数,每计数100个脉冲后,T0转为定时工作方式。定时1ms后,又转为计数

ORG 0000H

AJMP MAIN

ORG 000BH

AJMP IT0P

MAIN:mov TMOD,#06H; 程序的初始化(TMOD IE TCON特殊功能寄存器的设置初始化)

mov TL0,#156H

mov TH0,#156H

SETB EA

SETB ET0

SETB TR0

CLR F0 ;设置下一轮为定时方式的标志位

WAIT: AJMP WAIT

IT0P: CLR EA ;CPU关闭中断

JB F0,EXTN1 ;F0=1转计数工作模式

mov TMOD,#00H

mov TL0,#ocH

mov TH0#0feH

SETB EA

RETI

EXTN1:mov TMOD,#06H

mov TL0,#156H

mov TH0,#156H

SETB EA

RETI

这是书上给出的答案,但这样并没有实现自动转换,要手动置F0的值才能转吧,怎么自动呢?

ORG 0000HAJMP MAIN ORG 000BH AJMP IT0PMAIN:mov TMOD,#06H; 程序的初始化(TMOD IE TCON特殊功能寄存器的设置初始化) mov TL0,#156H mov TH0,#156H SETB EA

 SETB ET0 SETB TR0 CLR F0 ;设置下一轮为定时方式的标志位WAIT: AJMP WAITIT0P: CLR EA ;CPU关闭中断JB F0,EXTN1 ;F0=1转计数工作模式mov TMOD,#00H

 mov TL0,#oc mov TH0#0feH SETB EA RETIEXTN1:mov TMOD,#06H mov TL0,#156Hmov TH0,#156HSETB EA RETI

这是书上给出的答案,但这样并没有实现自动转换,要手动置F0的值才能转吧,怎么自动ORG 0000HAJMP MAIN ORG 000BHAJMP IT0PMAIN:mov TMOD,#06H; 

程序的初始化(TMOD IE TCON特殊功能寄存器的设置初始化)mov TL0,#156H mov TH0,#156H SETB EA SETB ET0 SETB TR0 MOV R1,#00H ;清空计数器 CLR 

F0 ;设置下一轮为定时方式的标志位 WAIT: AJMP WAITIT0P: CLR EA ;CPU关闭中断 JB F0,EXTN1 ;F0=1转计数工作模式SETB F0 mov TMOD,#00 mov TL0,#ocHmov 

TH0#0feHSETB EARETEXTN1: INC R1 ;计数器加1 MOV A,R1CJNE A,#64H,EXTN2 ;计数是否到100CLR F0 ;开启计时标志MOV R1,#00HEXTN2:mov 

TMOD,#06 mov TL0,#156H mov TH0,#156H SETB EA

扩展资料

采用定时器/计数器T0对外部脉冲进行计数,每计数100个脉冲后,T0转为定时工作方式。定时1ms后,又转为计数方式,如此循环不止。

假定MCS-51单片机的晶体振荡器的频率为6MHz,请使用方式1实现

(A timer / counter T0 is used to count the external pulse. After counting 100 pulses, T0 turns to a timing operation. 

After timing 1ms, it turns to count mode, so the cycle is more than one. Suppose the frequency of the crystal oscillator of MCS-51 single chip is 6MHz, please use mode 1)

参考资料:百度百科-定时器

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-09-01
ORG 0000H

AJMP MAIN

ORG 000BH

AJMP IT0P

MAIN:mov TMOD,#06H; 程序的初始化(TMOD IE TCON特殊功能寄存器的设置初始化)

mov TL0,#156H

mov TH0,#156H

SETB EA

SETB ET0

SETB TR0

MOV R1,#00H ;清空计数器

CLR F0 ;设置下一轮为定时方式的标志位

WAIT: AJMP WAIT

IT0P: CLR EA ;CPU关闭中断

JB F0,EXTN1 ;F0=1转计数工作模式

SETB F0

mov TMOD,#00H

mov TL0,#ocH

mov TH0#0feH

SETB EA

RETI

EXTN1:
INC R1 ;计数器加1

MOV A,R1

CJNE A,#64H,EXTN2 ;计数是否到100

CLR F0 ;开启计时标志

MOV R1,#00H

EXTN2:
mov TMOD,#06H

mov TL0,#156H

mov TH0,#156H

SETB EA

RETI本回答被提问者采纳
第2个回答  2018-12-26
你这题有个明显的bug 没说是方式一还是方式二 两种方法是不一样的追答

这是方式二的

这是方式一的

第3个回答  2012-11-29
计数100个脉冲,为什么计数初值不是100滴?

采用定时器\/计数器T0对外部脉冲进行计数,每计数100个脉冲后,T0转为定时...
F0 ;设置下一轮为定时方式的标志位 WAIT: AJMP WAITIT0P: CLR EA ;CPU关闭中断 JB F0,EXTN1 ;F0=1转计数工作模式SETB F0 mov TMOD,#00 mov TL0,#ocHmov TH0#0feHSETB EARETEXTN1: INC R1 ;计数器加1 MOV A,R1CJNE A,#64H,EXTN2 ;计数是否到100CLR F0 ;开启计时标志MOV R1,#00...

采用定时器\/计数器T0对外部脉冲进行计数,每计数100个脉冲后,T0转为定时...
F0 ;设置下一轮为定时方式的标志位 WAIT: AJMP WAITIT0P: CLR EA ;CPU关闭中断 JB F0,EXTN1 ;F0=1转计数工作模式SETB F0 mov TMOD,#00 mov TL0,#ocHmov TH0#0feHSETB EARETEXTN1: INC R1 ;计数器加1 MOV A,R1CJNE A,#64H,EXTN2 ;计数是否到100CLR F0 ;开启计时标志MOV R1,#00...

单片机控制继电器定时开关的程序流程
(1)秒脉冲发生器秒脉冲发生器是由定时器T0和内存空间TT0配合完成的。T0工作于16位计数器模式,当T0向上计数由全1变为全0时产生中断,本程序中T0的初值为0DC00H,大约0.01s中断一次。这里使用的晶振频率为11.0592MHz,由此可计算出日误差约为0.78s。 图4为程序流程图。系统产生中断后,首先保存ACC和PSW的值,然后为...

51单片机如何用计数器检测脉冲信号(高低电平),程序怎么做!没有思路...
可以利用51单片机的计数器T0、T1,例如用计数器0的外部计数脉冲输入端T0计数,当计满100个脉冲数量后,触发中断。进入计数服务中断程序。如果有脉冲信号,经过电容微分后,在下降沿会产生一个向下的尖端脉冲,电阻R2是作为一个偏置,当有向下的尖端脉冲来后,反相端的电压会低于同向端的电压。从而比较器...

数控专业毕业设计
P3.4 T0:定时器\/计数器0外部输入端 P3.5 T1:定时器\/计数器1外部输入端 P3.6 WR:外部数据存储器写选通。P3.7 RD:外部数据存储器读选通。 在进行第二功能操作前,对第二功能的输出锁存器必须由程序置1。3)信号控制线 RST\/VPD:RST为复位信号线输入引脚,在时钟电路工作以后,该引脚上出现两个机器周期以上的...

单片机中定时器和计数器怎么嵌套使用?
也就是说当T0产生100个脉冲时打开T1进行计数,所以开始时将ET1和TR1全赋为0;当需要T1进行计数时把ET1和TR1全赋为1 这就完成中断的嵌套。你可以试试。希望能帮到你。

利用定时器计数器设计一个电路,其功能是每输入1个脉冲,发光二极管状态...
闸门时间的确定,可以先由一个555定时器产生一个脉冲信号,将555产生的脉冲信号送入到74LS90十进制计数器当中,由于74LS90具有二-五进制混合计数的功能,所以可以用它来实现五进制计数,将74LS90的输出接到3—8线译码器74LS138的输入端,再将译码器的输出端接上五个发光二极管,这样就可以实现硬件上的...

单片机定时器与计数器的区别
计数器和定时器的本质是相同的,他们都是对单片机中产生的脉冲进行计数,只不过计数器是单片机外部触发的脉冲,定时器是单片机内部在晶振的触发下产生的脉冲。当他们的脉冲间隔相同的时候,计数器和定时器就是一个概念。在定时器和计数器中都有一个溢出的概念,那什么是溢出了。呵呵,我们可以从一个生活...

AT89C51和AT89S51的区别?
·两个16位定时器\/计数器 ·5个中断源 ·可编程串行通道 ·低功耗的闲置和掉电模式 ·片内振荡器和时钟电路 管脚说明: VCC:供电电压。 GND:接地。 P0口:P0口为一个8位漏级开路双向I\/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义...

利用8051单片机定时器T0测量某正脉冲的宽度 这个问题你弄懂了 能给我...
它已经是一个周期内有一半时间(甚至更长时间)有信号。计算机内的信号就是脉冲信号,又叫数字信号。最大脉宽计算:知道计数器中断的产生是从全1变为全0产生溢出中断,所以计数器的处置设定为00H,如果让其工作在方式1计数下,最大计数值为2^16=65536,那么最大计数脉冲宽度就是65536*2us。

相似回答