单片机交流
登录
直播中
飞毛腿452
8年用户
855经验值
擅长:电源/新能源
私信
关注
[问答]
请问c语言是如何编写51单片机中断程序的?
开启该帖子的消息推送
请问c语言是如何编写51
单片机
中断程序的?
回帖
(1)
陈鹏
2021-10-14 11:43:51
例如程序:
#include
void main(void)
{
EA=1; //开放总中断
EX0=1; //允许使用外中断
IT0=1; //选择负跳变来触发外中断
P0=0xff; //关闭所有P0口的LED灯
while(1); //无限循环,
}
void it0(void) interrupt 0 using 0 //外中断0的中断编号为0
{
P0=~P0; //每产生一次中断请求,P0取反一次。
}
当有中断时,这个程序的执行过程是怎样的???
A1:从main开始,开放总中断,允许使用外中断,选择负跳变来触发外中断,到这时负跳变没来没就一直while(1),等待。来了后执行
void it0(void) interrupt 0 using 0 //外中断0的中断编号为0
{
P0=~P0; //每产生一次中断请求,P0取反一次。
}
A2:有中断时直接跑到中断服务去
A3:CPU会一直在检测是否有中断请求的。当收到中断请求EX 时,进行软件设置,开启总中断EA ,再设置中断的触发方式IT。
转载自:
http://bbs.elecfans.com/forum.php?mod=viewthread&tid=220199
外部中断定时器c语言程序详解
利用外部中断0,定时器0从数码管到流水灯显示
#include "reg52.h"//包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include "intrins.h"
#define uint unsigned int
#define uchar unsigned char
uchar led,n,i,count=0;
uchar smg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f
,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//0-F
uchar sm[]={0x00,0x01};//数码管扫描
uchar str[2];//显示两位数码管
/******************************************************************/
/* 延时函数声明 */
/******************************************************************/
/*void mdelay(uint t)
{
uchar n;
for(;t>0;t--)
for(n=0;n<125;n++)
{;}
}*/
/*大约一毫秒的延时函数*/
void mdelay(uint t)
{
uchar n;
while(t--)
{
for(n=0;n<123;n++)
{;}
}
}
/******************************************************************/
/* 主函数 1 */
/******************************************************************/
void main()
{
EA=1;//开总中断开关
EX0=1;//打开外部中断0
INT0=1;//触发方式为下降沿触发
TH0=0x3c;//设置初值
TL0=0xb0;
ET0=1;//打开定时器中断
TR0=1;//启动定时器
TMOD=0x01;//设置定时器0为工作方式1
while(1)
{
for(i=0;i<2;i++)//数码管显示数据
{
P1=0xff;
P2=sm
;
P0=smg[str
];
mdelay(5);
}
}
}
void int0() interrupt 0
{
uchar c;
led=0xfe;
P2=0x00;
for(c=0;c<8;c++)//流水灯循环一次
{
P1=led;
led=_crol_(led,1);//左移函数
mdelay(1000);
}
}
void time0() interrupt 1
{
TH0=0x3c;
TL0=0xb0;
count++;
if(count==20)//延时一秒0-60显示
{
count=0;
str[0]=n/10;
str[1]=n%10;
n++;
if(n==60)
{
n=0;
}
}
}
例如程序:
#include
void main(void)
{
EA=1; //开放总中断
EX0=1; //允许使用外中断
IT0=1; //选择负跳变来触发外中断
P0=0xff; //关闭所有P0口的LED灯
while(1); //无限循环,
}
void it0(void) interrupt 0 using 0 //外中断0的中断编号为0
{
P0=~P0; //每产生一次中断请求,P0取反一次。
}
当有中断时,这个程序的执行过程是怎样的???
A1:从main开始,开放总中断,允许使用外中断,选择负跳变来触发外中断,到这时负跳变没来没就一直while(1),等待。来了后执行
void it0(void) interrupt 0 using 0 //外中断0的中断编号为0
{
P0=~P0; //每产生一次中断请求,P0取反一次。
}
A2:有中断时直接跑到中断服务去
A3:CPU会一直在检测是否有中断请求的。当收到中断请求EX 时,进行软件设置,开启总中断EA ,再设置中断的触发方式IT。
转载自:
http://bbs.elecfans.com/forum.php?mod=viewthread&tid=220199
外部中断定时器c语言程序详解
利用外部中断0,定时器0从数码管到流水灯显示
#include "reg52.h"//包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include "intrins.h"
#define uint unsigned int
#define uchar unsigned char
uchar led,n,i,count=0;
uchar smg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f
,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//0-F
uchar sm[]={0x00,0x01};//数码管扫描
uchar str[2];//显示两位数码管
/******************************************************************/
/* 延时函数声明 */
/******************************************************************/
/*void mdelay(uint t)
{
uchar n;
for(;t>0;t--)
for(n=0;n<125;n++)
{;}
}*/
/*大约一毫秒的延时函数*/
void mdelay(uint t)
{
uchar n;
while(t--)
{
for(n=0;n<123;n++)
{;}
}
}
/******************************************************************/
/* 主函数 1 */
/******************************************************************/
void main()
{
EA=1;//开总中断开关
EX0=1;//打开外部中断0
INT0=1;//触发方式为下降沿触发
TH0=0x3c;//设置初值
TL0=0xb0;
ET0=1;//打开定时器中断
TR0=1;//启动定时器
TMOD=0x01;//设置定时器0为工作方式1
while(1)
{
for(i=0;i<2;i++)//数码管显示数据
{
P1=0xff;
P2=sm
;
P0=smg[str
];
mdelay(5);
}
}
}
void int0() interrupt 0
{
uchar c;
led=0xfe;
P2=0x00;
for(c=0;c<8;c++)//流水灯循环一次
{
P1=led;
led=_crol_(led,1);//左移函数
mdelay(1000);
}
}
void time0() interrupt 1
{
TH0=0x3c;
TL0=0xb0;
count++;
if(count==20)//延时一秒0-60显示
{
count=0;
str[0]=n/10;
str[1]=n%10;
n++;
if(n==60)
{
n=0;
}
}
}
举报
更多回帖
rotate(-90deg);
回复
相关问答
用
C
语言
编写
51
单片机
程序
与用汇编
语言
编写
51
单片机
程序
有何不同?
2021-07-15
1670
51
单片机
的
C
语言
程序
该如何去
编写
2021-10-18
1711
C
语言
在
51
单片机
编程中的应用技巧
2021-07-14
786
怎样去
编写
51
单片机
C
语言
多种点阵屏驱动
程序
?
2021-07-15
1161
如何利用
C
语言
去
编写
单片机
程序
呢
2021-11-02
1536
高级
语言
编写
单片机
程序
的缺陷有哪些?
2021-11-02
1720
没
C
语言
基础怎么学
51
单片机
呢
2021-10-18
1870
怎么实现
51
单片机
的
程序
设计?
2021-11-02
1012
请问
51
单片机
C
语言
程序
按键如何控制步进电机转速?
2021-10-27
1043
C
语言
在
51
单片机
编程中的应用技巧有哪些
2021-10-18
1188
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
首页
论坛版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分