㈠ 单片机c语言中断
查询传送方式查询方式的过程为: 查询—等待—数据传送。直接存储器存取(DMA)方式。在下述两种情况下可考虑采用DMA 方式:外设和存储器之间有大量的数据需要传送, 如磁盘驱动器中的大量数据需快速送到微机系统的RAM 中;外部设备的工作速度很高。同其他计算机系统一样, 单片机系统还有另一种非常重要的数据输入/ 输出方式———中断方式。中断的概念中断优先级:中断系统中有两个不可寻址的“优先级生效”触发器, 一个指出CPU 是否正在执行高优先级的中断服务程序, 另一个指出CPU 是否正在执行低优先级中断服务程序。二级中断嵌套当CPU 正在处理一个中断请求时, 又出现了另一个优先级比它高的中断请求, 这时,CPU 就暂时中止执行对原来优先级较低的中断源的服务程序, 保护当前断点, 转去响应优先级更高的中断请求, 并为其服务。中断处理的大致流程 中断响应条件1有中断源发出中断请求;2中断总允许位EA = 1 , 即CPU 开中断;3申请中断的中断源的中断允许位为1 , 即中断没有被屏蔽;4无同级或更高级中断正在被服务;5当前的指令周期已经结束;6若现行指令为RETI 或者是访问IE 或IP 指令, 则该指令以及紧接着的另一条指令已执行完。 </SPAN></SPAN>
㈡ 单片机C语言中断函数的定义形式是怎样的
形式如下:
void 中断名(void) inerrupt 中断号 using 工作寄存器组
比如外部中断0
void ext0(void) interrupt 0 using 1 //后面的using 1可以省略,缺省为0
定时器1
void t1isr() interrupt 3
单片机内部结构
1、CPU
它的名字没有尺汪改,还是称为CPU(Central Processing Unit)。它是单片机的核心部件,包括运算器和控制器。
运算器既是算术逻辑单元ALU(Arithmetic logic Unit),其功能是进行算术运算和逻辑运算。
控制器一般由指令寄存器、指令译码器、时序电路和控制电路组成。其迅睁作用是完成取指令、将指令译码形成各种微操作并执行指令,同时控制计算机的各个部件有条不紊地工作。
2、单片机内部结构之一ROM
“硬盘”,改了名字,称为程序存储器,也叫只亩困岁读存储器。用ROM(Read only memery)表示。其作用和计算机的硬盘差不多,用来存放用户编写的程序。特点是:掉电后不会丢失数据(程序)。
㈢ 鍗旷墖链哄备綍鐢ㄤ腑鏂鍒囨崲绋嫔簭锛屽氨鏄鎴戠幇鍦ㄧ敤鍗旷墖链哄疄鐜板姛鑳紸鍜孊锛岀敤涓鏂浣滀负AB绋嫔簭镄勫垏鎹锛岀敤C璇瑷瑕佹
棣栧厛瀹氢箟鍏ㄥ眬鍙橀噺int_num=0;
灏嗕互涓嬩唬镰佹斁鍏ヤ腑鏂链嶅姟鍑芥暟锛
void INT_X(void) interrupt X
{
switch(int_num) //鍒ゆ柇浠诲姟浠g爜
{
case 0;//浠诲姟A
//杩欓噷濉浠诲姟A绋嫔簭娈
break;
case 1;//浠诲姟B
//杩欓噷濉浠诲姟A绋嫔簭娈
break;
default:
break;
}
int_num++;
if(int_num>1)int_num=0;
}
㈣ 单片机中断C语言
#include<reg51.h>
#defineucharunsignedchar
ucharcodeledtab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};//0-9
ucharscanled;
ucharflag=0;
uchardisdat[6];
voiddelay(unsignedintx)
{
unsignedinti,j;
for(i=0;i<x;i++)
for(j=0;j<120;j++);
}
voiddischg()
{
uchari;
for(i=0;i<6;i++)
disdat[i]=10;
}
voidext0()interrupt0
{
flag=1;
}
voidext1()interrupt2
{
flag=2;
}
voidt1isr()interrupt3 //显示
{
TH1=0xec;
TL1=0x78;
switch(scanled)
{
case0:
P2=0x01;
P0=~ledtab[disdat[5]];
break;
case1:
P2=0x02;
P0=~ledtab[disdat[4]];
break;
case2:
P2=0x04;
P0=~ledtab[disdat[3]];
break;
case3:
P2=0x08;
P0=~ledtab[disdat[2]];
break;
case4:
P2=0x10;
P0=~ledtab[disdat[1]];
break;
case5:
P2=0x20;
P0=~ledtab[disdat[0]];
break;
default:break;
}
scanled++;
scanled%=6;
}
main()
{
uchari,j;
TMOD=0x10;
TH1=0xec;
TL1=0x78;
TR1=1;
ET1=1;
IT0=1;
IT1=1;
EX0=1;
EX1=1;
EA=1;
scanled=0;
dischg();
while(1)
{
i=0;
switch(flag)
{
case1:
for(j=0;j<3;j++)
for(i=0;i<10;i++)
{
disdat[5]=disdat[4];
disdat[4]=disdat[3];
disdat[3]=disdat[2];
disdat[2]=disdat[1];
disdat[1]=disdat[0];
disdat[0]=i;
delay(200);
}
dischg();
flag=0;
break;
case2:
for(j=0;j<3;j++)
for(i=0;i<10;i++)
{
disdat[0]=disdat[1];
disdat[1]=disdat[2];
disdat[2]=disdat[3];
disdat[3]=disdat[4];
disdat[4]=disdat[5];
disdat[5]=i;
delay(200);
}
dischg();
flag=0;
break;
default:break;
}
}
}
㈤ 51单片机c语言编程中产生中断的条件是什么
三个:
1.总中断使能位EA=1
2.相应中断使能 (ET0、EX0……) 打开
3.中断源:外部中断引脚的电平触发、定时器溢出……
oid PxInt0(void) interrupt 0 //定义外部中断0
void PxInt1(void) interrupt 2 //定义外部中断1
void time0_int(void) interrupt 1 //定义定时器0
void time1_int(void) interrupt 3 //定义定时器1
这里为什么是 0 1 2 3的顺序呢~?其实是单片机内部默认的,顺序依次是:
0 外部中断0
1 定时/计数器0
2 外部中断1
3 定时/计数器1
4 串行口中断
这个是没有什么理由的,记住就行,以后要定义一个中断的时候,定义的是哪一个,就在后面加上它的序号就行了,比如void PxInt0(void) interrupt 0 表示外部中断0,就在后面加上interrupt 0.
逐词解释的话。。。如:void PxInt0(void) interrupt 0
void的意思是没有返回值,Pxint0(void)是你定义的函数名,interrupt表示你定义的是中断函数,0表示你定义的是外部中断0
后面的依此类推。
另外,中断函数不需要在main函数前声明,当单片机检测到中断所需的信号时,它会自动立即停止正在进行的工作进入中断函数。