从你的波形看,,需要放大是肯定的,,,,需不需要整形,,要靠你动手测一下,,,单片机输入大于等于2V属于高电平,,小于等于08V属于低电平,,也就是说,,电压波动要在这个范围,,,就可以不要整形了,,,当然从学习角度讲,,你可以尝试对他经行整形,,可以使用555定时器搭建一个施密特触发器,,将你刚才那个波动的波形变成标准的方波!!!!
#include "reg52h"
sbit key=P3^2;
void main()
{
IT0=1; //外部中断0连沿触发方式
EX0=1; //使能外部中断0
EA=1; //开部中断
while(1) ;
}
void int0() interrupt 0
{
int tab[]={0xff,0x7f,0xbf,0x3f,0xdf,0x5f,0x9f,0x1f,0xef,0x6f,0xaf,0x2f,0xcf,0x4f,0x8f,0x0f} ;
int count=15;
long int i;
while(1)
{
if(key==0)
for(i=0;i<10000;i++);
if(key==0)
{ count--;
if(count==0)
count=15;
P3= tab[count] ;
while(key==0);
}
}
}
51看1、先初始化,设置外部中断、串口工作模式,开中断;2、写中断服务程序;//--------------------------------------------///初始化//--------------------------------------------/voidinit(void){TMOD|=0x20;//工作模式SCON=0x50;TH1=0xfd;//定时器1初值,设置波特率TL1=0xfd;//波特率为9600TR1=1;//启动定时器1ES=1;//串口中断允许工作于方式1IT0=1;//外部中断0下降沿触发方式IT1=1;//外部中断1下降沿触发方式EX0=1;//开外部中断0EX1=1;//开外部中断1EA=1;//开总中断}////中断服务程序//voidint0(void)interrupt0//外部0中断服务{}//--------------------------------------------//复位中断//--------------------------------------------voidint1(void)interrupt2//外部1中断服务{}//--------------------------------------------/voiduart(void)interrupt4//串口中断{uchar;if(RI)//接收{RI=0;ud=SBUF;//取收到的字节}elseTI=0;//发送完成}
关于51单片机外部中断0触发方式,边沿触发方式和电平触发方式不同,边沿触发方式只在触发信号下降沿(现在有单片机也可以设置上升沿触发)触发一次。所以在设置好相关外部中断以后,等待触发就可以了,不需要额外处理。
IT0=1;//边沿触发方式,还要置位外部中断0允许位及总中断位
进入外部中断0程序的方式是由外部中断触发信号控制的。
//if(达到某条件)//不需要判断,否则就失去中断的意义了
//{
//P32=0;//不需要这样处理
//}//然后就进入外部中断0了//进入终端是随机的
void exter0()
{
P32=1;//不需要这样处理
…………
}
以上就是关于关于单片机外部中断的问题,求教高手。全部的内容,包括:关于单片机外部中断的问题,求教高手。、用外部中断1做一计数器的c语言程序怎么写、中断初始化配置方法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)