51单片机 输出 0还是1

51单片机 输出 0还是1,第1张

51单片机输出0。

P0端口细分下,其实含有:P0.0 P0.1 P0.2 ... P0.7 共8个管脚,你可以单个管脚进行1或0复制(赋值后具体体现在单片机上的就是:置1的管脚会输出高电平(5V),置0的管脚会输出低电平(0V)),倘若直接对整个P0赋值1的话(P0=1)。

(由于C语言的规范)实际上只是P0.0=1(十六进制为0x01),其他管脚为0,故而只有P0.0是高电平而已,对于P0=0的话则是所有管脚被拉低到低电平。

单片机控制器:

控制器由程序计数器、指令寄存器、指令译码器、时序发生器和 *** 作控制器等组成,是发布命令的“决策机构”,即协调和指挥整个微机系统的 *** 作。其主要功能有:

(1) 从内存中取出一条指令,并指出下一条指令在内存中的位置。

(2) 对指令进行译码和测试,并产生相应的 *** 作控制信号,以便于执行规定的动作。

(3) 指挥并控制CPU、内存和输入输出设备之间数据流动的方向。

微处理器内通过内部总线把ALU、计数器、寄存器和控制部分互联,并通过外部总线与外部的存储器、输入输出接口电路联接。

IO口的输入输出是通过对单片机寄存器的配置来实现的。

C51的单片机IO口本来就是双向的不需要设置。

STM32单片机的IO口用C语言的设置方法如下:

void LED_Config(void)

{

GPIO_InitTypeDef GPIO_Structure

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE)

//PC10-LED(指示灯)

GPIO_Structure.GPIO_Pin = GPIO_Pin_10

GPIO_Structure.GPIO_Speed = GPIO_Speed_2MHz

GPIO_Structure.GPIO_Mode = GPIO_Mode_Out_PP

GPIO_Init(GPIOC,&GPIO_Structure) //LED

}

1、首先要明白pwm的含义,pwm就是输出不同占空比的脉冲,

2、普通51单片机io口输出pwm的话,可以用定时器去计时,比如要输出100hz的占空比50%的pwm。可以配置1ms的定时器中断,在中断中计数,一个中断就是1ms,100hz的脉冲,周期是10ms,50%的占空比,可以计数到5的时候把io口取反;程序如下

void

main()

{

tmod

=

0x01

th0

=

0xfc

tl0

=

0x18

//

晶振选择12mhz,配置定时器中断1ms

et0

=

1

tr0

=1;

ea=

1

while(1)

//程序停止在这里,,接下来就是去响应中断

}

void

timer0()

interrupt

1

{

static

unsigned

char

t

=

0

th0

=

0xfc

tl0

=

0x18

//重新装入初值;

t++

if(t

<5)

{

io

=

0

}

else

if(t

<

10)

{

io

=

1

}

else

{

t

=

0

}

}

上面的程序就是周期是10ms,占空比为50%的输出了,,,需要调节占空比的话,只要改变io口电平电话的时间就可以了;

3、多个io口

输出不同占空比的pwm;

原理是和1个的是一样的,

多用几个时间变量去计时,判断就可以了。

4、上面说的是普通的51单片机,现在有很多增强型单片机,内部有pwm模块,可以直接使用,赋值一个周期值,比如30000到特定的寄存器里面;

然后改变第一次电平变化的时间和第二次电平变化的时间

就可以实现不同的占空比调节了。具体的可以参考下单片机的数据手册都会有例程说明的,。如果是使用内部pwm模块的话,需要选择含有多路pwm功能的单片机来满足设计要求了。


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

原文地址:https://54852.com/yw/7757975.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存