找回密码
 立即注册
查看: 287|回复: 1

ZXC-0168 STC8A8K64D4单片机 第12讲 输入信号达到设定计数值继电器吸合(中断法)

[复制链接]
  • TA的每日心情
    开心
    2024-3-29 12:03
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    24

    主题

    6

    回帖

    247

    积分

    荣誉版主

    积分
    247
    发表于 2023-11-19 11:34:39 | 显示全部楼层 |阅读模式
    ZXC-0168 应用举例.jpg

    ZXC-0168 标识图.jpg

    ZXC-0168 原理图_00.jpg



    【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!
    *********************************************************************/
    /*************  功能说明    **************
    第12讲   输入信号达到设定计数值继电器吸合(中断法)

    1.使用外部中断0,作为外部输入计数控制继电器输出(IN7为外部中断1)
    ******************************************/

    #include "STC8A8K64D4.h"   //包含此头文件后,里面声明的寄存器不需要再手动输入,避免重复定义
    #include "intrins.h"       //一般程序中需要使用到空指令_nop_();字符循环移位指令_crol_等时使用。
    #define uchar unsigned char//宏定义无符号字符型
    #define uint unsigned int  //宏定义无符号整型

    /*************        本地常量声明        **************/
    /*************        光耦隔离输入口        **************/
    sbit IN1= P5^5;//光耦隔离输入口1
    sbit IN2= P4^0;//光耦隔离输入口2
    sbit IN3= P6^4;//光耦隔离输入口3
    sbit IN4= P6^5;//光耦隔离输入口4
    sbit IN5= P6^6;//光耦隔离输入口5
    sbit IN6= P6^7;//光耦隔离输入口6
    sbit IN7= P3^2;//光耦隔离输入口7 同时为外部中断0输入口
    sbit IN8= P3^3;//光耦隔离输入口8 同时为外部中断1输入口
    sbit IN9= P3^4;//光耦隔离输入口9
    sbit IN10= P3^5;//光耦隔离输入口10

    /*************        光耦隔离继电器输出口        **************/
    sbit OUT1= P4^3;//继电器输出口1
    sbit OUT2= P2^7;//继电器输出口2
    sbit OUT3= P2^6;//继电器输出口3
    sbit OUT4= P2^5;//继电器输出口4
    sbit OUT5= P2^4;//继电器输出口5
    sbit OUT6= P2^3;//继电器输出口6
    sbit OUT7= P2^2;//继电器输出口7
    sbit OUT8= P2^1;//继电器输出口8
    sbit OUT9= P4^2;//继电器输出口9
    sbit OUT10= P2^0;//继电器输出口10

    sbit RUN= P4^4;//运行状态指示灯
    sbit FMQ= P0^7;//蜂鸣器控制脚

    /*******************标志位设定*********************/

    //bit IN_bz1=0; //输入标志位
    //bit IN_bz2=0; //输入标志位
    //bit IN_bz3=0; //输入标志位
    //bit IN_bz4=0; //输入标志位
    //bit IN_bz5=0; //输入标志位
    //bit IN_bz6=0; //输入标志位
    //bit IN_bz7=0; //输入标志位
    //bit IN_bz8=0; //输入标志位
    //bit IN_bz9=0; //输入标志位
    //bit IN_bz10=0;//输入标志位

    //uint IN_js1=0; //输入1计时变量
    //uint IN_js2=0; //输入2计时变量
    //uint IN_js3=0; //输入3计时变量
    //uint IN_js4=0; //输入4计时变量
    //uint IN_js5=0; //输入5计时变量
    //uint IN_js6=0; //输入6计时变量
    //uint IN_js7=0; //输入7计时变量
    //uint IN_js8=0; //输入8计时变量
    //uint IN_js9=0; //输入9计时变量
    //uint IN_js10=0; //输入10计时变量
    //uint IN_TIME=1000;//输入口消抖计时变量

    uchar INT0_Count=0;//IN1输入计数
    //========================================================================
    // 函数声明
    void quan_guan();//全关函数
    void INT0_Init();//外部中断0初始化函数
    //========================================================================
    /************************ 全关函数 ****************************/
    void quan_guan()//全关函数
    {
    OUT1=1;//继电器1断开
    OUT2=1;//继电器2断开
    OUT3=1;//继电器3断开
    OUT4=1;//继电器4断开
    OUT5=1;//继电器5断开
    OUT6=1;//继电器6断开
    OUT7=1;//继电器7断开
    OUT8=1;//继电器8断开
    OUT9=1;//继电器9断开
    OUT10=1;//继电器10断开
    }
    //========================================================================
    /************************外部中断0初始化函数 ****************************/
    void INT0_Init()//外部中断0初始化函数  
    {
    IT0 = 1;//使能INT0上升沿和下降沿中断 (等于0时,上升沿和下降沿都有效  等于1时 下降沿有效)
    EX0 = 1;//使能INT0中断
    EA = 1;//打开总中断中断允许控制寄存器
    }

    //========================================================================
    // 函数: void main(void)
    // 描述: 主函数。
    // 参数: none.
    // 返回: none.
    //========================================================================
    void main()//主函数
    {
    P0M1 = 0x00;   P0M0 = 0x00;   //设置为准双向口
    P1M1 = 0x00;   P1M0 = 0x00;   //设置为准双向口
    P2M1 = 0x00;   P2M0 = 0x00;   //设置为准双向口
    P3M1 = 0x00;   P3M0 = 0x00;   //设置为准双向口
    P4M1 = 0x00;   P4M0 = 0x00;   //设置为准双向口
    P5M1 = 0x00;   P5M0 = 0x00;   //设置为准双向口
    P6M1 = 0x00;   P6M0 = 0x00;   //设置为准双向口
    P7M1 = 0x00;   P7M0 = 0x00;   //设置为准双向口
    RUN=0;        //运行指示灯亮
    INT0_Init();//外部中断0初始化函数
    INT0_Count=0;        //清零计数器
    while (1)//主函数执行循环扫描
    {
    switch(INT0_Count)//多分支语句
    {
    case 1:  OUT1=0; break;//当INT0_Count等于1的时候,OUT1继电器吸合
    case 2:  OUT2=0; break;//当INT0_Count等于2的时候,OUT2继电器吸合
    case 3:  OUT3=0; break;//当INT0_Count等于3的时候,OUT3继电器吸合
    case 4:  OUT4=0; break;//当INT0_Count等于4的时候,OUT4继电器吸合
    case 5:  OUT5=0; break;//当INT0_Count等于5的时候,OUT5继电器吸合
    case 6:  OUT6=0; break;//当INT0_Count等于6的时候,OUT6继电器吸合
    case 7:  OUT7=0; break;//当INT0_Count等于7的时候,OUT7继电器吸合
    case 8:  OUT8=0; break;//当INT0_Count等于8的时候,OUT8继电器吸合
    case 9:  OUT9=0; break;//当INT0_Count等于9的时候,OUT9继电器吸合
    case 10: OUT10=0; break;//当INT0_Count等于10的时候,OUT10继电器吸合
    default:quan_guan();INT0_Count=0;break;//当INT0_Count不等于1至10的时候,继电器全部关闭变量INT0_Count等于0。
    }                 
    }
    }
    /********************************************************************
                                                    主程序结束
    *********************************************************************/
    /********************************************************************
                                                    外部中断函数
    *********************************************************************/
    void INT0_Isr() interrupt 0
    {
    INT0_Count++;//每进入一次中断,INT0_Count加1
    }
    /********************************************************************
                                                    结束
    *********************************************************************/


    ZXC-0168 STC8A8K64D4单片机10路输入10路输出可编程工控板原理图.pdf

    1.53 MB, 下载次数: 6

    第12讲 输入信号达到设定计数值继电器吸合(中断法).rar

    66.25 KB, 下载次数: 17

    回复 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    昨天 00:04
  • 签到天数: 187 天

    [LV.7]常住居民III

    0

    主题

    90

    回帖

    797

    积分

    高级会员

    积分
    797
    发表于 2023-11-19 21:33:00 | 显示全部楼层
    学习了,感谢分享!
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-6-3 08:00 , Processed in 0.056832 second(s), 36 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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