当前位置:首页 » 编程语言 » c语言中断程序

c语言中断程序

发布时间: 2023-05-09 15:39:00

A. 什么是c语言的中断程序作用是什么

中断服务程序:处理器处理“急件”,可理解为是一种服务,是通过执行事先编好的某个特定的程序来完成的,这种处理“急件”的程序被称为——中断服务败销程序。

当中央处理器正在处理内部数据时,外界发氏念生了紧急情况,要求CPU暂停当前的工作转去处理这个紧歼枯困急事件。处理完毕后,再回到原来被中断的地址,继续原来的工作,这样的过程称为中断。实现这一功能的部件称为中断系统,申请CPU中断的请求源称为中断源,单片机的中断系统一般允许多个中断源,当多个中断源同时向CPU请求中断时,就存在一个中断优先权的问题。通常根据中断源的优先级别,优先处理最紧急事件的中断请求源,即最先响应级别最高的中断请求。

B. C语言中断正在执行的子程序

在子程序中用While(一个全局变量){这里执行子程序的操作}
要中断时把这个变量设为0,
则那个子程序就退出了.
这里神氏搜假设你的子程序是个游历重复反复执行的操作.如果不是,那么你的需求本身就是错的做法你需要核悉重新评估你的设计合理性.

C. 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
}
}
}

D. 怎样用C语言编写一个DOS下的中断服务程序

DOS中断中断属于汇编层面的内容,可以用asm内联实现:

在windows visual c++下用__asm关键字。

在gcc下用__asm__宏即可。


示例(vc):

#include<stdio.h>
intmain()
{
__asmint3h;
return0;
}


这样就可以在C里面写入汇编代码了。

__asm关键字用于调用内联汇编程序,并且可在 C 或 C++ 语句合法时出现。它不能单独出现。必须后跟汇编指令、一组在大括号中的命令、或者至少一对空大括号。术语 “__asm块”在此处指任何命令或命令组,不管是否在大括号内。


如果不与大括号一起使用,则__asm关键字表示此行的其余部分是一条汇编语言语句。如果与大括号一起使用,则该关键字表示大括号之间的每一行都是一条汇编语言语句。为了与早期版本兼容,_asm是__asm的同义词。

由于__asm关键字是语句分隔符,因此您可以将程序集指令放在同一行中。

在 Visual C++ 2005 之前,指令

__asm int 3
不会导致在使用/clr编译时生成本机代码;编译器会将该指令转换为 CLR 中断指令。

__asm int 3现在将导致为函数生成本机代码。如果您希望函数导致代码中出现断点,还希望将函数编译为 MSIL,请使用__debugbreak。

E. C语言中断/定时的疑问

中断函数是不需陆亏要额外通过代码调用的

当中断条件满足,单片机会打断当前执行的语句,跳转到中断函数,然后执行完中断函数后,再次返回之前被打断的语迹悉绝句继续执行

中断函数中,每次都会对定时器重新初始化,即头两句对TH1和TL1的赋值,这样每50ms会再次进入一次中断函数.每20次进入中断,即经过了1秒,然后对全局姿姿变量miao自增1

而main函数则是不断对变量miao进行输出

F. 如何用c语言编写一个可中断的程序

驻留程序
通俗点讲
就是
程序运行完了,
还要保留
临时数据

运行状态,
等下一次
调用时
继续
执行
和普通程序的
区别:
普通程序(如一个
子函数)
调用完了

临时数据

不需要了,
分配的
内存
空间

回收了,

驻留程序

要保留这些的
驻留
程序
主要
用于
中断函数

非中断函数

有应用,较少。分别举个例子:
1)用于
中断:
假设
一个

定时器
做的
时钟函数,定时器
设置为
1s一个中断。
main(晌伏)
{
显示
时间
hour,min,sec;
//
循环
刷屏显示
}
中断函数
{
sec++;
if(sec>=60)
{
sec=0;
min++;
}
if(min>=60)
{
min=0;
hour++;
}
if(hour>=24)
{
hour=0;
}
}
这时候
就能看出,
中断程序

运行完的
时候
不能

3个
变量
清空,
因为
下次
中断
还要用到
上次的
值,
这个程序

一直
驻留
内存;
2)再来个
普通
函数的
假设
做了一个程序
,程序中
有一个
函数aa,而
函数
aa
我只能
让它执行
3次就得基谨橘
关闭程序(这个
用在
密码
验证上)
aa()
{
密码验证次数n+1
返回n

验证结果
}
那这个
aa函数

密码
验证
阶段
就搏团要
常驻
内存

G. C语言中是怎么实现中断的能提供点资料或举几个例子更好……

中断大概是这样的。。。如果有点错误不要怪我。铅如。。我以前作过鼠标中断的东西。。现在有些想不起来了。。。所以。。。呵呵呵。。。
当程序运行到中断条件的时候,会向CPU发信号改变优先级(原先运行的东西会放进哪个特定的地方的,作保存),以发出中断的那段程序作为最高优先,执行完成后再由执行另外的。。。建议你去看看汇编。。。哈哈哈。。。我没学过的。。。
C中实现中断是用了一个函数:geninterrupt(...)
这个“...”是个16进制的数字,是中断号,像鼠标中断号就是0x33
还要用到类似汇编里寄存器模样的变量敬带:如_AX,_BX,_CX,_DX...不同的值功能不同。。。哎呀,我都忘完了。。。建议去查下geninterrupt()的用法就亮激芦OK了。。。

H. C语言定时中断程序

你可以在蜂鸣器子程序中的while(1)内加一个按键扫描程序,如果扫描到撤警键可以跳出这个while(1)死循环,可以用go
to函数(出错的可能性要大一些渣绝,但一般也没事)。姿梁辩或者你把while(1)改成while(key);key为一个变量,外界迹缺可以将key置1(调用蜂鸣器),当蜂鸣器内部扫描到撤警键后将key置0,这样也可以跳出这个循环。要不你就把程序直接发出来,帮你
改一下

I. 什么是C语言的中断程序 有什么用啊

C语言标准语法中是没有中断的,稿橘中断是硬件在应用C语言开发时引入的,中断的实现逻辑都由硬件来完成。
下面以单片机的中断为例:一般有两种,定时器中断和外禅敬雀部中断。中断的贺早提出主要是为了让CPU能及时处理突发事件以及提高代码运行效率。
举生活中的例子:现在假设你正在家里看书,突然电话响了,你会放下书,去接听电话,听完电话后,你会回去继续看书。在这里,将主程序的运行比作看书,电话铃声响了是中断触发信号,你放下书是保护现场,接听电话是在执行中断,回去看书是返回现场继续运行主程序。
当然中断还有嵌套和优先级的问题,这里就不详细来讲。
希望我的回答对你有所帮助!

J. 怎样在C语言中使用中断函数

首先你要写中滑御断圆让祥函数
然后在主橘搏程序中像调用子函数一样调用就可以了
举个例子吧
#define uchar unsigned char
#define uchar unsigned char
sbit D1=P1^0;
uchar aa;
void init()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}

void main()
{
init();
while(1)
{
if(aa==20)
{
D1=~D1;
aa=0;
}
}
}

void T0time()interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
aa++;
}

热点内容
捷达方向机安全登录密码是多少 发布:2025-07-19 00:57:37 浏览:688
夜魔迅雷下载ftp 发布:2025-07-19 00:39:29 浏览:94
增值税票安全接入服务器地址 发布:2025-07-19 00:20:45 浏览:481
solidworkspcb服务器地址 发布:2025-07-18 22:50:35 浏览:816
怎么在堆叠交换机里配置vlan 发布:2025-07-18 22:42:35 浏览:625
java调用别人的接口 发布:2025-07-18 22:37:35 浏览:435
服务器四个节点如何联网 发布:2025-07-18 22:36:02 浏览:273
华强北什么地方休安卓手机 发布:2025-07-18 22:24:56 浏览:736
数据库的根本目标 发布:2025-07-18 21:37:50 浏览:939
压缩机的流速 发布:2025-07-18 21:37:40 浏览:408