楼上的注意了,人家单片机的晶振频率是6MHz的,机器周期相应的是2us,
编程时间最好利用定时器中断以节约资源。。。。
ORG 0000H
LJMP START
ORG 000BH
LJMP TIMER0
START:
MOV TMOD,#00H
MOV TH0,#0FEH
MOV TL0,#0CH
SETB ET0
SETB EA
SETB TR0
MAIN:
LJMP MAIN
TIMER0:
MOV TH0,#0FEH
MOV TL0,#0CH
CPL P1.0
RETI
END
第一、设置定时器工作模式;第二、给TLX、THX赋初值;第三、开中断;第四、启动定时器。当然你要编好中断服务程序了。下面给一个简单的示范例程:程序运行后将在P1.0上产生1K的方波信号输出。
ORG 0000H
LJMP START
ORG 000BH
LJMP TM0
ORG 0100H
START:
CLR EA
MOV SP,#60H
MOV TMOD,#01H
MOV TCON,#01H
MOV TH0,#0FEH
MOV TL0,#0BH
SETB TR0
SETB EA
SJMP $
TM0:
CLR TR0
MOV TH0,#0FEH
MOV TL0,#0BH
SETB TR0
CPL P1.0
RETI
END
思路:
1,程序开始准备
2,标志位为0?是则等待中断,为1则执行下一步
3,亮灯,延时一秒,灭灯,延时一秒
4,跳到第二步步
中断程序:
1,标志位取反
2,reti
还有就是你按键接错了,你那样是查询方法,不是中断。
ORG 0000H
LJMP START
ORG 000BH
LJMP Timer0Interrupt
START:
MOV SP,#60H
LCALL InitTimer0
LOOP:
;add your code here!
LJMP LOOP
InitTimer0:
MOV TMOD,#01H
MOV TH0,#0FCH
MOV TL0,#18H
SETB EA
SETB ET0
SETB TR0
RET
Timer0Interrupt:
PUSH DPH
PUSH DPL
PUSH ACC
MOV TH0,#0FCH
MOV TL0,#18H
CPL P1.0
POP ACC
POP DPL
POP DPH
RETI
END
这是定时器0的一个1ms中断一次的程序 在P1.0端口输出1KHz方波
ORG 00H ;开始地址
JMP MAIN ;跳转到主程序
ORG 03H ;外部中断0地址
JMP EXT1 ;跳转
ORG 13H ;外部中断1地址
JMP EXT2 ;跳转
MAIN:
MOV IE, #85H ;使能中断 0,1
SETB TCON.2 ;边沿触发
SETB TCON.0 ;边沿触发
SJMP $ ;--没有这一句,程序,自己就去执行中断函数了
EXT1:
MOV P2, #0 ;清0,点亮发光二极管
RETI
EXT2:
MOV P2, #0FFH ;置1,关闭
RETI
END
利用汇编语言写单片机中断程序的介绍就聊到这里吧,感谢您花时间阅读,谢谢。
本文标签:利用汇编语言写单片机中断程序