历史上的今天
今天是:2026年01月11日(星期日)
2023年01月11日 | 51单片机与汇编之定时器中断闪烁LED
2023-01-11 来源:zhihu
话不多说,先上程序
ORG 0000h
AJMP START
ORG 000BH
AJMP TIME0
START:
MOV 66H,#0
MOV TMOD,#00000001B
MOV TH0,#0BBH
MOV TL0,#0CCH
SETB EA
SETB ET0
SETB TR0
AJMP $
TIME0: PUSH ACC
PUSH PSW
MOV TH0,#0BBH
MOV TL0,#0CCH
INC 66H
MOV A,66H
CJNE A,#30,TIME00
CPL P1.0
MOV 66H,#0
TIME00: POP PSW
POP ACC
RETI
END
这段程序的达成的目标是:用定时器产生一个中断,中断内容是让LED灯闪烁。现在来分析程序的每一个步骤。
ORG 0000h ;。。。
AJMP START ;跳到start处去运行程序
ORG 000BH ;定时器0的中断在中断向量表中的地址
AJMP TIME0 ;跳到中断内容处运行
START:
MOV 66H,#0 ;给60h这个单元赋0
MOV TMOD,#00000001B ;以下6行都是定时器的基本设置,我就不说这个了,用c写过的哥们应该都懂,后面三行是开启中断的。
MOV TH0,#0BBH
MOV TL0,#0CCH
SETB EA
SETB ET0
SETB TR0
AJMP $ ;进入死循环中,等待中断的产生
TIME0: PUSH ACC ;把ACC和PSW中的东西压入栈中,把进入中断前的现场进行保护,就是中断不改变原来的累加器和状态寄存器的内容。
PUSH PSW
MOV TH0,#0BBH ;重新赋初值让它进行下一次中断
MOV TL0,#0CCH
INC 66H ;这个单元内的数值自己加一,相当于i++
MOV A,66H ;传到A中与30进行比较
CJNE A,#30,TIME00 ;如果不相等则跳去让PSW和ACC出栈,然后返回主函数中的死循环。如果相等则继续执行下面的程序,就是把LED灯进行反转,就是让定时器计时到时30次才进行一次灯的状态的改变。
CPL P1.0 ;灯的状态的反转
MOV 66H,#0 ;地址内的数归零,进行下一次的定时器计数
TIME00: POP PSW
POP ACC
RETI ;中断返回的指令,注意不是主程序的返回ret
END
上一篇:汇编写51单片机之按键检测
史海拾趣
|
HID设备的功能简单,每隔一段周期发送一个测试数据给我,周期在10ms以内,一般7-8ms.我这边写一段,但是Createfile之后使用ReadFile()无法读取发送过来的测试数据,GetLastError()返回ERROR_IO_PENDING ,WaitForSingleObject()返回超时.请 ...… 查看全部问答> |
|
我安装了一个虚拟机,在虚拟机下安装了一个linux。在linux里面上传了一个jdk-6u16-linux-i586.bin和一个apache-tomcat-6.0.20.tar.gz。可是在linux里面怎么安装这两个东西?另外linux的命令怎么用?在哪里运行?例如在windows下在运行那里输入cmd, ...… 查看全部问答> |
|
这款由设计师Stefan Otzelberger设计的早餐托盘,虽然是倡导简洁式设计,并且机身采用了非常节能高效加热元件以及塑料碳纳米(CNT)。将烤面包机,水壶和咖啡壶等功能组合在一起的早餐托盘。实现在床上吃早餐的梦想。电源供应安装在底板上的电源 ...… 查看全部问答> |
|
组团:2.8寸 16:9 带触摸屏无图标 240*400分辨率 8元一片 第一次发起团购,希望各位顶顶,呵呵! 此款液晶屏原装A规 数量巨大 所以干脆以最便宜价格来回馈坛友! 走淘宝,让大家放心团! 希望大家以10PCS起拍,这样方便打包,呵呵!默认圆通,邮费统一为9元,不超重情况下! 淘 ...… 查看全部问答> |
|
本帖最后由 dontium 于 2015-1-23 11:42 编辑 本文档介绍了德州仪器无线LED照明系统的设计应用。 如需更多信息,请访问:ti../lsds/ti_zh/apps/lighting/applications.page … 查看全部问答> |
|
本帖最后由 qiushenghua 于 2014-9-29 19:42 编辑 好久没有在TI申请样片了,这次参加TI的低功耗设计大赛,正好遇到样品申请的活动,于是一并申请了几片IC。 首先进入本次活动页面查看活动详情,从介绍我们可以知道活动要求:需要点击链接进入样 ...… 查看全部问答> |




