利用单片机产生脉冲信号有多种方法。最简单的方法,就是在单片机的程序中对一个引脚反复置1,清0,置1,清0,这个引脚上就会出现脉冲信号。
当需要产生指定周期和宽度的脉冲信号时,通常使用单片机中的计数器来实现:给计数器赋于不同的计数初值,在计数到0时产生中断去置1或清0某引脚即可。
给你个基本框架,根据你的具体要求再修改吧。使用定时1中断实现,精度比较高。
#include <reg52h>
#define PERIODH (65536l-10000l)/0X100 //设10ms中断1次TH1初值
#define PERIODL (65536l-10000l)%0X100 //设10ms中断1次TL1初值
sbit P1_1 = 0x91; //假设从P11输出脉冲
unsigned int iCount; //延时间隔时间变量
unsigned int iPulseCount; //脉冲脉宽时间变量
void timer1() interrupt 3 using 1
{//定时器每001秒一次中断
TH1 = PERIODH;
TL1 = PERIODL;
if(iCount)
{//计数未到0,计数器-1
iCount--;
}
if(iPulseCount)
{//计数未到0,计数器-1
iPulseCount--;
}
}
main()
{
TMOD = 0X10;//方式1
EA = 1;//总中断允许
ET1 = 1;//定时器1中断允许
TR1 = 1;//启动定时器1
P1_1 = 0; //脉冲输出端口,假设输出正脉冲,预置为低电平
while(1)
{
iCount = 200;//每间隔20010ms = 2秒一个脉冲,t值变化改此处
while(iCount);//等待2秒中
P1_1 = 1; //置为高电平,输出正脉冲
iPulseCount = 10;//每间隔1010ms = 100ms一个脉冲,脉宽变化改此处
while(iPulseCount);//高电平保持100ms
P1_1 = 0; //置为低电平,输出正脉冲结束
}
}
;假设晶振为12MHz,脉冲输出端为P17。
;下列程序,经过仿真调试,可以满足题目要求
ORG 0000H
SJMP MAIN
ORG 000BH
SJMP T0_INT
MAIN:
MOV TMOD, #01H
MOV TH0, #(65536-20000) / 256
MOV TL0, #(65536-20000) MOD 256
SETB TR0
MOV IE, #82H
MOV R2, #150
SJMP $
T0_INT:
CLR P17
MOV TH0, #(65536-20000) / 256
MOV TL0, #(65536-20000) MOD 256
DJNZ R2, T0_END
SETB P17
MOV R2, #150
T0_END:
RETI
END
以上就是关于如何用单片机输出脉冲信号全部的内容,包括:如何用单片机输出脉冲信号、如何编程实现51单片机每隔 t 时间发出一个脉冲求C语言详细编程。。。、单片机脉冲输出程序 一个周期20毫秒,然后每3秒输出一个脉冲,只需要跳变一下就回来的那种等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)