用51单片机控制每隔0.5秒从P1.1输出一个宽度可变的脉冲

2019-07-17 00:40发布

要求:用51单片机控制每隔0.5秒从P1.1输出一个宽度可变的脉冲。脉冲宽度应该是1ms的整倍数,每输出16个脉冲后再重复循环。(要求使用c语言编写)
给了1个AT89S51 、4个电阻 、2个30uf的电容、1个22uf的电容、2个按钮开关、1个12M的晶振,画出原理图
(希望给个原理图)
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
8条回答
殷高旺
2019-07-17 16:37
//PD2 外部中断0控制  PWM 30%的亮度
#include<iom16v.h>
#include<macros.h>

#define uchar  unsigned char
#define uint  unsigned int


void port_init()
{
  DDRB=0Xff;
  PORTB=0X00;  //低电平灯灭
  
}

void drive_init()
{
   MCUCR|=0x03; //上升沿中断触发
   GICR|=BIT(6);//使能外部中断
  
   TCCR0=0X02;  //8分频
   TCNT0=0X37;  //定时0.1ms溢出
  
   
   SREG|=BIT(7);//打开总中断
}

void main(void)
{
  port_init();
  drive_init();
  while(1);
}
#pragma interrupt_handler int0_isr:2  
void int0_isr()
{
    //send_pwm();
         TIMSK|=BIT(TOIE0);
}
#pragma interrupt_handler time0_isr:10  
void time0_isr()
{
   static uchar countime0;
   TCNT0=0X37;
   countime0++;
   if(countime0>=300)
     {
           PORTB&=~BIT(0);
          
         }
    if(countime0<=90)
      {
           PORTB|=BIT(0);
          }

}

一周热门 更多>