当前位置:首页 » 编程语言 » c语言高低电平
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言高低电平

发布时间: 2023-07-27 16:28:36

1. 单片机c语言编程时,假如一个IO已口定义了,但没定义此口是高电平还是低电平,那系统会默认为低电平么

任何一个C语言语句,最终都是经过编译程序编译成汇编语言再由汇编器编译成机器码,但是,定语句则不痛,他们被编译成汇编语言伪指令(不是可执行指令),只要你没有在定义时赋值,就没有实质的机器码产生,也就不会改变寄存器或者内存的状态。
由此,我们可以得出答案,单片机c语言编程时,假如一个IO已口定义了,但没定义此口是高电平还是低电平,那系统不会默认为低电平。这个IO口具体是什么状态,有具体单片机的默认状态决定,且不同的单片机有所不同,对传统单片机,默认状态是弱上拉准IO状态,是高电平。

2. 急求:我编的c语言控制程序,如何更改触发方式(按键判断改为高低电平判断),而保持原程序执行结果。

  • 新建工程

    首先新建工程,并加以简单配置,可以参考我的分享:《IAR如何建立工程》,如下为硬件电路图:

  • PICTL

    PICTL可以控制Px口中断触发信号:上升沿触发、下降沿触发。由于按键在未按下时处于高电平,按下后为低电平,松开后又为高电平,所以会产生下降沿触发信号,配置为下降沿触发即可:

    PICTL |= BIT0; //falling edge

  • IEN1

    除了配置引脚,还需要开启端口引脚中断使能,如下所示开启PO口中断使能:

    IEN1 |= BIT5; //P0 interrupt

  • PxIFG

    在开启中断前需要先清除中断标志,以免误入中断造成系统混乱。

    P0IFG &= ~BIT4;

  • 系统中断使能

    学习51都知道,在任何中断操作时,都需要开启系统中断:

    EA = 1; //system interrupt open

  • 中断函数书写

    #pragma vector = P0INT_VECTOR

    __interrupt void P0_isr(void)

    {

    wg_waitUs(10);

    P0IFG &= ~BIT4;

    P0IF &= ~BIT4;

    P1_0 = ~P1_0; //led1 trigger

    }

    其中wg_waitUs()是延时函数,起到按键消抖作用。

  • 代码框架

    void wg_ledInit(void)

    {

    P1DIR |= BIT0;

    P1 |= BIT0;

    }

    void wg_btnInit(void)

    {

    P0IEN |= BIT4; // P0.4 button input

    PICTL |= BIT0; //falling edge

    IEN1 |= BIT5; //P0 interrupt

    P0IFG &= ~BIT4;

    EA = 1; //system interrupt open

    }

    void wg_waitUs(uint16 ration)

    {

    while (ration--)

    {

    asm("NOP");

    asm("NOP");

    asm("NOP");

    asm("NOP");

    asm("NOP");

    asm("NOP");

    asm("NOP");

    asm("NOP");

    }

    }

    void main(void)

    {

    wg_ledInit();

    wg_btnInit();

    //loop

    for(;;)

    {

    ;//

    }

    }

    #pragma vector = P0INT_VECTOR

    __interrupt void P0_isr(void)

    {

    wg_waitUs(10);

    P0IFG &= ~BIT4;

    P0IF &= ~BIT4;

    P1_0 = ~P1_0; //led1 trigger

    }

3. c语言中如何将发送的数字串(例如11011110)转换成高低电平波形

voidoutput_high(void)
{
/*具体如何输出高电平,要结合实际情况,如硬件环境*/
}

voidoutput_low(void)
{
/*具体如何输出低电平,要结合实际情况,如硬件环境*/
}

voidmain(void)
{
unsignedchardata=222;//11011110,举例
unsignedchartemp=0;
unsignedinti=0;
for(i=0;i<8;i++)
{
temp=data&1;
if(temp==0)
output_low();
else
output_high();
data=data>>1;
delay();//延时函数,举例
}

}