历史上的今天
今天是:2025年12月26日(星期五)
2022年12月26日 | 51单片机外部中断处理源程序
2022-12-26 来源:zhihu
//---------------------------------------------------
#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变低或有一个下降沿),那么 程序就停在设置的断点处。





下一篇:单片机定时器0、1演示程序
史海拾趣
|
要是你们觉得很小白也不要不告诉我。。。。本人正在做毕设 边学边做的 我要做语音信号处理,用quartus。。。含燥的信号进行滤波处理。。。。。可是我不知道怎么把信号输入到quartus里。。。 有人能具体告诉我下么。。就是我自己录得语 ...… 查看全部问答> |
|
透视职场,职场人很少能够从一而终,上一份职业刚刚结束,下一份工作还未正式确定,其实,身处职场难免会由于一些原因而遭遇空白期。专家提醒,职场人求职时切忌刻意遮掩曾经的空白期,诚信就业,从容应对才是正确的做法。 人力资源 ...… 查看全部问答> |
|
以前,本来有学习过一段时间的51单片机,但是换工作后一直加班都没时间继续学下去。现在终于有空闲时间了,决定继续学下去,每天至少写一个程序,无论多少。先重温一下以前学过的东西: 单片机最简单和基础的操作就是对 ...… 查看全部问答> |
|
前辈们,请教了,用msp430F5438驱动16位并行输入的DA。DA采用的是ANALOG DEVICE的5546芯片,基准电压用MAX6350提高5V参考电压。 请问这个程序怎么编?小弟新上手,求高手指教!… 查看全部问答> |
|
代码如下: void Exit_Init(void) { RCC->APB2ENR|=1CRL|=0X00000008; GPIOA->ODR|=1… 查看全部问答> |




