当前位置:首页 » 课程设计 » 中断处理编程课程设计

中断处理编程课程设计

发布时间: 2021-03-08 01:37:39

❶ 单片机编程时中断程序如何使用

中断程序不是使用的,是当单片机的中断源有中断请求时,以允许中断的情况回下,就是自动转到中断答程序去执行了。所以,编程时,需要在中断完成什么任务,都要写到中断程序中就行了,会自己去执行的。而不需要你去使用的。

❷ 单片机中断方式编程(汇编语言)

楼上的来注意了,人家单源片机的晶振频率是6MHz的,机器周期相应的是2us,
编程时间最好利用定时器中断以节约资源。。。。
ORG 0000H
LJMP START
ORG 000BH
LJMP TIMER0

START:
MOV TMOD,#00H
MOV TH0,#0FEH
MOV TL0,#0CH
SETB ET0
SETB EA
SETB TR0

MAIN:

LJMP MAIN

TIMER0:
MOV TH0,#0FEH
MOV TL0,#0CH
CPL P1.0
RETI
END

❸ 《C语言程序设计》课程设计任务书 请各位高手指教啊!十万火急!!!!

#include <graphics.h>
#include <conio.h>
#include <dos.h>
#include <malloc.h>
#include <math.h>

#define PATH "c:\\tc"
#define BK 7
#define DC 8
#define LC 15
#define P1 1
#define P2 4
#define X 121
#define Y 41
#define M 8

int newmap[26][14] ={{1,1, 0,0,0,0,0,0,0,0,0,0, 1,1},
{1,1, 0,0,0,0,0,0,0,0,0,0, 1,1},
{1,1, 0,0,0,0,0,0,0,0,0,0, 1,1},
{1,1, 0,0,0,0,0,0,0,0,0,0, 1,1},
{1,1, 0,0,0,0,0,0,0,0,0,0, 1,1},
{1,1, 0,0,0,0,0,0,0,0,0,0, 1,1},
{1,1, 0,0,0,0,0,0,0,0,0,0, 1,1},
{1,1, 0,0,0,0,0,0,0,0,0,0, 1,1},
{1,1, 0,0,0,0,0,0,0,0,0,0, 1,1},
{1,1, 0,0,0,0,0,0,0,0,0,0, 1,1},
{1,1, 0,0,0,0,0,0,0,0,0,0, 1,1},
{1,1, 0,0,0,0,0,0,0,0,0,0, 1,1},
{1,1, 0,0,0,0,0,0,0,0,0,0, 1,1},
{1,1, 0,0,0,0,0,0,0,0,0,0, 1,1},
{1,1, 0,0,0,0,0,0,0,0,0,0, 1,1},
{1,1, 0,0,0,0,0,0,0,0,0,0, 1,1},
{1,1, 0,0,0,0,0,0,0,0,0,0, 1,1},
{1,1, 0,0,0,0,0,0,0,0,0,0, 1,1},
{1,1, 0,0,0,0,0,0,0,0,0,0, 1,1},
{1,1, 0,0,0,0,0,0,0,0,0,0, 1,1},
{1,1, 0,0,0,0,0,0,0,0,0,0, 1,1},
{1,1, 0,0,0,0,0,0,0,0,0,0, 1,1},
{1,1, 0,0,0,0,0,0,0,0,0,0, 1,1},
{1,1, 0,0,0,0,0,0,0,0,0,0 , 1,1},
{1,1, 1,1,1,1,1,1,1,1,1,1, 1,1},
{1,1, 1,1,1,1,1,1,1,1,1,1, 1,1}};

int bmp[20][20]={{0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0},
{0,1,1,1,1,0,1,1,1,1,1,1,1,1,0,1,1,1,1,0},
{1,1,1,0,0,0,1,1,0,0,0,0,1,1,0,0,0,1,1,1},
{1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1},
{1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1},
{1,0,0,0,0,1,1,1,0,1,1,0,1,1,1,0,0,0,0,1},
{1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1},
{1,1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,1,1},
{1,1,0,1,1,1,1,0,1,1,1,1,0,1,1,1,1,0,1,1},
{1,1,0,1,1,1,1,0,1,1,1,1,0,1,1,1,1,0,1,1},
{1,1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,1,1},
{1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,1,1},
{1,0,0,0,0,1,1,1,0,1,1,0,1,1,1,0,0,0,0,1},
{1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1},
{1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1},
{1,1,1,0,0,0,1,1,0,0,0,0,1,1,0,0,0,1,1,1},
{0,1,1,1,1,0,1,1,1,1,1,1,1,1,0,1,1,1,1,0},
{0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0}};
int next;
int xx,yy;
int map[2][26][14];
int kk[M][4][4]= {
{
{0,0,0,0},
{0,0,2,0},
{0,2,2,2},
{0,0,0,0}
},

{
{0,0,0,0},
{0,2,0,0},
{0,2,0,0},
{0,2,2,0}
},

{
{0,2,0,0},
{0,2,0,0},
{0,2,0,0},
{0,2,0,0}
},

{
{0,0,2,0},
{0,0,2,0},
{0,2,2,0},
{0,0,0,0}
},

{
{0,0,0,0},
{0,2,0,0},
{0,2,2,0},
{0,0,2,0}
},

{
{0,0,0,0},
{0,2,2,0},
{0,2,2,0},
{0,0,0,0}
},

{
{0,0,0,0},
{0,2,2,0},
{0,0,2,0},
{0,2,2,0}
},
{
{0,0,0,0},
{0,0,2,0},
{0,2,2,0},
{0,2,0,0}
}
};

char far * bit[3],*sim;
int score,level;
/************/
int getkey();
void edge(int l,int t,int r,int b,int c1,int c2);
void init();
void new();
void newk();
void draw(int x,int y,int c);
void show();
void close();
void down();
int candown();
void tobotton();
int canturn();
void turn();
int canleft();
void left();
int canright();
void right();
int isok(int x);
void ok(int x);
void showscore();
void drawnext();
int isover();
void over();

int getkey()
{
char ch=0;
if(kbhit())
ch=getch();
return(ch);
}

void init()
{
int gdriver=DETECT,gmode;
int size,i,j;
/* registerbgidriver();*/
initgraph(&gdriver,&gmode,PATH);
setbkcolor(BK);
setfillstyle(11,8);
edge(X-9,Y-9,X+408,Y+408,DC,DC);
floodfill(1,1,DC);
edge(X-9,Y-9,X+408,Y+408,DC,LC);
edge(X-7,Y-7,X+406,Y+406,DC,LC);

edge(X-1,Y-1,X+201,Y+401,DC,LC);
edge(X-3,Y-3,X+203,Y+403,LC,DC);

edge(X+260,Y-1,X+341,Y+81,DC,LC);
edge(X+258,Y-3,X+343,Y+83,LC,DC);

size=imagesize(X+1,Y+1,X+20,Y+20);
bit[0]=(char far*)malloc(size);

if(bit[0]==NULL){sound(2000);getch();nosound();exit(1);}

getimage(X+1,Y+1,X+20,Y+20,bit[0]);

for(i=0;i<20;i++)
for(j=0;j<20;j++)
if(bmp[i][j]==1)
putpixel(X+1+j,Y+1+i,P1);
bit[1]=(char far*)malloc(size);

if(bit[1]==0){sound(2000);getch();nosound();exit(1);}

getimage(X+1,Y+1,X+20,Y+20,bit[1]);

for(i=0;i<20;i++)
for(j=0;j<20;j++)
if(bmp[i][j]==1)
putpixel(X+1+j,Y+1+i,P2);
bit[2]=(char far*)malloc(size);

getimage(X+1,Y+1,X+20,Y+20,bit[2]);

setcolor(8);
outtextxy(X+245,Y+95,"score");
outtextxy(X+320,Y+95,"level");
edge(X+240,Y+107,X+290,Y+122,LC,DC);
edge(X+242,Y+109,X+288,Y+120,DC,LC);
edge(X+315,Y+107,X+365,Y+122,LC,DC);
edge(X+317,Y+109,X+363,Y+120,DC,LC);

size=imagesize(X+240,Y+107,X+290,Y+122);
sim=(char far *)malloc(size);
getimage(X+240,Y+107,X+290,Y+122,sim);

edge(X+207,Y+133,X+400,Y+401,LC,DC);
edge(X+210,Y+135,X+397,Y+398,LC,DC);

outtextxy(X+213,Y+140,"Control Option:");
outtextxy(X+213,Y+150,"-----------------");
outtextxy(X+213,Y+160," [P]--Start/Pause");
outtextxy(X+213,Y+177," [Esc]--Quit the game");
outtextxy(X+213,Y+194," [W]--Turn");
outtextxy(X+213,Y+211," [A]--Left");
outtextxy(X+213,Y+228," [S]--Down fast");
outtextxy(X+213,Y+245," [D]--Right");
outtextxy(X+213,Y+262,"[Space]--Down to botton");

for(i=0;i<4;i++)
edge(X+213+i*3,Y+278+i*4,X+394-i*3,Y+391-i*4,DC,LC);
outtextxy(X+224,Y+300," This game was");
outtextxy(X+224,Y+312,"programed by jackin.");
outtextxy(X+224,Y+324," If you discover" );
outtextxy(X+224,Y+336,"errors in it ,please");
outtextxy(X+224,Y+348," email to:");
setcolor(4);
outtextxy(X+224,Y+360," [email protected]");

if(bit[0]==0||bit[1]==0||bit[2]==0||sim==0)
{
close();
exit(1);
}
putimage(X+1,Y+1,bit[0],0);
}

void edge(int l,int t,int r,int b,int c1,int c2)
{
int cl=getcolor();
setcolor(c1);
line(l,t,r-1,t);
line(l,t,l,b-1);
setcolor(c2);
line(r,t,r,b);
line(l,b,r,b);
setcolor(cl);
}

void draw(int x,int y,int c)
{
putimage(X+20*y,Y+x*20,bit[c],0);
}

void show()
{
int i,j;
for(i=0;i<20;i++)
for(j=0;j<10;j++)
if(map[1][i+4][j+2]!=map[0][i+4][j+2])
{
map[0][i+4][j+2]=map[1][i+4][j+2];
draw(i,j,map[1][i+4][j+2]);
}

}

void close()
{
int i;
for(i=0;i<3;i++)
free(bit[i]);
free(sim);
closegraph();
}

void new()
{
int i,j,t=-1;

score=0;
level=1;
showscore();

for(i=0;i<26;i++)
for(j=0;j<14;j++)
{
map[1][i][j]=newmap[i][j];
map[0][i][j]=0;
}

for(;t<0;)
t=rand();
next=t%M;
}

void newk()
{
int i,j,t=-1;
xx=1;
yy=5;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
map[1][xx+i][j+yy]=kk[next][i][j];

for(;t<0;)
t=rand();
next=t%M;
show();
}

int candown()
{
int i,j;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
{
if(map[1][xx+i][yy+j]==2&&map[1][xx+i+1][yy+j]==1)
return(0);
}
return(1);
}

void down()
{
int i,j;
xx++;
for(i=3;i>=0;i--)
for(j=3;j>=0;j--)
{
if(map[1][xx+i-1][yy+j]!=1)
{
if(map[1][xx+i][yy+j]!=1)
map[1][xx+i][yy+j]=map[1][xx+i-1][yy+j];
}
else
{
if(map[1][xx+i][yy+j]!=1)
map[1][xx+i][yy+j]=0;
}
}
for(j=0;j<4;j++)
if(map[1][xx-1][yy+j]==2)
map[1][xx-1][yy+j]=0;
}

void tobotton()
{
int i,j;
for(i=3;i>=0;i--)
for(j=3;j>=0;j--)
if(map[1][xx+i][yy+j]==2)
map[1][xx+i][yy+j]=1;
}

int canturn()
{
int i,j;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
if(map[1][xx+3-j][i+yy]==1&&map[1][xx+i][j+yy]==2)
return(0);
return(1);
}

void turn()
{
int i,j,t[4][4];
for(i=0;i<4;i++)
for(j=0;j<4;j++)
if(map[1][xx+i][j+yy]==1)
t[i][j]=0;
else
t[i][j]=map[1][xx+i][j+yy];
for(i=0;i<4;i++)
for(j=0;j<4;j++)
if(map[1][xx+i][j+yy]!=1)
map[1][xx+i][j+yy]=t[j][3-i];
}

int canleft()
{
int i,j;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
{
if(map[1][xx+i][yy+j]==2&&map[1][xx+i][yy+j-1]==1)
return(0);
}
return(1);
}

void left()
{
int i,j;
yy--;
for(i=3;i>=0;i--)
for(j=0;j<4;j++)
{
if(map[1][xx+i][yy+j+1]!=1)
{
if(map[1][xx+i][yy+j]!=1)
map[1][xx+i][yy+j]=map[1][xx+i][yy+j+1];
}
else
{
if(map[1][xx+i][yy+j]!=1)
map[1][xx+i][yy+j]=0;
}
}
for(j=0;j<4;j++)
if(map[1][xx+j][yy+4]==2)
map[1][xx+j][yy+4]=0;
}

int canright()
{
int i,j;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
{
if(map[1][xx+i][yy+j]==2&&map[1][xx+i][yy+j+1]==1)
return(0);
}
return(1);
}

void right()
{
int i,j;
yy++;
for(i=3;i>=0;i--)
for(j=3;j>=0;j--)
{
if(map[1][xx+i][yy+j-1]!=1)
{
if(map[1][xx+i][yy+j]!=1)
map[1][xx+i][yy+j]=map[1][xx+i][yy+j-1];
}
else
{
if(map[1][xx+i][yy+j]!=1)
map[1][xx+i][yy+j]=0;
}
}
for(j=0;j<4;j++)
if(map[1][xx+j][yy-1]==2)
map[1][xx+j][yy-1]=0;
}

int isok(int x)
{
int i;
if(x>23)return(0);
for(i=2;i<12;i++)
if(map[1][x][i]==0||map[1][x][i]==2)
return(0);

return(1);
}

void ok(int x)
{
int i;
for(;x>0;x--)
for(i=2;i<12;i++)
map[1][x][i]=map[1][x-1][i];
score++;
level=score/10+1;
}

void showscore()
{
char s[20],l[20];
itoa(score,s,10);
itoa(level,l,10);
putimage(X+240,Y+107,sim,0);
putimage(X+315,Y+107,sim,0);
outtextxy(X+244,Y+111,s);
outtextxy(X+325,Y+111,l);
}

void drawnext()
{
int x,y;
for(x=0;x<4;x++)
for(y=0;y<4;y++)
{
putimage(X+261+20*y,Y+x*20,bit[kk[next][x][y]],0);
}
}

int isover()
{
int i;
for(i=2;i<12;i++)
if(map[1][3][i]==1)return(1);
return(0);
}

void over()
{
int i,j;
for(i=23;i>3;i--)
{
for(j=2;j<12;j++)
map[1][i][j]=1;
show();
delay(1000);
}
for(i=4;i<24;i++)
{
for(j=2;j<12;j++)
map[1][i][j]=0;
show();
delay(1000);
}
}

main()
{ int graphdriver=DETECT;
int graphmode;
int i,j;
char cc;
init();
start:
cc=getkey();
for(;cc!='p'&&cc!='P';)
{
rand();
if(cc==27)goto end;
cc=getkey();
}
new();
newk();
for(;;)
{
for(i=0;i<20000-level*1000;i++)
{
switch(getkey())
{
case 27:
over();
goto end;
case 'w':
case 'W':
if(canturn())
turn();
break;
case 'a':
case 'A':
if(canleft())
left();
break;
case 's':
case 'S':
if(candown())
{
down();
}
else
{

}
break;
case 'd':
case 'D':
if(canright())
right();
break;
case ' ':
for(;candown();)
down();
break;
case 'p':
case 'P':
cc=getkey();
for(;cc!='p'&&cc!='P';)
{
if(cc==27)goto end;
cc=getkey();
}
break;
default:break;
}
show();
}
drawnext();
if(candown())
{
down();
show();
}
else
{
tobotton();
for(j=1;j<24;j++)
if(isok(j))
{
ok(j);
score++;
showscore();
}
if(isover())
{
over();
goto start;
}
newk();
show();
}
}
end:
close();
getch();
}

❹ 单片机多级外部中断控制,请问如何加入流水灯,现在在进行课程设计,迫切需要实现的方法。

功能:先复保持全灭一段时间制,然后顺序点亮8个灯,全亮后再保持一段时间,然后从从头开始
SS2:
MOV
A,#0FFH
;全部熄灭
MOV
P1,A
;送显示
ACALL
DELAY1S
;延时一段时间,保持全灭1S
SS1:
RL
A
;循环左移1位
CLR
ACC.0
;将最低位置0,点亮1个等
MOV
P1,A
;送显示
ACALL
DELAY100ms
;延时一段时间,感觉上100ms比较合适,根据情况自己调整一下
JNZ
SS1
;A不等于0,说明还有灯未点亮,循环继续下一个
ACALL
DELAY1S
;A=0,保持全部点亮1S钟
JMP
SS2
;再次开始
延时子程序我就不写了,你应该会的。
建议:牵涉到延时,最好用定时中断实现,实际运用中ms级的延时一般都会使用中断实现,否则CPU的资源就浪费了。如果是作业就算了,如果你想学些东西最好用中断的方式再尝试一下。

❺ 单片机编程时,中断程序的编程原则是什么

由于中断程序是在打断正在运行的程序而执行的代码,运行之前需要保存寄存器等操作,所以中断程序应尽量:
1.精简短小,使之尽快执行完返回。
2.能不放在中断中的代码尽量不放在中断程序中。

❻ 计算机组成原理课设 中断请求串行判优先电路设计

外部中断复请求源:即外中断制0和1,经由外部管脚引入的,在单片机上有两个管脚,名称为INT0、INT1,也就是P3.2、P3.3这两个管脚。在内部的TCON中有四位是与外中断有关的。IT0:INT0触发方式控制位,可由软件进和置位和复位,IT0=0,INT0为低电平触发方式,IT0=1,INT0为负跳变触发方式。这两种方式的差异将在以后再谈。IE0:INT0中断请求标志位。当有外部的中断请求时,这位就会置1(这由硬件来完成),在CPU响应中断后,由硬件将IE0清0。IT1、IE1的用途和IT0、IE0相同。(2)内部中断请求源TF0:定时器T0的溢出中断标记,当T0计数产生溢出时,由硬件置位TF0。当CPU响应中断后,再由硬件将TF0清0。TF1:与TF0类似。TI、RI:串行口发送、接收中断,在串行口中再讲解。2、中断允许寄存器IE在MCS-51中断系统中,中断的允许或禁止是由片内可进行位寻址的8位中断允许寄存器IE来控制的

❼ 单片机外部中断的编程

/***********************************************/
#include<reg51.h>

sbit shiwei=P2^;//定义接口
sbit gewei=P2^1;

/*********************************************/
unsigned char code table[]={//数码显示表
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f};
/*******************************************/

void msdelay()//5 ms 延时
{
int x,y;
for(x=(65536-15)%256;x;x--)
{
for(y=(65536-15)/256;y;y--);
}
}

/***************************************/

/**************************************/
void init()//初始化
{
TMOD=0x11;
PX0=1;
TH0=(65535-50)/256;
TL0=(65535-50)%256;
TH1=(65535-100)/256;
TL1=(65535-100)%256;
EX0=1;
ET0=1;
ET1=1;
EA=1;
TR1=1;
}

/*****************************************/
unsigned char passtime=0;//全局变量
unsigned char timecount=0;

/*****************************************/

main()
{
unsigned char count;
count=0;
init();
while(P3^0!=1);
msdelay();
if(P3^0==1)//确定开始或者结束
{count++;
if(count%2)
{TR0=1;}
else
{TR0=0;}
}
}

void clear() interrupt 0//清零
{
TR0=0;
timecount=0;
passtime=0;
}

void timer() interrupt 2//50ms 定时
{
timecount++;
if(timecount==20)
{
timecount=0;
passtime++;//50*20=1s
}
TH0=(65535-50)/256;
TL0=(65535-50)%256;
TR0=1;
}

void displaytimer() interrupt 2//用于数码管的两位显示,十位和各位
{
TH1=(65535-100)/256;
TL1=(65535-100)%256;

shiwei=0;//动态显示,其中P2.0=0十位选通 P2.1=各位选通
gewei=1;
P0=table[passtime/10];//十位
msdelay();
msdelay();
msdelay();
shiwei=1;
gewei=0;
P0=table[passtime%10];//各位
msdelay();
msdelay();
msdelay();

TR1=1;
}

/************************** shijian bu shi hen zuique de ,yingwei wo meiyou yingjian tiaoshi ,ni you de hua jiu nong yixia kan kan ba .*************************/

❽ 用C或C++写个课程设计 LINUX的调度和时钟中断处理代码的分析

rt

❾ 51单片机中断编程

外部中断信号接到P3.3口,为INT0中断,程序如下
#include<reg51.h>
sbit X0=P1^0; //用表示P1.0
sbit X1=P1^1; //用X0表示P1.1
sbit X2=P1^2; //用X0表示P1.2
void main(void)
{
P1=0x00; //将P1口初始化位高电平,如果没有这句,初始化为低电平,这里可根据需要选择
EA=1; //中断允许
IT1=1; //触发方式为下降沿触发
EX1=1; //外部中断允许

while(1); //这里可以随便写你需要的主程序,我用了个死循环,目的是等待中断
}

void counter1(void) interrupt 2 //INT1中断
{
EX1=0; //禁止外部中断
ET0=1; //计时器中断0允许
ET1=1; //计时器中断1允许
TMOD=0x21; //T1用模式2、T0用模式1
IP=0x0a; //T1、T0为高优先级
X2=~X2; //每次中断就取反P1.2引脚
X1=1; //P1.1输出低电平0.3ms
X0=1; //P1.0输出低电平1.5ms
TH0=0xfd; //T0用模式1,16位计时器,在1.5ms后执行时间中断0
TL0=0x12;
TH1=0x6a; //T1用模式2,8位计时器,在0.3ms执行时间中断1
TL1=0x6a;
TR1=1; //启动计时器T1
TR0=1; //启动计时器T0
while(X0==1); //等待中断响应完成
EX1=1; //允许外部中断

}
void counter2(void) interrupt 1 //定时器0中断
{
X0=0;
}
void counter3(void) interrupt 3 //定时器1中断
{
X1=0;
}
程序已经经过仿真调试,可以完成你的要求,等待加分中。。。。
PS一下,如果满意的话,十分期待给好评,谢谢了

热点内容
幼师专业怎么样 发布:2021-03-16 21:42:13 浏览:24
音乐小毛驴故事 发布:2021-03-16 21:40:57 浏览:196
昂立中学生教育闸北 发布:2021-03-16 21:40:47 浏览:568
建筑业一建报考条件 发布:2021-03-16 21:39:53 浏览:666
2017年教师资格注册结果 发布:2021-03-16 21:39:49 浏览:642
中国教师资格证查分 发布:2021-03-16 21:39:41 浏览:133
踵什么成语有哪些 发布:2021-03-16 21:38:20 浏览:962
东营幼师专业学校 发布:2021-03-16 21:35:26 浏览:467
机械电子研究生课程 发布:2021-03-16 21:33:36 浏览:875
杭州朝日教育培训中心怎么样 发布:2021-03-16 21:33:28 浏览:238