
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功能的单片机来满足设计要求了。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)