用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条回答
wfpwwj
1楼-- · 2019-07-17 01:50
我是新手,帮不了你啊!
mountfushan
2楼-- · 2019-07-17 03:26
 精彩回答 2  元偷偷看……
jackhui
3楼-- · 2019-07-17 09:14
mountfushan 发表于 2012-12-17 13:57
在百度知道上看到过你的提问。你最好说得再详细些,比如脉冲的作用什么的。这样高手才好帮你。新手路过。 ...

其实这种直接说给原理图的 一般少有人有空给弄的
vchangs
4楼-- · 2019-07-17 11:35
路过
殷高旺
5楼-- · 2019-07-17 14:32
单片机最小系统图能画出来吧 两个按键分别接在两个输出口上例外那端接在地上   分别用两个键盘控制p0 的脉冲输出就行了呀
程序在写完成发过去验证一下 我也不能确定输出一定能让你想要的那种脉冲共同学习

殷高旺
6楼-- · 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);
          }

}

一周热门 更多>