51单片机控制继电器

用汇编语言做要求继电器每隔一秒吸合一秒断开谢谢啦... 用汇编语言做 要求继电器每隔一秒吸合 一秒断开 谢谢啦 展开
 我来答
王律师案件普法

2019-09-15 · TA获得超过35.9万个赞
知道大有可为答主
回答量:374
采纳率:89%
帮助的人:35.5万
展开全部

不要用三极管放大,接上拉电阻即可。

做实验直接选用线圈电压为5V的继电器就可以。单片机输出引脚与继电器之间要接一个三极管,单片机I/O直接继电器电流不够。

单片机是一个弱电器件,一般情况下它们大都工作在5V甚至更低。驱动电流在mA级以下。而要把它用于一些大功率场合,比如控制电动机,显然是不行的。

在这里,继电器驱动含有两个意思:一是对继电器进行驱动,因为继电器本身对于单片机来说就是一个功率器件。


扩展资料:

现在,单片机的某一个需要控制这个继电器电路的输出引脚就是一只"手",当单片机的这个引脚输出低电平的时候,就像"手"在打开三极管"水龙头",水就从上往下流,继电器"水轮机"就开始转起来了。

反之,如果是输出高电平,"手"就开始关"水龙头",继电器"水轮机"因为没有水流下来,就会停止。

这就是三极管的开关作用。

简单的理解和记忆就是:三极管是一个开关器件,其实真的可以将它看成是一个开关,只不过它不是用手来控制,而是用电压(电流)来控制的,因此,三极管有些时候也被称做电子开关(与机械开关相区别)。

参考资料来源:百度百科——单片机控制器

lycdl
高粉答主

2018-11-23 · 醉心答题,欢迎关注
知道大有可为答主
回答量:2万
采纳率:94%
帮助的人:4935万
展开全部

你的仿真图有问题,继电器是不会吸合的。发光二极和串联的电阻阻值也大,LED不能亮。

仿真应该如下图这样画

汇编程序

RELAY BIT  P2.0 ;继电器控制位

RESET:LJMP MAIN

ORG  000BH

MOV  TH0,#3CH

MOV  TL0,#0B0H

DJNZ R2 ,BACK

MOV  R2 ,#20 ;中断20次,1秒到,继电器吸合或断开一次

CPL  RELAY

BACK: RETI

MAIN: MOV  TMOD,#01H

MOV  TH0,#3CH; 晶振频率为12M,定时50ms

MOV  TL0,#0B0H

MOV  IE ,#82H

SETB TR0

MOV  R2 ,#20

CLR  RELAY

AJMP $

END

请采纳

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
我叫增强萨
2018-11-23 · TA获得超过846个赞
知道小有建树答主
回答量:529
采纳率:0%
帮助的人:610万
展开全部
汇编学的比较渣,写不来。
程序基本逻辑比较简单,定时器定时1ms,每次溢出在中断函数中cnt+1,当cnt=1000时,即定时1s,标志位flag=1。
主函数用个if判断flag就可以了,当falg=1时,翻转IO状态,就可以实现继电器的通断。
C程序如下:

#include <reg52.h>
sbit RL = P2^0; //三极管通断
unsigned char T0RH = 0; //T0 重载值的高字节
unsigned char T0RL = 0; //T0 重载值的低字节
unsigned char flag = 0; //1s标志位
void ConfigTimer0(unsigned int ms);
void main()
{
EA = 1; //使能总中断
ConfigTimer0(1); //配置 T0 定时 10ms
while (1)

{
if(flag == 1) //1s时间到
{
flag = 0;
RL = ~RL; //电平取反,即继电器状态翻转
}
}
}
/* 配置并启动 T0, ms-T0 定时时间 */

void ConfigTimer0(unsigned int ms)
{
unsigned long tmp; //临时变量
tmp = 11059200 / 12; //定时器计数频率
tmp = (tmp * ms) / 1000; //计算所需的计数值
tmp = 65536 - tmp; //计算定时器重载值
tmp = tmp + 13; //补偿中断响应延时造成的误差
T0RH = (unsigned char)(tmp>>8); //定时器重载值拆分为高低字节
T0RL = (unsigned char)tmp;
TMOD &= 0xF0; //清零 T0 的控制位
TMOD |= 0x01; //配置 T0 为模式 1
TH0 = T0RH; //加载 T0 重载值
TL0 = T0RL;
ET0 = 1; //使能 T0 中断
TR0 = 1; //启动 T0
}
/* T0 中断服务函数,用于1s计时 */
void InterruptTimer0() interrupt 1
{
static unsigned int cnt = 0;
TH0 = T0RH; //重新加载重载值
TL0 = T0RL;
cnt++;

if (cnt >= 1000) //1s时间到
{
cnt = 0;
flag = 1;
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
仝夏时敏丽
2020-06-20 · TA获得超过1186个赞
知道答主
回答量:7
采纳率:100%
帮助的人:2015
展开全部
你的电源是12V,这样用电器功率不太大的话用下面这种12V继电器就行
网上一大堆。单片机直接用12V接7805线性稳压就行。下面的原理图中光耦左边及单片机由7085提供5V,光耦右边的直接用12V
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
叶吟巩晴照
2019-08-14 · TA获得超过1005个赞
知道小有建树答主
回答量:1864
采纳率:83%
帮助的人:8.9万
展开全部
网上都有卖的
需要控制几路制冷片就买几路继电器,我买个5V
4路继电器的18元。
这样的成品给个低电平(高电平)就行了。有高(低)电平有效
降压模块也有卖的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式