沙龙国际网上娱乐: [技术支持] 请问SQ015L如何通过电平变化中断唤醒单片机呢?

永利游戏开户直营
39|1
楼主
 楼主 | 2019-10-29 11:05 | 只看该作者 |退出气泡模式 |倒序浏览 |阅读模式
本帖最后由 水深蓝 于 2019-10-30 13:51 编辑
  1. //初始化
  2. #include "holychip_define.h"
  3. #include "inital.h"
  4. void inital(void)
  5. {
  6. PORTA=0X00;
  7. PORTB=0X00; //PORT口输出高低电平设置 1=高电平,沙龙国际网上娱乐:0=低电平
  8. TRISA=0X00; //输入输出设置 1=输入,0=输出
  9. TRISB=0XE0; //输入输出设置 1=输入,0=输出 0X11100000 PB7,PB6,PB5设置为输入

  10. PHCON1=0XFF;        //上拉设置 1=DISABLED PULL-UP  ;0=PULL-UP
  11. PHCON =0XFF;        //上拉设置 1=DISABLED PULL-UP  ;0=PULL-UP  

  12. PDCON1=0XFF;        //下拉设置 1=DISABLED PULL-UP  ;0=PULL-UP
  13. PDCON =0XFF;        //下拉设置 1=DISABLED PULL-UP  ;0=PULL-UP  

  14. ODCON1=0X00;        //开漏设置 0=DISABLED PULL-UP  ;1=PULL-UP
  15. ODCON =0X00;        //开漏设置 0=DISABLED PULL-UP  ;1=PULL-UP
  16. }

  17. //系统初始化                                          
  18. void sysinitial(void)
  19. {
  20. INTECON=0x00;
  21. OSCCON=0X80;
  22. OPTION=0X80;            //Ftimer0 1/2
  23. PCON=0X40;              //更改  上下电复位 禁止看门狗
  24. }
  25. //模式转换
  26. #include "holychip_define.h"
  27. #include "model.h"
  28. void high_frequence_change_to_sleep(void) //高低频切睡眠
  29. {
  30. // SBIT(OSCCON, 7, LOW);
  31. T0OSCEN=0;
  32. }
  33. void high_frequence_change_to_low_frequence(void) //高频切低频
  34. {
  35. // SBIT(OSCCON, 0, HIGH);
  36. SCS=1;
  37. }
  38. void low_frequence_change_to_high_frequence(void) //低频切高频
  39. {
  40. // SBIT(OSCCON, 0, LOW);
  41. SCS=0;
  42. }
  43. void low_or_high_frequence_change_to_green(void) //高低频切绿色模式 T0定时唤醒
  44. {
  45. OPTION=0X05;

  46. SBIT(OPTION, 5, HIGH); //T0CS=1

  47. // T0CS =1;
  48. T0IF=0; //清T0中断标志
  49. T0IE=1; //使能T0定时器
  50. T0=0X00; //T0赋初值
  51. asm(sleep)
  52. }

  53. //PB电平变化中断初始化
  54. #include "holychip_define.h"
  55. #include "PORTB_interrupt_inital.h"
  56. void PORTB_interrupt_inital()
  57. {
  58. TRISB=0XE0; //PORTB端口设置 0X11100000 PB7,PB6,PB5设置为输入
  59. IOCB=0XE0; //使能PORTB端口为电平变化中断

  60. PBIF=0;         // PROTB中断请求标志清零
  61. PBIE=1;         //使能PROTB中断
  62. GIE=1;          //使能GIE
  63. }   
  64. //脉冲显示函数
  65. #include "holychip_define.h"
  66. #include "Pulse_display.h
  67. uS延时函数
  68. void DelayUs(unsigned char t)
  69. {

  70. while(--t);
  71. }
  72. mS延时函数
  73. void DelayMs(unsigned int t)
  74. {
  75. unsigned char count = 200;

  76. while(t--)
  77. {
  78. while(count--);
  79. }
  80. }
  81. //脉冲显示子程序
  82. void Pulse_display(void)

  83. {
  84. if(PORTB7==1)
  85. PORTA1=1;
  86. DelayMs(20);
  87. PORTA1=0;
  88. if(PORTB7==0)
  89. PORTA2=1;
  90. DelayMs(20);
  91. PORTA2=0;

  92. if(PORTB6==1)
  93. PORTA3=1;
  94. DelayMs(20);
  95. PORTA3=0;
  96. if(PORTB6==0)
  97. PORTB0=1;
  98. DelayMs(20);
  99. PORTB0=0;

  100. if(PORTB5==1)
  101. PORTB1=1;
  102. DelayMs(20);
  103. PORTB1=0;
  104. if(PORTB5==0)
  105. PORTB2=1;
  106. DelayMs(20);
  107. PORTB2=0;
  108. }
  109. //主函数
  110. #include "holychip_define.h"
  111. #include "inital.h"
  112. #include "Pulse_display.h"
  113. #include "PORTB_interrupt_inital.h"
  114. #include "model.h"
  115. void main(void)
  116. {
  117. inital(); //端口初始化
  118. DelayMs(100); //延时等待系统稳定
  119. sysinitial(); //系统初始化
  120. PORTB_interrupt_inital();//PB电平中断初始化,设置PB7,PB6,PB5电平中断
  121. while(1)
  122. {
  123. high_frequence_change_to_sleep(); //高频转换为睡眠模式
  124. Pulse_display(); //脉冲显示

  125. }
  126. }
  127. //PORTB中断服务程序
  128. void Intr(void) __interrupt 0
  129. {
  130. if(PBIF)                    //Judge PBIF
  131. {
  132.     PBIF=0;                 //Clear PBIF
  133. }
  134. }
复制代码

目前我在做一个低功耗的项目,所以采用单片机的休眠模式,想知道如何通过电平变化中断唤醒单片机,以上是我编写的程序,请问这样可以实现么?
沙发
 楼主 | 2019-10-31 17:45 | 只看该作者
请问有谁做过相关的案子,可以指教一下么
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

永利游戏开户直营 快速回复 返回顶部 返回列表
澳洲国际广西快乐十分开奖时刻表 2017年申博太阳城官网登入2007 澳门太阳城江西11选5开奖记录 欧亿娱乐登陆导航 tt北京快乐8时时彩软件
www.918.com 阿玛尼天津时时彩网址 天际亚洲开户 鸿运赌场外围开户 宝马国际娱乐在线
澳门巴黎人网址 出款速度最快的菲律宾申博网站 一肖一码期期大公开 澳门威尼斯人游戏 菲律宾申博赢钱登入
澳门星际娱乐官方 618申博娱乐网站登入 新葡京安全上网导航登入 威尼斯人网上赌场 女神国际天津时时彩计划软件