如何用单片机输出脉冲信号

如何用单片机输出脉冲信号,第1张

利用单片机产生脉冲信号有多种方法。最简单的方法,就是在单片机的程序中对一个引脚反复置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秒输出一个脉冲,只需要跳变一下就回来的那种等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9481014.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存