//---------------------------------------------------
#include //--------------------------------------------------- //重定义I/0引脚名称 sbit led1=P1^1; sbit led2=P1^2; sbit led3=P1^3; sbit led4=P1^4; sbit P32=P3^2; //--------------------------------------------------- //全局变量及位标志定义 bit FINT0; bit FINT1; bit FT0; bit FT1; bit FT2; unsigned char T0_10ms; unsigned char T0_50ms; unsigned char T0_100ms; //--------------------------------------------------- //固定函数声明 void int_0(); //外部中断0 void int_1(); //外部中断1 void timer_0(); //定时器中断1 void timer_1(); //定时器中断2 void serial_1(); //串行中断1 void serial_2(); //串行中断2 //--------------------------------------------------- //用户函数声明 void initial(); //初始化 //--------------------------------------------------- void main(){ initial(); while(1){ P32=0; //为了使按'取消'、'确定'键能够产生INT0及INT1中断 //led4=0; //上一句等价于此句 if(FINT0){ //中断0来到要做什么事情 FINT0=0; led1=0; //INT0中断时点亮 led2=0; led3=0; led3=0; //可以在此设一个断点 } if(FINT1){ //中断1来到要做什么事情 FINT1=0; led1=1; //INT1中断时熄灭 led2=1; led3=1; } if(FT0){ FT0=0; if(++T0_10ms>30){ T0_10ms=0; //定时多少做什么事,未初始化里定时器尚未设置 } } } } //------------------------------------------------------------------- void initial(){ EA=1; // CPU所有中断开(IE最高位MSB) EX0=1; // INT0中断开 IT0=0; // INT0低电平触发(为1则为下降沿触发) EX1=1; // INT1中断开 IT1=0; // INT1低电平触发(为1则为下降沿触发) return; } //------------------------------------------------------------------- //INT0中断 由P3.2引脚产生 void int_0() interrupt 0 using 0 { FINT0=1; } //------------------------------------------------------------------- //INT1中断 由P3.3引脚产生 void int_1() interrupt 2 using 1 { FINT1=1; } //------------------------------------------------------------------- //定时器0中断 void timer_0() interrupt 1 using 2 { FT0=1; } //------------------------------------------------------------------- //定时器1中断 void timer_1() interrupt 3 using 3 { FT1=1; } //------------------------------------------------------------------- //串行中断1 void serial_1() interrupt 4 { } //------------------------------------------------------------------- //定时器2中断 void timer_2() interrupt 5 { FT2=1; } //------------------------------------------------------------------- 1. 项目文件夹: 先关闭其它Project,,新建一个Project,, 保存在EXT_C文件夹,此Project包含的 所有源程序文件都放在这个文件夹,统一编辑修改和编译。 2. 仿真芯片选择: 硬件仿真必须选择特定的CPU,软件仿真只需要选择一般的52系列,这里 选择常用的Atmel 89C52 3. 系统初始化文件Startup.A51: 主要是内存清零,模拟堆栈安排等系统初始化操作,有时需要修改这个宏汇编 文件, 这个Project里没有加入这个文件。 4. 单步、全速运行到中断: 编译后可以用仿真器单步查看运行结果,在判断外部中断0或1到来的地方 设置断点,全速运行,如果有外部中断(P3.2/P3.3变低或有一个下降沿),那么 程序就停在设置的断点处。
相关文章