找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2088|回复: 1
打印 上一主题 下一主题
收起左侧

单片机智能充电器程序

[复制链接]
跳转到指定楼层
楼主
ID:573399 发表于 2019-6-27 14:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
智能充电器的源程序
  1. #include <reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int

  4. sbit GATE = P2^0;
  5. sbit BP = P2^1;

  6. uint t_count,int0_count;
  7. /* 定时器0中断服务子程序 */
  8. void timer0() interrupt 1 using 1
  9. {
  10.         TR0 = 0;                                // 停止计数

  11.         TH0 = -5000/256;                // 重设计数初值
  12.         TL0 = -5000%256;

  13.         t_count++;       

  14.         if (t_count>600)                // 第一次外部中断0产生后3s
  15.         {
  16.                 if (int0_count==1)        // 还没有出现第二次外部中断0,则认为充电完毕
  17.                 {
  18.                         GATE = 0;                // 关闭充电电源
  19.                         BP = 0;                        // 打开蜂鸣器报警
  20.                 }
  21.             else                                // 否则即是充电出错
  22.                 {
  23.                         GATE = 1;       
  24.                         BP = 1;               
  25.                 }
  26.        
  27.                 ET0 = 0;                        // 关闭T0中断
  28.                 EX0 = 0;                         // 关闭外部中断0

  29.                 int0_count = 0;
  30.                 t_count = 0;
  31.         }
  32.         else
  33.                 TR0 = 1;                        // 启动T0计数
  34. }

  35. /* 外部中断0服务子程序 */
  36. void int0() interrupt 0 using 1
  37. {
  38.         if (int0_count==0)
  39.         {
  40.                 TH0 = -5000/256;        // 5ms定时
  41.                 TL0 = -5000%256;       
  42.                 TR0 = 1;                        // 启动定时/计数器0计数
  43.                 t_count = 0;                // 产生定时器0中断的计数器清零
  44.         }
  45.         int0_count++;
  46. }

  47. /* 初始化 */
  48. void init()
  49. {
  50.         EA = 1;                                // 打开CPU中断

  51.         PT0 = 1;                        // T0中断设为高优先级
  52.         TMOD = 0x01;                // 模式1,T0为16位定时/计数器
  53.         ET0 = 1;                        // 打开T0中断

  54.         IT0 = 1;                        // 外部中断0设为边沿触发
  55.         EX0 = 1;                        // 打开外部中断0       
  56.        
  57.         GATE = 1;                    // 光耦正常输出电压
  58.         BP = 1;                                // 关闭蜂鸣器

  59.         int0_count = 0;                // 产生外部中断0的计数器清零
  60. }

  61. void main()
  62. {
  63.         /* 调用初始化函数 */
  64.         init();
  65.        
  66.         /* 无限循环 */
  67.         while(1);
  68. }
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2019-6-27 19:32 | 只看该作者
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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