找回密码
 立即注册

QQ登录

只需一步,快速开始

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

如何使用单片机模拟一下下降沿?

[复制链接]
跳转到指定楼层
楼主
ID:695961 发表于 2020-3-7 18:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
正在学习STC12C2052AD单片机中的PCA。


根据芯片说明书中的示例程序:《使用PCA功能扩展外部中断的示例程序》


代码如下:
  1. #include <STC12C2052AD.H>
  2. #include <INTRINS.H>
  3. #include "UART.H"

  4. sbit LED = P1 ^ 7;
  5. sbit EPCAI = IE ^ 6;

  6. volatile uint8 COMMAND;

  7. // PCA中断
  8. void PcaIsr() interrupt 6
  9. {
  10.         Prints("触发中断。\r\n");
  11.         CCF0 = 0;
  12.         LED = !LED;
  13. }

  14. void main()
  15. {
  16.         InitUART();                // 初始化串口
  17.        
  18.         CCON = 0;                // 初始化PCA
  19.        
  20.         CL = 0;
  21.         CH = 0;
  22.        
  23.         CMOD = 0;                // 设置PCA的脉冲为系统时钟,并禁止PCA中断
  24.        
  25.         CCAPM0 = 0x11;        // 允许下降沿捕获,并使能寄存器CCON的比较捕获标志CCF0,用来产生中断
  26.         CR = 1;
  27.         EPCAI = 1;
  28.         EA = 1;
  29.        
  30.        
  31.         while(1)
  32.         {
  33.                 if(COMMAND >= 0x02)
  34.                 {
  35.                         P16 = 0;
  36.                        
  37.                         COMMAND = 0;
  38.                 }
  39.                
  40.                 if(COMMAND == 0x01)
  41.                 {
  42.                        
  43.                         P16 = 1;
  44.                         _nop_();
  45.                         _nop_();
  46.                         _nop_();
  47.                         _nop_();
  48.                         P16 = 0;
  49.                        
  50.                         COMMAND = 0;
  51.                 }
  52.         }
  53. }
复制代码

我将P16和P37使用导线连接,P17和LED连接,使用P16模拟一个下降沿,但是LED没有反应。有谁用过12C2052AD的PCA的,麻烦帮我看一下,这个下降沿有问题吗?如何才能触发PCA中断呢?谢谢。

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

使用道具 举报

沙发
ID:584814 发表于 2020-3-7 22:17 | 只看该作者
先拉高小延时再变低就是一个下降沿
回复

使用道具 举报

板凳
ID:280000 发表于 2020-3-9 21:48 | 只看该作者
可以用单片机定时器去检测
回复

使用道具 举报

地板
ID:401564 发表于 2020-3-10 00:38 | 只看该作者
你不能用单片机自身来产生的
当单片机指令去执行的时候,不管什么中断,都得等这条指令执行完了之后,才去响应中断的
所以,要么是指令执行之后端口就是低电平了,PCA并没有捕获到一个完整的下降沿
要么就压根就没有触发中断
你可以通过一个IO串联一个10K电阻给一个100uF的电容充电,而电容的正极就连着PCA就行了
当指令执行端口为低电平的时候,电容是通过10K电阻来放电的,时间要很长,至少能保证指令完成之后才产生下降沿
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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