《单片机的C语言程序设计与运用(第2版)》期末复习题及答案.docVIP

  • 42
  • 0
  • 约1.74万字
  • 约 27页
  • 2018-08-24 发布于贵州
  • 举报

《单片机的C语言程序设计与运用(第2版)》期末复习题及答案.doc

《单片机的C语言程序设计与运用(第2版)》期末复习题及答案

PAGE PAGE 3 第四章 中断类 例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

文档评论(0)

1亿VIP精品文档

相关文档