求一个单片机定时中断程序程序,当外部中断来临时,按下不同按键实现不同的延时输出

求一个单片机外部中断程序,要求用按键模拟单片机外部中断输入源,当按键按下时产生中断,进行中断处理_百度知道
求一个单片机外部中断程序,要求用按键模拟单片机外部中断输入源,当按键按下时产生中断,进行中断处理
P1口连接8个发光二极管,用来反映中断程序处理过程.中断未发生时,LED做闪烁状态,当有中断产生,LED呈流水灯操作
我有更好的答案
#include&reg51.h&void main(){EX0=1;EA=1;IT0=1;while(1){P1=0x00;//延时P=0//延时}}void T() interrupt 0{P=0延时;P=0延时;P=0延时;P=0xf7;延时;P=0延时;P=0延时;P=0延时;P=0x7f;延时;}延时程序自己写一个。
采纳率:80%
你要的连接在P1口上,写的时候没注意,用了p2口,不过都是一样。如果有什么不明白的地方,可以再问。&&/*P2口连接8个发光二极管,用来反映中断程序处理过程.&中断未发生时,LED做闪烁状态,当有中断产生,LED呈流水灯操作*/#include&reg52.h&& //52单片机头文件#include&intrins.h&&&& //单片机内部子函数#define uint unsigned int &//定义uint为无符号整型#define uchar unsigned char//延时函数void delay(){&uint a=30000;&while(a--)_nop_();}//主函数void main(){&&P2=0&//P2口初始化&&do&&{&&&&& P2=~P2;&&//让LED闪烁&&&& delay();&&//调用延时函数&&}while(INT0==1);&&&&& EA=1;&& //开总中断&&&& EX0=1;&& //允许外部中断0&}//中断服务程序&void srv_INT0() interrupt 0&&&{&uchar a=0&&&&//定义中间变量&while(INT0==0)&&&&//开关闭合,产生中断&{&&&&& P2=a;&&a=_crol_(a,1);&&& //循环左移&&delay();&}&P2=0&&&& //关闭所有的led,避免干扰}
为您推荐:
其他类似问题
外部中断的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。(window.slotbydup=window.slotbydup || []).push({
id: '3284507',
container: s,
size: '0,0',
display: 'inlay-fix'
单片机的中断系统-习题及答案解析
1.什么是中断、中断源、中断优先级和中断嵌套?
答:中断是指单片机内部有一个中断管理,它对内部的定时器事件、串行通信的发送和接收及外部事件(如键盘按键动作)等进行自动的检测判断。当CPU正在处理某件事情(例如正在执行主程序)的时候,外部或内部发生的某一事件(如某个引脚上电平的变化,一个脉冲沿的发生或计数器的计数溢出等)请求CPU迅速处理,于是,中断管理会置位相应标志通知CPU暂时中止当前的工作,迅速转去处理所发生的事件。处理完该事件后,再回到原来被中止的地方,继续原来的工作,这样的过程称为中断。
产生中断的请求源称为中断源。
将中断事件按轻重缓急分若干级别叫中断优先级。
允许中断优先级高的中断源中断正在执行的低优先级的中断服务程序叫中断嵌套。
2.什么叫中断源?MCS-51有哪些中断源?各有什么特点?它们的中断向量地址分别是多少?
答:中断源即引发中断的事件。
MCS-51单片机有5个中断源,它们是外部中断0,定时器T0,外部中断1,定时器T1,串行口。
外部中断源是由引脚的触发信号引起的中断,定时器中断源是由于定时器计数器的溢出引发的中断,串行口是由于串行通信的发送或接收引发的中断。
外部中断0,定时器T0,外部中断1,定时器T1,串行口五个中断源的中断向量地址依次为:0003H,000BH,0013H,001BH,0023H。
3.MCS-51中断的中断响应条件是什么?
答:(1) 有中断源发出中断请求;
(2) 此中断源允许位为1,即中断源可以向CPU发中断请求;
(3) CPU开总中断允许,即EA=1;
(4) 无同级或者更高级中断正在服务
4.MCS-51的中断响应过程是怎样的?
答:(1) 将相应的中断优先级状态触发器置1,以阻断后来的同级和低级中断请求;
(2) 由硬件清除相应的中断请求标志,串行口的发送和接收中断除外;
(3) 执行一条硬件LCALL指令,即把程序计数器PC的内容压入堆栈保存,再将相应的中断服务程序的入口地址送入PC;
5.编写出外部中断1为下跳沿触发的中断初始化程序。
void Int1_init(){
EA=1;EX1=1; //IE=0x84;// IE|=0x84;
6.有一外部中断源,接入端,当其中有中断请求时,要求CPU把一个从内部RAM 30H单元开始的50个字节的数据块传送到外部RAM从1000H开始的连续存储区。请编写对应的程序。
#include&reg51.h&
void main(){
while(1) ;
void intx0() interrupt 0 using 1{
char * ptr1=0x30;
char xdata i, * ptr2=0x1000;
for(i=0;i&50;i++) *ptr2++=*ptr1++;
7.设fosc = 12MHz,利用定时器,TO(工作在方式2)在P1.1引脚上获取输出周期为O.4ms的方波信号,定时器溢出时采用中断方式处理,请编写,T0的初始化程序及中断服务程序。
解:fosc = 12MHz,则机器周期=1us;当T0工作在方式2时,其最大定时时间为256us,要输出周期为0.4mS即400us的方波信号,则其高、低电平应各为200us,显然当定时器T0按方式2工作时,只需计数达到200次即可,因此其时间常数初值为256-200=56。在T0的中断服务程序中,只需将P1.1引脚求反即可。
#include&reg51.h&
sbit P1_1=P1^1;
void timer0()interrupt 1 using 1{
P1_1=!P1_1;
void main(){
TMOD=0x02;
8.设fosc = 6MHz,要求每隔50ms,从内部RAM以30H开始的数据存储区传送一个字节数据到外部RAM以2000H开始的连续存储区,共传送50个数据。要求:采用定时器T1以方式2实现定时,数据传送在中断服务程序中完成。
解:fosc = 6MHz,机器周期=12/6*10-6S=2us,T1工作在方式2时,最大定时时间为512us,要定时50ms,可以计数100次,每次定时500us来实现,方式2定时500us需计数250次,故其时间常数为256-250=6。
#include&reg51.h&
char intcnt=0;
char movcnt=0;
char * ptr1=0x30;
char xdata *ptr2=0x2000;
void timer1()interrupt 3 using 1{
if(intcnt==100){
if(mocnt&50){
*ptr2++=*ptr1++;
else EX1=0;
void main(){
TMOD=0x20;
9.805l单片机只有两个外部中断源,若要扩展成8个外部中断源,请画出实现这种扩展的硬件线路图,并说明如何确定各中断源的优先级。
解:用按钮开关模拟中断源的中断请求,INT0单独作为一个中断源,INT1扩展成7个中断源,有中断请求时,借助于P2口识别是这七个中断源是哪个请求中断,为了验证正确性,如果是INT0中断,则在P0口的数码管上显示0,是INT1中断,则根据从上到下是哪个中断源在P0口的数码管上显示1&7。具体电路和程序如下:
#include &reg51.h&
char led_mod[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07};
void INT0_srv (void) interrupt 0 using 1 //外部中断0处理程序
P0=led_mod[0];
void INT1_srv (void) interrupt 2 using 2 //外部中断1处理程序
intnum=P2;
switch(intnum){
case 0xfe:P0=led_mod[1];
case 0xfd:P0=led_mod[2];
case 0xfb:P0=led_mod[3];
case 0xf7:P0=led_mod[4];
case 0xef:P0=led_mod[5];
case 0xdf:P0=led_mod[6];
case 0xbf:P0=led_mod[7];
void main(){
标签(Tag):
------分隔线----------------------------
------分隔线----------------------------【最新精选】51单片机独立按键程序查询法和外部中断两种doc下载_爱问共享资料
【最新精选】51单片机独立按键程序查询法和外部中断两种.doc
【最新精选】51单片机独立按键程序查询法和外部中断两种.doc
【最新精选】51单片机独立按键程序查询法和外部中断两种.doc
简介:本文档为《【最新精选】51单片机独立按键程序查询法和外部中断两种doc》,可适用于综合领域,主题内容包含【最新精选】单片机独立按键程序查询法和外部中断两种以下程序都是在VC上调试运行过的程序没有错误没有警告。单片机是STCCRC,但是在所有的单片机上都符等。
侵权或盗版
*若权利人发现爱问平台上用户上传内容侵犯了其作品的信息网络传播权等合法权益时,请按照平台要求书面通知爱问!
赌博犯罪类
在此可输入您对该资料的评论~
添加成功至
资料评价:急求C程序!!51单片机怎么在外部中断程序中关闭外部中断。 #includereg51.h
#define uint unsigned int
#define uchar unsigned char
sbit LED=P0^6;
void delay1ms (uint z)
for (x=z;x0;x
来源:互联网
责任编辑:张小俊字体:
用户回答1:您好:
你的程序中关不到外部中断的原因是你的主函数中有一句 EX1=1; ,你在中断中关了中断,但一进入主函数又开了,所以等于没有关。解决的方法为:
在主函数里加一句程序,如下:
TCON=0x04;
希望可以帮到您。相关解决方法如下:
你的程序中关不到外部中断的原因是你的主函数中有一句 EX1=1; ,你在中断中关了中断,但一进入主函数又开了,所以等于没有关。解决的方法为:
在主函数里加一句程序,如下...
您好: 你的程序中关不到外部中断的原因是你的主函数中有一句 EX1=1; ,你在中断中关了中断,但一进入主函数又开了,所以等于没有关。解决的方法为:在主函数里加一句程序,如下...
51单片机中断系统初始化:
开相应中断源的中断; (IE)
设定中断优先级;(IP)
若为外部中断,设定外部中断的触发方式。
void Outside_Init(void)
EX0 = 1; //开外部中断0
#include &reg51.h&
#define uchar unsigned char
#define uint unsigned int
sb... 中断,P0.1口输出低电平。.
k3 = 1; //=1,将在主函数中有...
可以,有两种方法:
1:EA=0;关闭总中断;
2:EX0=0;//关闭外部中断0
EX1=0;//关闭外部中断1
另外一个接低电平,但是如果低电平是中断,那么中断一结束就必须检查外部中断0引脚P3.2,既然P3.2又作为普通输入输出脚,又如何做外部中断,因此建议不用中断做,可以用2个I&...
指针跳转到外中断执行过程是软件指令行为。定时器是完全由硬件逻辑实现的,它不占用指令执行的时间,所以它不影响定时器工作。
有一种情况是外部中断计数器,这个外部端...
这要看你的中断优先级是如何设置的了。(中断优先级控制寄存器)
如果其他中断都比中断0优先级高,当中断0被触发,其他中断来了就要立刻去执行其他的,
否则就要等中断0执...
问:急求51单片机计数器的C程序!!!最好有解释 ,详细点的 ,十分感谢 啊答:#include "reg51.h" void main() { EX0=1; //开外部中断 IT0=1;//设置边沿触发 EA=1; //开放全局中断 while(1) { P0=~ // 通过P0口的LED显示出计数值(二进制形式) } } void INT_0() interrupt 0 { while(INT0==0); t...
问:#include#define uint unsigned int #define uchar unsigned char sbit ...答:您好: 你的程序中关不到外部中断的原因是你的主函数中有一句 EX1=1; ,你在中断中关了中断,但一进入主函数又开了,所以等于没有关。解决的方法为:在主函数里加一句程序,如下:main(){ EA=1; EX1=1; TCON=0x04; while(1);} 希望可以帮到您。
答:uchar scan() //扫描键值的子程序 { P1=0xf0; scan0=P1; delay1ms(20); if(scan0!=0xf0) //判键是否按下 { scan0=P1; if(scan0!=0xf0) //二次判键是否按下 { P1=0x0f; //线反转法的核心 delay1ms(20); scan1=P1; keycode=scan0|scan1; //组合成...
答:#include void InitUART(void) { TMOD = 0x20; SCON = 0x50; TH1 = 0xFD; TL1 = TH1; PCON = 0x00; EA = 1; ES = 1; TR1 = 1; } void SendOneByte(unsigned char c) { SBUF = while(!TI); TI = 0; } void main(void) { InitUART(); } void UA...
问:程序是文哭里的,有错误,高手给改改发个邮箱吧答:C语言本身允许内联汇编,直接写C语言程序就可以。 C语言和汇编本身结合的比较紧,多看看C语言编译器手册,上面一般都有怎么和汇编混合。 写内联汇编要注意C编译器需要的寄存器需要保护。 梦想之所以被称为梦想,就是在于它是要不断追逐的。
问:具体要求是: 1,利用超声波传感器模块实时测距; 2,由两个74HC573锁存...
问:接线图如下图所示,51单片机P0口接D0-D7,LCD1602接PA0-PA7,矩阵键盘接PC...答:#include#include#define PA XBYTE[0xF8FF]#define PB XBYTE[0xF9FF]#define PC XBYTE[0xFAFF]#define COM XBYTE[0xFBFF]#define LCD1602_RS_SET()PB|=1
答:///在1楼上修改: void main() { // while(1) { for(i=0;i
答://这是我用成功的 /*************定义接口******************** P2.6------SCK P2.7------DATA *****************************************/ #include #include #include //Keil library #include //Keil library /******定义函数**************...
问:本人邮箱: 谢谢您的支持,也谢谢关注我的朋友们,祝福你们答:while(1) { temp=0; //采样值存储单元初始化为0 temp =rCount(); j=temp%10; //取ADC值最后一位 P0=display[j];//取显示数据,段码 } 没有看到延时,即使结果不停变化的话,点亮数码管之后要延时,不然变化速度太快,只能看到8 要学会调试才好 ...为您准备的好内容:
最新添加资讯
24小时热门资讯
Copyright ©
haoxyx.com All Rights Reserved. 好心游戏网 版权所有
京ICP备号-1 京公网安备02号502 Bad Gateway
502 Bad Gateway
nginx/1.12.1

我要回帖

更多关于 单片机中断程序 的文章

 

随机推荐