标题:
如何使用单片机模拟一下下降沿?
[打印本页]
作者:
chinayanhui
时间:
2020-3-7 18:21
标题:
如何使用单片机模拟一下下降沿?
正在学习STC12C2052AD单片机中的PCA。
根据芯片说明书中的示例程序:《使用PCA功能扩展外部中断的示例程序》
代码如下:
#include <STC12C2052AD.H>
#include <INTRINS.H>
#include "UART.H"
sbit LED = P1 ^ 7;
sbit EPCAI = IE ^ 6;
volatile uint8 COMMAND;
// PCA中断
void PcaIsr() interrupt 6
{
Prints("触发中断。\r\n");
CCF0 = 0;
LED = !LED;
}
void main()
{
InitUART(); // 初始化串口
CCON = 0; // 初始化PCA
CL = 0;
CH = 0;
CMOD = 0; // 设置PCA的脉冲为系统时钟,并禁止PCA中断
CCAPM0 = 0x11; // 允许下降沿捕获,并使能寄存器CCON的比较捕获标志CCF0,用来产生中断
CR = 1;
EPCAI = 1;
EA = 1;
while(1)
{
if(COMMAND >= 0x02)
{
P16 = 0;
COMMAND = 0;
}
if(COMMAND == 0x01)
{
P16 = 1;
_nop_();
_nop_();
_nop_();
_nop_();
P16 = 0;
COMMAND = 0;
}
}
}
复制代码
我将P16和P37使用导线连接,P17和LED连接,使用P16模拟一个下降沿,但是LED没有反应。有谁用过12C2052AD的PCA的,麻烦帮我看一下,这个下降沿有问题吗?如何才能触发PCA中断呢?谢谢。
作者:
man1234567
时间:
2020-3-7 22:17
先拉高小延时再变低就是一个下降沿
作者:
湖南
时间:
2020-3-9 21:48
可以用单片机定时器去检测
作者:
Y_G_G
时间:
2020-3-10 00:38
你不能用单片机自身来产生的
当单片机指令去执行的时候,不管什么中断,都得等这条指令执行完了之后,才去响应中断的
所以,要么是指令执行之后端口就是低电平了,PCA并没有捕获到一个完整的下降沿
要么就压根就没有触发中断
你可以通过一个IO串联一个10K电阻给一个100uF的电容充电,而电容的正极就连着PCA就行了
当指令执行端口为低电平的时候,电容是通过10K电阻来放电的,时间要很长,至少能保证指令完成之后才产生下降沿
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1