‘壹’ 求单片机脉冲计数程序
,显示的是每分钟的脉冲个数。
----
需要等待一分钟后,显示出来吗?
对1Hz的脉冲计数,显示的数字,不就是 60 吗?
定时5MS,是什么意思?
‘贰’ 如何写一个单片机输入上升沿和下降沿的脉冲输出信号的c语言程序
如果是循环中查询的话我一般这样做, 定义一个变量比如keyLastStatus来记录上一次扫描周期的状态
sbit key=P2.0; char keyLastStatus=0;
keyLastStatus=key; //初始化
while (1)
{
if(key==0 && keyLastStatus!=key) Todo(); //上升沿
if(key==1 && keyLastStatus!=key) Todo(); //下降沿
keyLastStatus=key; //记录上一次的状态
}
‘叁’ 51单片机测量脉冲宽度程序
假设用定时器0,一个完整过程是
TH0=0;TL0=0;
whiIe(IN==1);∥等待当前高电平过去
while(IN==0);∥等待高电平来到
TR0=1;∥启动计时
while(IN==1);∥等待高电平结结束
TR0=0;∥停止计时
HIGH=TH0*256+TL0;∥存计时结果
TH0=0;TL0=0;∥清0
‘肆’ 向51单片机里写发出脉冲信号的c程序怎么编啊
//用ADC0808控制PWM输出
//通过可变电阻调节脉冲宽度
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit CLK =P2^4;
sbit ST=P2^5;
sbit EOC=P2^6;
sbit OE=P2^7;
sbit PWM=P3^0;
//延时
void Delay(uchar x)
{
uchar i;
while(x--)
for(i=0;i<40;i++);
}
void main()
{
uchar Val;
TMOD=0x02;//定时器T0工作于方式2自动重装8位计数器
TH0=0x14;
TL0=0x00;
IE=0x82; //允许T0中断
TR0=1; //启动定时器
while(1)
{
ST=0;ST=1;ST=0; //启动A/D转换
while(!EOC); //等待转换完成
OE=1;
Val=P1; //读取转换结果
OE=0;
if(Val==0) //PWM输出占空比为0
{
PWM=0;
Delay(0xff);
continue;}
if(Val==0xFF) // PWM输出占空比为100%
{
PWM=1;
Delay(0xff);
continue;
}
PWM=1;
Delay(Val); //PWM输出占空比
PWM=0;
Delay(0xff-Val);
}
}
//--------------------------------
//T0定时器中断给ADC0808提供时钟信号
//---------------------------------
void Timer0_INT() interrupt 1
{
CLK=!CLK; //ADC0808时钟
}
能看明白吗?我也是刚学的,照书上写的
‘伍’ 单片机红外脉冲程序
//这一段是用来检测红外脉冲的低电平时间的
unsigned int Ir_Get_Low()
{
TL1=0; //清0计数器低8位
TH1=0; //清0计数器高8位
TR1=1; //打开计数器
while(!Ir_Pin && (TH1&0x80)==0); //如果IR管脚一直为低电平就一直在这里等待,让计数器一直计数
TR1=0; //管脚为高电平时关闭计数器
return TH1*256+TL1; //返回计数值,高8位乘256因为2的8次方为256