首页教程应用教程正文

单片机中断psw,单片机中断使用的工作寄存器组,怎么使用有什么要注意的!谢谢

发布时间:2024-03-22 05:20:58 来源:其它 作者:未知

1,单片机中断使用的工作寄存器组,怎么使用?有什么要注意的!谢谢-...

1,单片机中断使用的工作寄存器组,怎么使用?有什么要注意的!谢谢-...

c语言编写中断的时候不是有个using参数

timer0_int()interrupt1using2

{

}

在使用51汇编编程时需要管理rs0和rs1由于部分指令需要借助ri操作,同一组中r0-r7只有8个当不够用时,通过改变rs0和rs1来启用其他组

中断时,psw会保护所以在不同的中断服务中,开启不同的工作组是比较通用的节省内存保护开销的做法这样在中断返回后,将恢复工作寄存器组别

2,我一直使用C语言写单片机程序,不太清楚程序进入中断后,一系列...

2,我一直使用C语言写单片机程序,不太清楚程序进入中断后,一系列...

你用C语言编程的时候不看看头文件吗?

双击keil里面的reg51.h或者52,里面定义了很多名字和其地址

里面有的名字,比如ACC,P1,TMOD,IE等等都是可以在程序里直接使用的

里面没有的你可以自己加,当然你要知道地址,名字自己可以随便定义,不重复就好

所以你先看看书,到底你的程序把中断前那一瞬的东西存在哪个寄存器里,

然后就可以在中断程序里修改,直接使用其头文件里面的定义好的名字

PUSH指令是把所要保存的数据存到内部数据存储器里,也就是内部RAM,具体哪个地址要看SP堆栈指针的指向,如果默认SP为07H的话,那么存的空间地址就从08H开始这些值都是可以用直接寻址调用的,想干什么都行但记着在中断程序返回前把它们按照顺序POP回原来的寄存器里

你好!

在中断程序运行时应该对ACC,B,PSW的值进行压栈,保存数据,中断运行之后,应当出栈以恢复现场,数据的保存地址在单片机内部的数据存储器中,堆栈指针SP设置起始位置

仅代表个人观点,不喜勿喷,谢谢

3,单片机按键中断响应

3,单片机按键中断响应

用矩阵2*4接法,2指上拉中断的IO口,4接全部置零io口,中断产生后判断是那个按键,经高人看过没有问题的,接受到中断后用switch语句,将4个IO口逐个致1看看哪个可以使相应的按键致1,以确定键值,图发错了,应该是两条线分别上拉10k,这是第一版的图,抱歉,拉在一起会两路同时中断

中断响应:

中断响应是当中央处理机发现已有中断请求时,中止,保存现行程序执行,并自动引出中断处理程序的过程

中断响应是解决中断的发现和接收问题的过程,是由中断装置完成的中断响应是硬件对中断请求作出响应的过程,包括识别中断源,保留现场,引出中断处理程序等过程

①CPU在当前指令执行结束时,响应中断,进入中断的响应周期;

②发出二个中断回答信号INTA完成一个中断响应周期;

③进行断点及标志保存

如:将段地址(CS),偏移地址(IP)标志FR以及压入堆栈

④读取中断类型号,找到中断源;

⑤装入中断服务程序的入口地址(CS,IP)

听你说的,感觉跟这个4x4的类似,下面CON1是中断用的

中断响应过程cpu响应中断时,首先把当前指令的下一条指令(就是中断返回后将要执行的指令)的地址送入堆栈,然后根据中断标记,将对应的中断入口地址送入pc,pc是程序指针,cpu取指令就根据pc中的值,pc中是什么值,就会到什么地方去取指令,所以程序就会转到中断入口处继续执行这些工作都是由硬件来完成的,不必我们去考虑这里还有个问题,大家是否注意到,每个中断向量地址只间隔了8个单元,如0003-000b,在如此少的空间中如何完成中断程序呢?很简单,你在中断处安排一个ljmp指令,不就能把中断程序跳转到任何地方了吗?一个完整的主程序看起来应该是这样的:

org0000hljmpstart

org0003h

ljmpint0;转外中断0org000bh

reti;没有用定时器0中断,在此放一条reti,万一不小心产生了中断,也不会有太大的后果

中断程序完成后,一定要执行一条reti指令,执行这条指令后,cpu将会把堆栈中保存着的地址取出,送回pc,那么程序就会从主程序的中断处继续往下执行了注意:cpu所做的保护工作是很有限的,只保护了一个地址,而其它的所有东西都不保护,所以如果你在主程序中用到了如

a,psw等,在中断程序中又要用它们,还要保证回到主程序后这里面的数据还是没执行中断以前的数据,就得自己保护起来

希望对你有用,学习单片机有自己的单片机开发板最好,理论结合实际,吴鉴鹰单片机开发不拿现在比较主流,作为学习单片机来说比较合适,视频教程很详细,板子功能全面

8个按键都接到一个8输入的与门,与门输出接单片机中断管脚

8个按键同时接到8个单片机普通管脚

4,51单片机外部中断使用问题,急求!马上给分!

结束while(1)语句最好的方法就是使用break来跳出死循环,关键就是选择合适的flag(标志位),如果说中断标志位是硬件自动清零的话,那么楼主不妨在中断服务子程序中自己加入一个标志位:如果用汇编语言的话,PSW中的F0位就可以很好的使用;如果用C的话,就可以随便定义一个位变量,如bita0;也就是说,楼主需要在程序中定义一个位变量a,在中断服务子程序中将a置1,退出中断后查询a是否为1,例如:if(a){a0;break;}这样就跳出了while语句了比方说,如果楼主想写一个等待按键按下中断的程序,就可以用while(!a);而不用while(1)语句了

5,关于单片机中断问题(汇编程序)

INT_0:MOVP0,#11111111B

ACALLT05S

MOVP0,#11111110B

ACALLT05S

MOVP0,#11111111B

ACALLT05S

MOVP0,#11111110B

ACALLT05S

MOVP0,#11111111B

CLRA

PUSHACC

PUSHACC

RETI

这里你用了两个push,然后没有pop,每次经过这里sp都会增加2,那么reti就无法根据sp指向的ram地址保存的值返回到原来的位置了一般push是在一进入中断时将acc和psw压栈保护现场,reti之前出栈还原现场的,你在reti之前用两个push是完全不需要的

雨过晴天二世,你好:

1.设低电平触发与边沿触发有什么不同?

答:外部中断INT0和INT1可根据寄存器TCON中的IT0和IT1位状态分别设置为电平或者边沿触发实际产生的中断标志是TCON中的位IE0和IE1当产生外部中断时如果是边沿触发进入中断服务程序后由硬件清除中断标志位如果中断是电平触发由外部请求源而不是由片内硬件控制请求标志.

2.设低电平触发有什么要注意的地方?

答:电平触发,你要及时撤销外部中断源,简单说,就是在中断服务程序执行期间,让INT1上的电压重新变高.防止刚从中断程序出来,又进入中断服务程序.

3.硬件外围电路,外部中断IC脚要不要加上拉电阻?

答:一般不用,因为因为INT1在P3口上,内部有上拉电阻.但是仍然建议加一个10K的上拉电阻,万一需要可以焊接上,不会乱飞线了.

51单片机,每个可以触发中断的引脚,都有固定的地址去寻找处理中断的程序

就拿计数器0来说,当51单片机的内部触发这个中段的时候,就去寻找0bh这个地址里的跳转指令

如果0bh里放的是jmp#500h这时候,单片机就会去500h这个地址里处理这个计数器中断

setbea;全局中断允许

setbet0;计算器0中断允许

setbtr0;开启计数器

movtl0,#0ffh;初始化计数器的值,开始计数

movth0,#0ffh

当计数器为0的时候,就会触发中断,去0bh,寻找跳转指令

大概就这样了多琢磨琢磨,就会理解

文章TAG: 使用 中断 工作 单片机 psw 寄存器 单片机中断psw

还没有评论,快来抢沙发吧!

最新发现

相关资讯

新闻热榜

热门游戏

精彩专题