C51源程序中中断函数不能进行参数传递,中断函数中包含任何参数声明导致变易出错,但网上都说可以。可能是KEIL改进了。还要注意变量声明和定义的区别。定义包含声明,声明不一定是定义

中断子程序中定义变量,KEIL C51 中也不报错,编译能通过

/*    名称:定时器控制单只LED            
    说明:LED在定时器的中断例程控制下不断闪烁。
*/
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit LED=P0^0;
uchar Tcount;

main()
{
    TMOD=0x01;
    TH0=0x3c;
    TL0=0xb0;
    EA=1;
    ET0=1;
    TR0=1;
    Tcount=0;
    LED=1;
    
    while(1);


}
void LED_Flash() interrupt 1
{
    uchar kk;
    kk = Tcount;
    Tcount++;
    TH0=0x3c;
    TL0=0xb0;
    TF0=0;
    if(Tcount%20==0)
    {
        LED=~LED;
    }


}

STM32实例中 串口中断例程 中断函数中也能定义变量,编译通过不报错

void USART1_IRQHandler(void)                    //串口1中断服务程序
    {
    u8 Res;
#ifdef OS_TICKS_PER_SEC         //如果时钟节拍数定义了,说明要使用ucosII了.
    OSIntEnter();    
#endif
    if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //接收中断(接收到的数据必须是0x0d 0x0a结尾)
        {
        Res =USART_ReceiveData(USART1);//(USART1->DR);    //读取接收到的数据
        
        if((USART_RX_STA&0x8000)==0)//接收未完成     
            {
            if(USART_RX_STA&0x4000)//接收到了0x0d
                {
                if(Res!=0x0a)USART_RX_STA=0;//接收错误,重新开始
                else USART_RX_STA|=0x8000;    //接收完成了          //bit15,    接收完成标志     自己注
                }
            else //还没收到0X0D
                {    
                if(Res==0x0d)USART_RX_STA|=0x4000;        //bit14,    接收到0x0d     自己注
                else
                    {
                    USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;
                    USART_RX_STA++;
                    if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//接收数据错误,重新开始接收      
                    }         
                }
            }            
     } 
#ifdef OS_TICKS_PER_SEC         //如果时钟节拍数定义了,说明要使用ucosII了.
    OSIntExit();                                               
#endif

#endif    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值