你需要main函数里面加 IT0 = 1; EX0 = 1; IT1 = 1; EX1 = 1; EA = 1; 不用在头文件声明,这个在单片机声明那里就有了 |
中断子程序和其他的子程序不同,不用先定义,直接写在MAIN()后面就行 |
大佬不少![]() |
在单片机中,中断程序是在中断事件发生时自动执行的程序。中断程序在执行完成后,会返回到原来的程序继续执行。这样可以让单片机在执行一个任务的同时,可以在中断事件发生时及时响应事件。 在使用中断程序时,首先需要在程序中声明中断函数,并指定中断服务程序的编号。例如,在8051单片机中,可以使用关键字`interrupt`来声明中断函数。如下所示: ```c void interrupt my_interrupt() { // 中断事件发生时需要执行的代码 } ``` 然后,需要调用一个函数来启用中断。在8051单片机中,可以使用`IE`寄存器来开启中断。例如,如果需要开启`Timer 0`的中断,则可以设置`IE`寄存器中`ET0`位为1。如下所示: ```c ET0 = 1; // 开启Timer 0中断 ``` 当中断事件发生时,会自动执行中断函数。执行完成后,程序会回到原来的执行点继续执行。 |
感谢感谢!!! ![]() |
Grealish 发表于 2023-6-9 14:13 ![]()
|
main函数中加入以下语句 IT0 = 1; //设置INT0的中断类型为仅下降沿,下降沿唤醒 EX0 = 1; //使能INT0中断 IT1 = 1; //设置INT0的中断类型为仅下降沿,下降沿唤醒 EX1 = 1; //使能INT0中断 EA = 1; //开总中断 原main函数中的这两句删除 t0_ini(); ex_ini(); t0_ini和ex_ini这两个中断函数放到main函数前面。 中断函数无法通过其它函数调用。 当外部中断触发后,中断正在执行的语句,自动执行中断函数中的语句。执行完成后返回之前中断的语句继续执行。 |
Hephaestus 发表于 2023-6-9 13:36
这是老师给的参考代码抄下来的,我感觉应该是老师敲错了把,也有一个警告,*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS 所以改了一下,或者是不是我电路连错了 |
Hephaestus 发表于 2023-6-9 13:36 另外,没有对中断,定时器进行初始化。 |
Grealish 发表于 2023-6-9 13:31 这两个函数是硬件中断调用的,你放到main()里面几个意思?
|
TEXT1.C(35): warning C206: 'ex_int': missing function-prototype就只删掉这两行报错了又 |
这两行删掉!
|