;定时器实验
T100us equ 256-50 ;100us时间常数(6M)
C100us equ 30h ;100us计数单元
LEDBuf equ 0
LED equ P1.0
ljmp Start
org 000bh
T0Int: ;中断子函数
push PSW
mov a,C100us+1
jnz Goon
dec C100us
Goon:
dec C100us+1
mov a,C100us
orl a,C100us+1
jnz Exit
mov C100us,#27h ;要定时10000次才能达到一秒,10000的十六进制位2710h,存储时先放高字节。
mov C100us+1,#10h
cpl LEDBuf
Exit:
pop PSW
reti
Start: ;主函数
mov TMOD,#02h ;方式2,定时器
mov TH0,#T100us
mov TL0,#T100us
mov IE,#10000010b ;EA=1,IT0=1
setb TR0 ;开始定时
clr LEDBuf
clr LED
mov C100us,#27h ;要定时10000次才能达到一秒,10000的十六进制位2710h,存储时先放高字节。
mov C100us+1,#10h
Loop:
mov c,LEDBuf
mov LED,c
ljmp Loop
end
1,reti
概念
RETI是中断返回指令
这条指令的功能和RET指令相似,2条指令的不同之处,是本指令除了中断响应时,被置1的MCS-51内部中断优先级寄存器的优先级状态。
中断程序完成后,一定要执行一条RETI指令,执行这条指令后,CPU将会把堆栈中保存着的地址取出,送回PC,那么程序就会从主程序的中断处继续往下执行了。中断指令“RETI”作为中断跳出指令,除了将堆栈中保存着的地址取出,送回PC,使程序从主程序的中断处继续往下执行的作用外,还有将“优先级生效”触发器清零的功能。
2,注意点
mov C100us,#27h ;要定时10000次才能达到一秒,10000的十六进制位2710h,存储时先放高字节。
mov C100us+1,#10h
笔者开始没有写#号,导致了奇怪错误
3,orl a,C100us
把a累加器和C100us中得值进行或运算。
4,一段经典写法:
mov a,C100us+1
jnz Goon
dec C100us
Goon:
dec C100us+1
经典的用两个变量做减法,控制每次减一的算法!好!
<!--EndFragment-->
分享到:
相关推荐
LAB_4_KEYPAD.asm
org.springframework.asm-3.0.5.RELEASE.jar
org.springframework.asm-sources-3.0.5.release.jar
asm字节码jar包,仅需要一个就可以。具体使用,可以参考http://blog.csdn.net/gaoshan12345678910/article/details/78131784
E158255MatrixKey.asm.asm.asm
严重: Exception sending context initialized event to listener instance ... nested exception is java.lang.NoClassDefFoundError: org/objectweb/asm/Type ssh 框架的java web项目部署到tomcat报上面错误 添加此包
程序2.asm
用8086汇编语言设计一存取款小软件系统。要求进入系统后,屏幕上显示“欢迎使用本系统”,另起行显示“输入密码:”。允许三次输入错误密码后可... 1 返回DOS 2 查阅余额(两位数) 3 存款(两位数) 4 取款(两位数)
rg.springframework.asm-3.0.1.RELEASE-A.jar
汇编\示例\Sample.asm汇编\示例\Sample.asm汇编\示例\Sample.asm汇编\示例\Sample.asm
5.5.5菜单程序设计.asm
实验七程序讲解.asm
jar包,官方版本,自测可用
lxt.ASM.asm
9.ASM.asm
2.ASM.asm
DPJKS.ASM.asm
编码.ASM.asm
EXAM.ASM.asm