您的位置 首页 电路

单片机两级中止嵌套的示例C程序

单片机两级中断嵌套的示例C程序ifndef__DEMO_4_13_C__define__DEMO_4_13_C__includeAT89X51H>define_MHZ_12设置单片

单片机两级中止嵌套的示例C程序

#ifndef __DEMO_4_13_C__
#define __DEMO_4_13_C__
#include

#define _MHZ_ 12 // 设置单片机运用的晶振频率

void delay10ms(unsigned int count); // 声明延时函数

void LED_show(unsigned long second);

unsigned char g_count; // 全局变量,timer_int函数运用
unsigned char g_second; // 全局变量,timer_int函数运用

void main()
{
g_count = 0; // 设置全局变量初值
g_second = 0;


TMOD = 0x10; // T1运用守时形式,作业形式1,无门控位
TH1 = 0xD8; // 为T1填入初值,守时时刻10ms
TL1 = 0xF0;
TR1 = 1; // 发动T1
IT0 = 1; // 设置INTR0中止方法为边缘触发方法,负跳变时发生中止
PT1 = 1; // 设置守时器1中止为高优先级
ET1 = 1; // 答应守时器1中止
EX1 = 1; // 答应外部中止0中止
EA = 1; // CPU敞开中止

while(1); // 循环等候
}

void timer1_int() interrupt 3 using 3 // T1溢出中止,运用作业组3
{ // 不同等级的中止函数运用不同的作业组
TH1 = 0xD8; // 从头填入初值
TL1 = 0xF0;

g_count++;
if(g_count == 100) // 计时满1s
{
g_count = 0; // 清0
g_second++; // 总秒数增1,溢出时会主动归0
LED_show(g_second); // LED送显
}
}

void intr0_int() interrupt 0 using 2 // INTR0中止,运用作业组2
{
unsigned char tmp;

EA = 0; // 关中止
P1 = 0xff; // 在读取P1口数据前,应先对其寄存器置1
tmp = P1; // 读P1口
EA = 1; // 开中止

delay10ms(100);

EA = 0; // 关中止
tmp = ~tmp; // 变量取反
P1 = tmp; // 送P1口
EA = 1; // 开中止
}

void delay10ms(unsigned int count)
{
unsigned int i, k;
unsigned char j;
unsigned int tmp;
tmp = (int)((100*_MHZ_)/12);

for(i=0; i for(j=0; j<100; j++)
for(k=0; k}

#endif

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/dianlu/261146.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部