C51中断处理过程
C51编译器支持在C源程序中直接开发中断过程,因此减轻了使用汇编语言的繁琐工作,提高了开发效率。中断服务函数的完整语法如下:
void 函数名(void)[模式]
[再入]interrupt n [using r]
其中n(0~31)代表中断号。C51编译器允许32个中断,具体使用哪个中断由80C51系列的芯片决定。r(0~3)代表第r组寄存器。在调用中断函数时,要求中断过程调用的函数所使用的寄存器组必须与其相同。"再入"用于说明中断处理函数有无"再入"能力。C51编译器及其对C语言的扩充允许编程者对中断所有方面的控制和寄存器组的使用。这种支持能使编程者创建高效的中断服务程序,用户只须在C语言下关心中断和必要的寄存器组切换操作。
例3 设单片机的fosc=12MHz,要求用T0的方式1编程,在P1.0脚输出周期为2ms的方波。
例3 设单片机的fosc=12MHz,要求用T0的方式1编程,在P1.0脚输出周期为2ms的方波。
用C语言编写的中断服务程序如下:
#include
sbit P1_0=P1^0;
void timer0(void)interrupt 1 using 1 {
/*T0中断服务程序入口*/
P1_0=!P1_0;
TH0=-(1000/256); /*计数初值重装*/
TL0=-(1000%256);
}
void main(void)
{
TMOD=0x01; /*T0工作在定时器方式1*/
P1_0=0;
TH0=-(1000/256); /*预置计数初值*/
TL0=-(1000%256);
EA=1; /*CPU开中断*/
ET0=1; /*T0开中断*/
TR0=1; /*启动T0*/
do{}while(1);
}
在编写中断服务程序时必须注意不能进行参数传递,不能有返回值。
关键字:C51 中断处理
引用地址:
C51中断处理过程
推荐阅读最新更新时间:2024-03-16 13:52
C51单片机对共阳极数码管的控制设计
这是共阳极数码管的电路图,其中JP3接到P0口,JP3的8-1对应数码管的a-dp引脚。 共阳极数码管的编码表如下,注意a---最低位,dp---最高位: 【0---3】0xco,0xf9,0xa4,0xb0, 【4---7】0x99,0x92,0x82,0xf8, 【8---B】0x80,0x90,0x88,0x83, 【C---F】0xc6,0xa1,0x86,0x8e。 C51程序显示数字0-9: #include #define uchar unsigned char void delay(); uchar smg[10] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,
[单片机]
C51串口中断接收和发送程序
//这是一个单片机C51串口接收(中断)和发送例程,可以用来测试51单片机的中断接收 //和查询发送,另外我觉得发送没有必要用中断 #include reg51.h #include string.h #define INBUF_LEN 4 //数据长度 unsigned char inbuf1 ; unsigned char checksum,count3; bit read_flag=0; void init_serialcomm( void ) { SCON = 0x50; //SCON: serail mode 1, 8-bit UART, enable ucvr TMOD |=
[单片机]
C51中的reentrant
关于reentrant的使用keil的官方论坛上有详细的讨论. Andy Neil(官方工程师)建议 Are you sure that you really need to make everything reentrant?... A reading of the Keil app notes & knowledgebase articles on this subject showed that it was not necessary. 由于每一次调用被reentrant声明的函数都要把函数的参数和内部变量压栈,所以 很容易使堆栈区溢出,S52只有256Bytes的data段,一个简单的函数如果有一个参数 三个内部变
[单片机]
Proteus C51仿真学习板6——ADC
在将ADC之前,先聊聊其前因后果——由于计算机在自动控制、检测以及其他领域广泛应用数字电子技术,而大自然的信号全是模拟信号,如果通过计算机保存自然信号呢?那么就需要ADC(模数转换器Analog-Digital Converter)来讲模拟信号转换为数字信号,这样才能存储到计算机中。 那么ADC是如何转换的呢? 对选定一个瞬间对模拟信号进行采样; 将值转换为数字量; 按照一定编码格式转换。 一个模拟信号肯定是不能采样一个点的,而是许多点集合而成。当长方形又窄又长时几乎接近竖线时,就可以很好的还原之前的波形了。用官方的话说:抽样定理——若原图的最大频率是fmax,那么采样频率要比原图的最大频率2倍还要大,这样才能准
[单片机]
LCD 240*128 T6963C C51程序
主程序 /***********************************/ /* LCM(RT-240128TA)显示程序 */ /* LCM 控制芯片 T6963C 带32KRAM */ /* MCU 型号: STC 89C52RD2 */ /* 时钟频率: 11.0592 MHz */ /* 接口方式: 直接接口(总线方式) */ /* 开发环境: Keil C51 V7.03 */ /* 开发日期: 2006.07.01 */ /* 程序编写: liu1234 */ /***********************************/ #define t696
[单片机]
C51—模拟IIC总线实现EEPROM存取数据
- 什么是IIC总线 IIC总线是同步通信的一种特殊形式,具有接线口少、控制简单、器件封装形式小、通信速率高等特点。在主从通信中,可以有多个IIC总线器件同时连接到IIC总线上,所有与IIC兼容的器件都具有标准的接口,通过地址来识别通信对象,使他们可以经由IIC总线互相直接通信。 IIC总线由SDA数据线和SCL时钟线俩条线构成通信线路,既可发送数据也可以接收数据。在CPU和IC之间、IC与IC间都可以双向传播,每个器件都有唯一的地址,这样就可以使信息进行准确的传输。CPU发出的信号分为地址码和数据码俩部分,地址码用来选址,数据码是通信的内容。 总而言之,IIC总线就是器件之间的通信线路,主器件可以通过IIC总线向从器件发
[单片机]
C51问答
一、#pragma asm是什么意思? #pragma asm MOV P1,R7 NOP NOP MOV P1,#0 #pragma endasm 实际上就是一个在C51中内嵌汇编语言的开关 二、一个 hex to bcd 的算法程序 HEX_BCD:CLR A MOV 30H,A MOV 31H,A MOV 32H,A MOV R2,#15 H_B0: MOV A,R1 RLC A MOV R1,A MOV A,R0 RLC A MOV R0,A MOV A,32H RLC A ACALL BCD_ADJ
[单片机]