您的位置 首页 电源

单片机汇编中止程序(定时器中止)

;首相,介绍一下51单片机的定时计数器,51有两个定时计数器,分别为T0,T1,基本一样,;有一点不同,下面我们介绍定时计数器T0;了解8051的ti…

;辅弼,介绍一下51单片机守时计数器,51有两个守时计数器,分别为T0,T1,根本相同,

;有一点不同,下面咱们介绍守时计数器T0

;了解8051的timer0中止的程序写法,用中止法发生守时

;上面显现的是proteus仿真图,下面的是源程序

;阐明:(源程序中的终端进口地址很重要(这个是固定的),程序中止时,会在对应中止固定的

;进口地址进入,由于规则的相隔进口间的空进有限,只能用跳转指令跳转,终究用RETI强制回来

;这个程序把一切的中止进口地址都写上了,没有用到的,用RETI直接屏蔽)

;运转结果是使led灯明一下,暗一下。

COUNT EQU9217;关于11.0592的晶振来说,延时10ms

LEDEQUP1.1

ORG0000H

LJMP RESET;开端时跳转转到初始化程序中

ORG0003H;外部中止0

RETI

ORG000BH;守时器/计数器T0进口地址

LJMP INT_TIMER0;跳转到守时器/计数器中止服务程序中去

ORG0013H;外部中止1

RETI

ORG001BH;守时器/计数器T1

RETI

ORG0023H ;串行口中止

RETI

ORG0030H

RESET:

MOVR0,#00H

DJNZ R0,$;刚开端,先进行少数的延时,是各种作业寄存器准备好

CLRLED

MOVTMOD,#00000001B;设置守时器T0作业在方法1(16位)

MOVTH0,#HIGH(65536-COUNT);设置初值(关于怎样核算,许多书上都有)

MOVTL0,#LOW(65536-COUNT)

;MOVTH0,#(65536-COUNT)/256;取高八位数据(这是第二种方法)

;MOVTL0,#255;取底五位(为最大了)

CLRTF0;先把溢出标志位清零

SETB TR0;开端计时

SETB EA;大局中止翻开

SETB ET0;守时器/计数器T0溢出中止翻开

MOVR2,#00H;作为守时器累加器运用

LOOP:SJMP LOOP;在此循环,等候中止

INT_TIMER0:;当TF0=1,跳转到下面的中止服务程序中

INCR2;使R2自增一

CLRTF0;从头置中止标志位为0

MOVTH0,#(65536-COUNT)/256; 从头符初值(由于溢出后变成0了)

MOVTL0,#255

CJNE R2,#5,RETURN;让灯明暗相间50ms

MOVR2, #00H

CPLLED;让灯明暗替换改变

RETURN:

RETI

END

;程序写完了(并不是很难,不过便是装备一下守时器,在中止中写点处理程序算了

;),

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/dianyuan/266711.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部