急 急 急 keil c51在中断写程序时出现了以下问题

急 急 急 keil c51在中断写程序时出现了以下问题,第1张

程序贴上来帮你看看,我现在刚好有空。

补充:

40K的程序报错,仅凭报错信息让别人查错,如果能查到那他不是人是“神”。如果你的错误很低级(系统程序员都没为你准备错误信息),编译系统报错信息就会非常离谱(何况你还要借助电脑翻译)。有时你用了一个全角标点符号,系统都会给你胡乱报上一通。注掉一部分程序缩小错误范围再慢慢找吧。

先在主函数里写上:

IT1=1;//下降沿触发

EA=1;//开总中断

EX=1;//开int中断

然后在主程序外面写中断服务函数

void Int1()interrupt 2

{

写入你想实现的功能

} 当你按下P33后 就会执行void Int1()interrupt 2 里的程序了

希望能帮到你。

果你在程序里面对函数进行了声明的话,子程序可以写在任意地方(当然还是要在这个文件里面)。如果不进行声明的话,也不是仅仅写在MAIN函数之前这条规则这么简单,而是不能还让编译器没有编译到这个函数当时遇到了这个函数被其他函数调用,这样的话就会出错。

第二,中断函数不用进行函数声明,可以写在MAIN函数前面也可以写在MAIN函数后面。

第三,由于不知道你说的是那种单片机在那种编译器下面的写法,我在这里给你一个51内核的单片机79F168在KEIL里面的中断函数的写法给你。

void UART_ISR() interrupt 4

{

if(RI && REN)

{

}

if(TI && TXEN)//TXEN为自己定义的一个串口发送使能标志

{

}

}

void timer0_1ms_ISR() interrupt 1

{

TL0=LOBYTE(TIMER0);

TH0=HIBYTE(TIMER0);

}

这两个函数第一个是串口中断函数,第二个是定时器0中断函数,函数名可以自己定义,后面的interrupt必须写,紧着这最关键的就是这个中断号,可以查询数据手册得到这个中断号,每一个中断都会有一个中断号,对应着写在后面就可以了。

另提醒楼主基础很重要,所有的东西都是由最基本基础的东西叠加起来的。

把你的程式目录中的一个m51档打开贴出来,看一下code memory一拦例如:

            C O D E   M E M O R Y  

          CODE    0000H     0003H     ABSOLUTE  

          CODE    0003H     0004H     UNIT         PRVOLTAGE_REFERENCE_INITINIT

          CODE    0007H     0004H     UNIT         PROSCILLATOR_INITINIT

          CODE    000BH     0003H     ABSOLUTE  

          CODE    000EH     0146H     UNIT         CLIB_CODE

          CODE    0154H     00E7H     UNIT         PRDO_ADC0DCTMAK001

          CODE    023BH     008CH     UNIT         C_C51STARTUP

          CODE    02C7H     0087H     UNIT         PRMAINDCTMAK001

          CODE    034EH     0064H     UNIT         PRTIMER0_ISRDCTMAK001

          CODE    03B2H     0056H     UNIT         PRLED_INITDCTMAK001

          CODE    0408H     0024H     UNIT         PR_T1_WAITMSDCTMAK001

          CODE    042CH     0018H     UNIT         C_INITSEG

          CODE    0444H     0015H     UNIT         PRINIT_DEVICEINIT

          CODE    0459H     0010H     UNIT         PRTIMER_INITINIT

          CODE    0469H     0010H     UNIT         PRPORT_IO_INITINIT

          CODE    0479H     000DH     UNIT         PRADC_INITINIT

          CODE    0486H     000AH     UNIT         PRPCA_INITINIT

          CODE    0490H     0004H     UNIT         PRINTERRUPTS_INITINIT

这样我们才有办法帮你看,你的程式哪边overlap, 一般比较常见的错误是:

void Timer0_ISR (void) interrupt 1

Interrupt後面的数字弄错, 以致linker 摆错位置, 导致程式重叠在通一位置(overlapped)

此外如果是汇编的程式要注意

主程式从0开始执行是否有立刻long jpmp到其他位置,有没有占用到中断程式。

中断程式是否有立刻long jpmp到其他位置,有没有占用到下一个中断向量程式空间。

以上就是关于急 急 急 keil c51在中断写程序时出现了以下问题全部的内容,包括:急 急 急 keil c51在中断写程序时出现了以下问题、在KEIL软件中“外部中断1由单片机的引脚P3.3下降沿触发”用C语言怎么写、如何写中断程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9873861.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-02
下一篇2023-05-02

发表评论

登录后才能评论

评论列表(0条)

    保存