堆栈是后进先出的:
和子弹夹子一样
基本上,汇编程序第一句就是指定堆栈地址:
8051堆栈的默认值是07H,刚好和工作寄存器的R7(0区的R7)重合
我肯定不希望堆栈把R7工作寄存器占用了,所以上来就 MOV SP, #80H
特别是STC的单片机 ,把高128个字节(内部RAM),都可以使用了
如果堆栈不需要很大,可以MOV SP, #D0H
实际堆栈就是保护现场的数据存储的地方............
8、中断的撤除
在响应中断请求后,返回主程序之前,该中断请求标志应该撤除,否则,单,片机执行完中断服务程序会误判为又发生了中断请求而错误地再次进入中断服务程序。单片机中有些中断请求标志会自动撤除,有些不能自动撤除,必须用户使用相应的指令撤除。
44个中断源:
可以分类:
一般来说,先把红色的熟练掌握
蓝色的可以去查手册,希望大家去试一试
4个优先级:
从最左边怎样才能到最右边?
看看每条路的开关?我们看外部中断0---INT0
第一个选择开关是 TCON.0/IT0=0(上升沿+下降沿触发 ) 或者TCON.0/IT0=1 (下降沿触发),都能把IE0置1
TCON.0/IT0 意思是IT0在TCON特殊功能寄存器的第0位,IE0要往右走,EX0必须闭合(EX0=1)
接着EA也要闭合,EA=1 最后就是4选1拨码开关PX0/РХ0Н,控制中断优先级:00,01,10,11。11是3,是 最高级
详细见手册P590
其实就是一开始选择触发条件(上升沿或下降沿)TCON.0/IT0=0,接着打开开关EX0=1,EA=1,最后PX0=1,PX0H=1(选最高级)
这样就打开了外部中断0,当然你只想下降沿触发,TCON.0/IT0=1
C语言就这样:
看看C语言和汇编的对应关系:
汇总成下面的表格:
次序就是Keil uVision的中断号,就是8051的概念中的查询次序号,中断入口地址汇编才要,C语言不需要
实际是先有8051的查询次序号,才有Keil uVision的中断号
中断标志位: