找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3337|回复: 3
收起左侧

关于MCU信号上升沿和下降沿都可以触发继电器工作的问题

[复制链接]
ID:221879 发表于 2019-1-24 12:14 | 显示全部楼层 |阅读模式
想做一个转换器,就是信号上升沿和下降沿都可以触发的情况,假如开关控制给STC15F104w单片机的3脚上升沿触发信号,然后STC15F104w mcu的8脚输出一个高电平持续1S,就变低电平。随后STC15F104w的1脚检测电位是高电平还是低电平,如果是高电平则3脚为下降沿触发,开关控制给STC15F104w的3脚下降沿触发信号,然后STC15F104w的8脚输出一个高电平持续1S,就变低电平。1脚高电平下降沿触发,1脚低电平上升沿触发,代码该怎样写哪位朋友可以帮个忙谢谢了!



1

1
回复

使用道具 举报

ID:213173 发表于 2019-1-24 20:35 | 显示全部楼层
STC15F104W的外部中断0(INT0)和外部中断1(INT1)触发有两种触发方式,外部中断2(INT2)和外部中断3(INT3)只能下降沿触发。STC15F104W的3脚是INT3,所以楼主的要求做不到。
回复

使用道具 举报

ID:221879 发表于 2019-1-25 08:41 | 显示全部楼层
wulin 发表于 2019-1-24 20:35
STC15F104W的外部中断0(INT0)和外部中断1(INT1)触发有两种触发方式,外部中断2(INT2)和外部中断3(INT3)只能 ...

如果上面方法不行,那么改成这个应该可以实现吧,就是信号上升沿和下降沿都可以触发的情况,假如开关控制给STC15F104w单片机的7脚上升沿触发信号,然后STC15F104w mcu的8脚输出一个高电平持续1S,就变低电平。随后STC15F104w的1脚检测电位是高电平还是低电平,如果是高电平则3脚为下降沿触发,开关控制给STC15F104w的3脚下降沿触发信号,然后STC15F104w的8脚输出一个高电平持续1S,就变低电平。1脚高电平下降沿触发,1脚低电平上升沿触发,代码该怎样写哪位朋友可以帮个忙谢谢了!
回复

使用道具 举报

ID:213173 发表于 2019-1-25 13:20 | 显示全部楼层
xbox007 发表于 2019-1-25 08:41
如果上面方法不行,那么改成这个应该可以实现吧,就是信号上升沿和下降沿都可以触发的情况,假如开关控制 ...

给你写个程序,未经验证,你试试。
#include <STC15F2K60S2.H>
//#include "reg51.h"
#include "intrins.h"
//-----------------------------------------------

sbit INT0= P3^2;//中断入口
sbit OUT = P3^3;//输出端口
sbit IN  = P3^4;//控制端口

void Init()                        //50毫秒@11.0592MHz
{
        AUXR &= 0x7F;        //定时器时钟12T模式
        TMOD &= 0xF0;        //设置定时器16位自动重载模式
        TL0 = 0x00;                //设置定时初值
        TH0 = 0x4C;                //设置定时初值
        TF0 = 0;                        //清除TF0标志
//        TR0 = 1;                        //定时器0开始计时
//        EX0 = 1;                   //使能INT0中断
        EA = 1;                        //使能总中断
        INT0 = 1;                //初始化中断入口
        OUT = 0;                        //初始化输出
        P3M0 = 0x10;        //P3.4推挽输出
        P3M1 = 0x00;        //P3.4推挽输出
}

void main()
{
        unsigned char count=0;//计数变量
        Init();
        while (1)
        {
                if(IN & INT0==1)
                {
                        IT0 = 1;                        //设置INT0的中断类型下降沿触发
                        EX0 = 1;                        //使能INT0中断
                }
                else if(IN | INT0==0)
                {
                        IT0 = 0;                        //设置INT0的中断类型上升沿触发
                        EX0 = 1;                        //使能INT0中断
                }
                else EX0 = 0;                //关闭INT0中断
        }
        if(TF0==1)
        {
                TF0=0;
                count++;
                if(count==20)                //1秒
                {
                        count=0;
                        TR0 = 0;                //定时器0停止计时
                        OUT = 0;                //停止计时输出
                }
        }
}
//外部中断0服务程序
void exint0() interrupt 0 //INT0中断入口
{
        TR0 = 1;                //定时器0开始计时
        OUT = 1;                //驱动输出(高电平)
}

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表