- 1、本文档共48页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[工学]《单片机的C语言程序设计与运用第2版》期末复习题及答案2
第四章
中断类
例4-1 P104
假设外部中断0和外部中断1均为下降沿触发,当外部中断0发生时,P0端口的电平反向,当外部中断1发生时,P1端口的电平反向。
#includereg51.h
void IS0(void) interrupt 0
{ P0=~P0;} //P0端口反向
void IS1(void) interrupt 2
{ P1=~P1;} //P1端口反向
void main( )
{ P0=0x00; P1=0xFF;
IT0=1; IT1=1;
EX0=1; EX1=1; EA=1;
while(1);
}
【例4-9】外部中断示例
在本实例中,首先通过P1.7口点亮发光二极管D1,然后外部输入一脉冲串,则发光二极管D1亮、暗交替。
#includereg51.h
sbit P1_7=P1^7;
void interrupt0( ) interrupt 0 using 2 //外部中断0
{ P1_7=!P1_7;}
void main( )
{ EA=1; //开中断
IT0=1; //外部中断0脉冲触发
EX0=1; //外部中断0
P1_7=0;
do{ }while(1);
}
如果有3个脉冲,则灯亮、暗交替一次,可如下面编程:
#includereg51.h
Sbit P17=P1^7;
unsigned char i=3;
void main( )
{ EA=1; IT0=1; EX0=1;
P17=0;
do{ }while(1); }
void interrupt0( ) interrupt 0
{ i=i-1;
if(i==0)
{ P17=!P17; i=3;
}
}
【例4-10】如图4-18所示,8只LED阴极接至单片机P0口,两开关S0、S1分别接至单片机引脚P3.2()和P3.3()。编写程序控制LED状态。按下S0后,点亮8只LED;按下S1后,变为闪烁状态。
#includereg51.h
sbit P32=P3^2;
void delay(unsigned int d) //定义延时子函数
{ while(--d0);
}
void main( )
{ P0=0xFF; //熄灭LED
IT0=1; IT1=1; //外中断0、1脉冲触发方式
EA=1; EX0=1; EX1=1; //开中断
for( ; ; ) //延时等待中断发生
{;}
}
void INT0_ISR( ) interrupt 0//外中断0中断服务函数
{ P0=0x00;
}
void INT1_ISR( ) interrupt 2//外中断1中断服务函数
{ while(P32!=0) //如果有外部中断0,则退出
{ delay(5000);
P0=0x00;
delay(5000);
P0=0xFF;
}
}
定时类
【例4-16】设单片机的fosc=12MHz,要求在P1.0上产生周期为2ms的方波。
要在P1.0上产生周期为2ms的方波,定时器应产生1ms的周期性定时,定时到对P1.0取反。
要产生1ms的定时,应选择方式1,定时器方式。
TMOD的确定:选择定时器/计数器T0,定时器方式。方式1,GATE不起作用,高4位为0000,TMOD=01H。
TH、TL的确定:单片机的fosc=12MHz,则单片机的机器周期为1ms,1ms=1000ms,计数器的计数初值为65 536-1000,TH0=(65 536-1000)/256,TL0=(65 536-1000)%256。
① 采用查询方式
程序如下:
#includereg51.h
sbit P1_0=P1^0;
void main(void)
{ TMOD=0x01;
TR0=1;
for(;;)
{ TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
do{ }while(!TF0);
P1_0=!P1_0;
TF0=0;
}
}
② 采用中断方式
程序如下:
#includereg51.h
sbit P1_0=P1^0;
void timer0(void) interrupt 1 using 1
{ P1_0=
文档评论(0)