C语言编写单片机中断函数,单片机中断函数怎么写

单片机用C语言编写中断的范例?

定时器溢出中断:

象州网站制作公司哪家好,找创新互联公司!从网页设计、网站建设、微信开发、APP开发、成都响应式网站建设等网站项目制作,到程序开发,运营维护。创新互联公司成立与2013年到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联公司

#includereg51.h

void timer0(void); //函数声明

void main()

{

P1^1 = 0;

TMOD = 0x01; //定时模式

THO = 0xEE;

TL0 = 0xFF; //定时时间

ET0 = 1; //中断允许

EA = 1; //总中断使能

TR0 = 1; //开始计时

while(1); //等待中断

}

void timer0(void) interrupt 1 using 0 //定时器0溢出中断

{

TR0 = 0; //停止计时

P1^1 = ~P1^1; //取反输出

THO = 0xEE;

TL0 = 0xFF; //重载定时时间

TR0 = 1; //开始计时

}

外部中断:

#includereg51.h

void it0(void)

void main()

{

P^1.1 = 0;

IT0 = 0; //触发方式

EX0 =1; //中断允许

EA = 1; //中断使能

while(1); //等待中断

}

void it0(void) interrupt 0 using 1 //外部中断0中断处理程序

{

P1^1 = ~P1^1; //取反输出

}

串口中断:

#includereg51.h

void suart(void);

void main()

{

P1 = 0xAA;

TMOD = 0x20; //设置定时器1为自动重载模式,作为波特率发生器

TH1 = 0xXX; //由波特率计算出来的定时值

TL1 = 0xXX; //

SCON = 0x50; //串口模式

ES = 1; //开放串口中断

EA = 1; //总中断使能

TR1 = 1; //

while(1) //等待中断

{

if(XXXX)

{

SBUF = 0xAA; //发送

}

}

}

void suart(void) interrupt 4 using 0

{

if(RI) //接受完臂

{

XXXXX;

}

if(TI) //发送完毕

{

XXXXX;

}

}

中断矢量程序入口: void 函数名(形参) interrupt 中断矢量 [using 寄存器]

单片机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)表示。其作用和计算机的硬盘差不多,用来存放用户编写的程序。特点是:掉电后不会丢失数据(程序)。

c语言怎么编写单片机的中断

给你上个较完整的程序,可以直接在KEIL中运行并观察输出

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

功能:

本程序在12M晶振模式下,通过定时器中断精确实现数字时钟计时操作,并在KEIL

中实现输出。时、分、秒的变化在定时中断里处理。

说明:

因采用工作方式2,自动装入初值,所以此程序计时很精确,只是在KEIL中模拟输

出显示的变化速度很快,这点可不理会

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

#include

#include

#define

TEST

//此行用于KEIL输出显示,如果不需要显示可将其删除

typedef

unsigned

char

uchar;

typedef

unsigned

int

uint;

#define

TH0TL0_INIT

(256-250)

//定时器8位自动装入模式下寄存器初值,0.25ms中断一次

char

cHour;

//时

char

cMin;

//分

char

cSec;

//秒

uint

iCount;

//秒计数,计数达到4000时1s,4000*0.25ms

=1000ms

=

1s

bit

bSecChanged;

//秒发生变化标志,每秒送一次输出显示,送显完成后清0,提高主程序效率

//==============================================================================

//T0定时器中断服务程序,12M晶振下每0.25ms产生中断,本程序执行一次

//==============================================================================

void

Timer0()

interrupt

1

{

iCount++;

//秒计数值+1

if(iCount==4000)

{//时间计数达到1S

iCount

=

0;

//重新开始下一秒计数

cSec++;

//时钟:秒+1

bSecChanged

=

1;

//置秒发生变化标志

if(cSec==60)

{//计够60s

cSec

=

0;

//重新开始下一分计数

cMin++;

//时钟:分+1

}

if(cMin==60)

{//计够60分钟

cMin

=

0;

//重新开始下一小时计数

cHour++;

//时钟:小时+1

}

if(cHour==24)

{//计够24小时

cHour

=

0;

//重新开始第二天计数

}

}

}

//==============================================================================

//主程序

//==============================================================================

void

main()

{

uchar

outstr[10];

//输出字符串,我的编译器可能有问题,直接输出有错

TMOD

=

0X02;//工作方式2,8位自动重装计时模式

TH0

=

TH0TL0_INIT;

//0.25ms中断一次

TL0

=

TH0TL0_INIT;

//0.25ms中断一次

#ifdef

TEST

SCON

=

0x50;

/*

SCON:

mode

1,

8-bit

UART,

enable

rcvr

*/

TMOD

|=

0x20;

/*

TMOD:

timer

1,

mode

2,

8-bit

reload

*/

TH1

=

221;

/*

TH1:

reload

value

for

1200

baud

@

16MHz

*/

TR1

=

1;

/*

TR1:

timer

1

run

*/

TI

=

1;

/*

TI:

set

TI

to

send

first

char

of

UART

*/

#endif

cHour

=

0;

//时

cMin

=

0;

//分

cSec

=

0;

//秒

iCount

=

0;

//秒计数

bSecChanged

=

0;

outstr[2]

=

':';

//时分分隔符

outstr[5]

=

':';

//分秒分隔符

outstr[8]

=

0;

//字符串结束符

EA=1;

//开总中断

ET0=1;

//允许T0中断

TR0=1;

//启动T0

while(1)

{

if(bSecChanged==1)

{//秒发生变化,将时间值转换为可显示字符串准备送显示

bSecChanged

=

0;//清除标志,节省CPU资源

outstr[0]

=

cHour/10

+

0x30;

//将秒转换为ASCII码

outstr[1]

=

cHour%10

+

0x30;

outstr[3]

=

cMin/10

+

0x30;

//将分转换为ASCII码

outstr[4]

=

cMin%10

+

0x30;

outstr[6]

=

cSec/10

+

0x30;

//将小时转换为ASCII码

outstr[7]

=

cSec%10

+

0x30;

#ifdef

TEST

printf("

%s\r",outstr);

//在KEIL中显示时钟

#endif

}

}

}


网站题目:C语言编写单片机中断函数,单片机中断函数怎么写
路径分享:http://scyanting.com/article/dssiicc.html