您的当前位置:首页正文

中断程序

2020-02-15 来源:步旅网
#include #include #define uint unsigned int #define uchar unsigned char uchar LEDX; bit PLAY=1;

//流水灯显示值

//播放暂停标志位

sbit button=P3^3;

//中断1引脚

void delay_ms(uint x);

void main() { IE=0X84; }

IT1=1;

//延时子程序

//中断初始化,开中断1跳沿触发

LEDX=0x80; //显示值初始化 while(1) { if(PLAY==1) }

{ LEDX=_crol_(LEDX,1); //循环左移 }

P2=LEDX; delay_ms(500);

void delay_ms(uint x) { uchar y; }

void Play_pause() interrupt 2 { if(button==0) }

{ delay_ms(10); }

if(button==0)

//按键防抖

//标志取反

while(x--)

for(y=0;y<120;y++);

{ PLAY=~PLAY; }

6-2

#include unsigned char time=0; sbit P1_0=P1^0;

void main() { TMOD=1; }

//设置T0为方式0,时钟频率6MHz

TH0=15536/256;

TL0=15536%256; //赋初值,定时100ms TR0=1; while(1)

{ if(TF0==1) //查询方式定时 }

{ TH0=15536/256; }

TL0=15536%256; TF0=0;

if(++time==10) //100ms循环10次, { time=0;

P1_0=~P1_0;

}

6-3

#include sbit P1_0=P1^0;

void main() { TMOD=0X25; }

void T0_count() interrupt 1 { TR1=1; }

void T1_wave() interrupt 3 { P1_0=~P1_0; }

TR0=0;

//打开T1定时 //关闭T0计数

TH0=0XFF; TL0=0XFF; TH1=6; TL1=6;

IE=0X8A; //开中断T0,T1 TR0=1; while(1);

//T0方式1计数,T1方式2定时

6-4

#include sbit P1_0=P1^0;

void main() { TMOD=0X60; }

void T1_count() interrupt 3 { P1_0=~P1_0; }

//T1方式2

TH1=TL1=254; //计数值2 IE=0X88; TR1=1; while(1);

//开T1中断

6-5

#include sbit P1_0=P1^0;

void main() { TMOD=0X27;

TL0=0XFF; TH0=206; IE=0X8A;

TCON=TCON|0X50; }

void T0_count() interrupt 1 { TL0=0XFF; }

void T1_wave() interrupt 3 { P1_0=~P1_0; }

TH0=206; while(1);

6.4.4

#include sbit Pluse=P3^3;

void main() { }

TMOD=0X90; TL1=0;

while(Pluse); //等待INT1引脚变为低电平 TR1=1;

while(!Pluse); // 等待INT1引脚变为高电平 while(Pluse); //等待INT1引脚变为低电平 TR1=0;

//停止计数 //读出计数值

//T1为方式1定时,GATE=1

P1=TL1;

习题6-4

#include bit flag=1;

//轮换标志位

//显示计数、定时循环

sbit LEDC=P2^0; sbit LEDT=P2^6;

void main() { LEDC=1; }

LEDT=0; TMOD=3; TH0=0XFF; TL0=0X9C; IE=0X82; TR0=1; while(1);

//T0方式1计数

//计数100

//开T0中断

void T0_candt() interrupt 1 { if(flag==0)

//标志位为0时,计数

{ TMOD=3;

TH0=0XFF; TL0=0X9C; LEDC=1;

}

LEDT=0;

else { TMOD=1; TH0=0XFE; TL0=0X0C; LEDT=1; LEDC=0;

}

flag=~flag;

}

//标志位为1时,定时

//标志位取反

#include sbit P1_0=P1^0; bit flag=0;

void main() {

TMOD=2; TL0=76; TH0=236; TR0=1; while(1) { if(TF0==1)

//6MHz晶振

//高低电平标志位,初始为0

//T0工作在方式2

//执行需4us //执行需2us

{ P1_0=~P1_0;

if(flag==0)

//执行需4us

{ TL0=81; // 输出低电平360us,调整10us } else

{ TL0=241; //输出高电平40us,调整10us }

flag=~flag; //高低电平标志位 TF0=0;

//查询方式,溢出位清0

}

}

}

因篇幅问题不能全部显示,请点此查看更多更全内容