单片机外部中断实验中断问题

使用STC15遇到外部中断问题 - 单片机 -
电子工程世界-论坛
后使用快捷导航没有帐号?
查看: 7343|回复: 10
使用STC15遇到外部中断问题
在线时间154 小时
TA的帖子TA的资源
一粒金砂(高级), 积分 453, 距离下一级还需 47 积分
一粒金砂(高级), 积分 453, 距离下一级还需 47 积分
使用STC15遇到外部中断问题, 我同时使用外部中断1,UART串口1, 硬件SPI。 出现了只有主循环内有UART发送函数时,外部中断才能进入。 如果没有放置UART发送函数。 刚不能进入外部中断1.
---------------------------------------------------------------------------------------------------------
/*---------------------------------------------------------------------*/
/* --- STC MCU Limited ------------------------------------------------*/
/* --- STC15F4K60S4 系列 定时器1用作串口1的波特率发生器举例------------*/
/* --- Mobile: (86) ----------------------------------------*/
/* --- Fax: 86-755- -------------------------------------------*/
/* --- Tel: 86-755- -------------------------------------------*/
/* --- Web:
--------------------------------------------*/
/* 如果要在程序中使用此代码,请在程序中注明使用了宏晶科技的资料及程序& &*/
/* 如果要在文章中应用此代码,请在文章中注明使用了宏晶科技的资料及程序& &*/
/*---------------------------------------------------------------------*/
//本示例在Keil开发环境下请选择Intel的8058芯片型号进行编译
//假定测试芯片的工作频率为18.432MHz
//#include &reg52.H&&&
#include &STC15F2K60S2.H&
#include &intrins.h&
#include &UART.h&
#include &MyType.h&
#include &config.h&
//sfr AUXR&&= 0x8e;& && && && && &// 辅助寄存器
//sfr P_SW1 = 0xA2;& && && && & & & & & // 外设功能切换寄存器1
//sbit P22 & & & & = P2^2;
void uartInit(void)
& & & & EA = 0;
& & & & ACC = P_SW1;
& & & & ACC &= ~(S1_S0 | S1_S1);& & //S1_S0=0 S1_S1=0
& & & & P_SW1 = ACC;& && && && && & //(P3.0/RxD, P3.1/TxD)
//&&ACC = P_SW1;
//&&ACC &= ~(S1_S0 | S1_S1);& & //S1_S0=1 S1_S1=0
//&&ACC |= S1_S0;& && && && && &//(P3.6/RxD_2, P3.7/TxD_2)
//&&P_SW1 = ACC;&&
//&&ACC = P_SW1;
//&&ACC &= ~(S1_S0 | S1_S1);& & //S1_S0=0 S1_S1=1
//&&ACC |= S1_S1;& && && && && &//(P1.6/RxD_3, P1.7/TxD_3)
//&&P_SW1 = ACC;&&
#if (PARITYBIT == NONE_PARITY)
& & SCON = 0x50;& && && && && & //8位可变波特率
#elif (PARITYBIT == ODD_PARITY) || (PARITYBIT == EVEN_PARITY) || (PARITYBIT == MARK_PARITY)
& & SCON = 0& && && && && & //9位可变波特率,校验位初始为1
#elif (PARITYBIT == SPACE_PARITY)
& & SCON = 0xd2;& && && && && & //9位可变波特率,校验位初始为0
& & & & //PT1 = 0;& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & // 定时器0优先级为最低。
& & & & AUXR = 0x40;& && && && && & & & & & & & & & & & & & & & & & // 定时器1为1T模式
& & & & TMOD = 0x00;& && && && && & & & & & & & & & & & & & & & & & // 定时器1为模式0(16位自动重载)
& & & & TL1 = (65536 - (FOSC/4/BAUD));& && & & & & & & & // 设置波特率重装值
& & & & TH1 = (65536 - (FOSC/4/BAUD))&&8;
& & & & TR1 = 1;& && && && && && & & & & & & & & & & & & & & & & & & & & & // 定时器1开始启动
& & & & ES = 1;& && && && && && && && & & & & & & & & & & & & & & & // 使能串口中断
& & & & EA = 1;
& & & & //uartSendString(&STC15F2K60S2 \r\n Uart Test !&&\r\n&);
/*----------------------------
UART 中断服务程序
-----------------------------*/
void Uart() interrupt 4 using 2
& & & & if (RI)
& & & & & & & & RI = 0;& && && && && &&&// 清除RI位
& & & & & & & & //P0 = SBUF;& && && && &&&// P0显示串口数据
& & & & & & & & //P22 = RB8;& && && && &&&// P2.2显示校验位
& & & & if (TI)
& & & & & & & & TI = 0;& && && && && &&&// 清除TI位
& & & & & & & & busy = 0;& && && && && &// 清忙标志
/*----------------------------
发送串口数据
----------------------------*/
void uartSendData(BYTE dat)
& & while (busy);& && && && && &//等待前面的数据发送完成
& & ACC =& && && && && && &//获取校验位P (PSW.0)
& & if (P)& && && && && && && & //根据P来设置校验位
#if (PARITYBIT == ODD_PARITY)
& && &&&TB8 = 0;& && && && && & //设置校验位为0
#elif (PARITYBIT == EVEN_PARITY)
& && &&&TB8 = 1;& && && && && & //设置校验位为1
#if (PARITYBIT == ODD_PARITY)
& && &&&TB8 = 1;& && && && && & //设置校验位为1
#elif (PARITYBIT == EVEN_PARITY)
& && &&&TB8 = 0;& && && && && & //设置校验位为0
& & busy = 1;
& & SBUF = ACC;& && && && && &&&//写数据到UART数据寄存器
/*----------------------------
函数名称: uartSendString(char *s)
函数功能: 发送字符串。
发送较多字符时,会出现丢失现像。可能是指针丢失。
----------------------------*/
void uartSendString(char *s)
& & & & while (*s)& && && && && && &//检测字符串结束标志
& & & & & & & & uartSendData(*s++);& && && &//发送当前字符
---------------------------------------------------------------------------------------------------
在线时间154 小时
TA的帖子TA的资源
一粒金砂(高级), 积分 453, 距离下一级还需 47 积分
一粒金砂(高级), 积分 453, 距离下一级还需 47 积分
/*---------------------------------------------------------------------*/
/* --- STC MCU Limited ------------------------------------------------*/
/* --- STC15F4K60S4 系列 SPI的主模式读写外部串行Flash举例(中断方式)----*/
/* --- Mobile: (86) ----------------------------------------*/
/* --- Fax: 86-755- -------------------------------------------*/
/* --- Tel: 86-755- -------------------------------------------*/
/* --- Web:
--------------------------------------------*/
/* 如果要在程序中使用此代码,请在程序中注明使用了宏晶科技的资料及程序& &*/
/* 如果要在文章中应用此代码,请在文章中注明使用了宏晶科技的资料及程序& &*/
/*---------------------------------------------------------------------*/
//本示例在Keil开发环境下请选择Intel的8058芯片型号进行编译
//假定测试芯片的工作频率为18.432MHz
//本示例所读写的目标Flash为PM25LV040,本代码已使用U7编程器测试通过
//#include &reg51.h&
#include &SPI.H&
BOOL g_fSpiB&&& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & //SPI的工作状态
/************************************************
SPI中断服务程序
************************************************/
void spi_isr() interrupt 9 using 3
& & SPSTAT = SPIF | WCOL;& && && && && && && &&&//清除SPI状态位
& & g_fSpiBusy = FALSE;
/************************************************
入口参数: 无
出口参数: 无
************************************************/
void InitSpi()
& & & & EA = 0; & & & & & & & & // 暂时关闭中断。
&&ACC = P_SW1;& && && && && && && && && && &&&& & & & & & & & & & & & & & & & & & & & // 切换到第一组SPI
&&ACC &= ~(SPI_S0 | SPI_S1);& && && && && && && & & & & & & & & & & & & & & & & & & & // SPI_S0=0 SPI_S1=0
&&P_SW1 = ACC;& && && && && && && && && && &&&& & & & & & & & & & & & & & & & & & & & // (P1.2/SS, P1.3/MOSI, P1.4/MISO, P1.5/SCLK)
//& & ACC = P_SW1;& && && && && && && && && && &&&& & & & & & & & & & & & // 可用于测试U7,U7使用的是第二组SPI控制Flash
//& & ACC &= ~(SPI_S0 | SPI_S1);& && && && && && && & & & & & & & & & & & // SPI_S0=1 SPI_S1=0
//& & ACC |= SPI_S0;& && && && && && && && && &&&& & & & & & & & & & & &&&& & & & // (P2.4/SS_2, P2.3/MOSI_2, P2.2/MISO_2, P2.1/SCLK_2)
//& & P_SW1 = ACC;&&
//&&ACC = P_SW1;& && && && && && && && && && &&&& & & & & & & & & & & & & & & & // 切换到第三组SPI
//&&ACC &= ~(SPI_S0 | SPI_S1);& && && && && && && & & & & & & & & & & & & & & & // SPI_S0=0 SPI_S1=1
//&&ACC |= SPI_S1;& && && && && && && && && && && & & & & & & & & & & & & & & & // (P5.4/SS_3, P4.0/MOSI_3, P4.1/MISO_3, P4.3/SCLK_3)
//&&P_SW1 = ACC;&&
& & & & SPSTAT = SPIF | WCOL;& && && && && && && &&&& & & & & & & & & & & & & & & & // 清除SPI状态
& & & & SPI_CS = 1;
& & & & SPCTL = 0x00;& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & // 清除SPI控掉寄存器.
& & & & // 设置主机, 使能, 主模式 时钟悬空高 后时种沿采样
& & & & // 4分频(SPDHH)&&高位先发(DORD)
& & & & SPCTL = SSIG | SPEN | MSTR | CPOL | CPHA&&;&&
& & & & //使能SPI传输中断
& & & & IE2 |= ESPI;
& & & & EA = 1;
/************************************************
函数名称: 使用SPI方式与Flash进行数据交换
入口参数: dat 准备写入的数据
出口参数: 从Flash中读出的数据
************************************************/
BYTE SpiShift(BYTE dat)
& & g_fSpiBusy = TRUE;
& & SPDAT =& && && && && && && && && && &&&//触发SPI发送
& & while (g_fSpiBusy);& && && && && && && && & //等待SPI数据传输完成
& & return SPDAT;
在线时间154 小时
TA的帖子TA的资源
一粒金砂(高级), 积分 453, 距离下一级还需 47 积分
一粒金砂(高级), 积分 453, 距离下一级还需 47 积分
本帖最后由 doganup 于
15:30 编辑
/*---------------------------------------------------------------------*/
/* --- STC MCU Limited ------------------------------------------------*/
/* --- STC15F4K60S4 系列 INT1中断举例----------------------------------*/
/* --- Mobile: (86) ----------------------------------------*/
/* --- Fax: 86-755- -------------------------------------------*/
/* --- Tel: 86-755- -------------------------------------------*/
/* --- Web:
--------------------------------------------*/
/* 如果要在程序中使用此代码,请在程序中注明使用了宏晶科技的资料及程序& &*/
/* 如果要在文章中应用此代码,请在文章中注明使用了宏晶科技的资料及程序& &*/
/*---------------------------------------------------------------------*/
//本示例在Keil开发环境下请选择Intel的8058芯片型号进行编译
//假定测试芯片的工作频率为18.432MHz
#include &timer.h&
#define&&NoChangedTime 9
#define DEBUG_TIMER
//sbit INT1 = P3^3;
extern unsigned char TIM;
extern unsigned char CAN_F
extern void uartSendString(uint8 * pd);& && && && && && && && && && && && && & //
/*******************************************************************************
* 函数名&&: Exint1_Init
* 描述& & : 外部中断1初始化函数
* 输入& & : 无
* 输出& & : 无
* 返回值&&: 无
* 说明& & : 无
*******************************************************************************/
void Exint1_Init(void)
& && &&&EA = 0;& && && && && && && && && && && &// 暂时关闭中断。
& && &&&P33 = 1;
&&//PX1 = 1;& && && && && && && && && && &&&// 设置外部中断1的中断优先级为高优先级
&&IT1 = 1;& && && && && && && && && && && &// 设置INT1的中断类型 (1:仅下降沿 0:上升沿和下降沿)
&&EX1 = 1;& && && && && && && && && && && &// 使能INT1中断
&&EA = 1;& && && && && && && && && && && & // 使能总中断& && &&&
/*******************************************************************************
* 函数名&&: Exint1_ISR
* 描述& & : 外部中断1中断服务函数
* 输入& & : 无
* 输出& & : 无
* 返回值&&: 无
* 说明& & : 用于检测MCP2515中断引脚的中断信号
*******************************************************************************/
void Exint1_ISR(void) interrupt 2 using 1
& && &&&CAN_Flag = 1;& && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && &&&//CAN接收到数据标志
& && &&&#ifdef DEBUG_TIMER& && &&&
& && && && && & uartSendString(&into Interrupt. \r\n&);
& && &&&#endif
在线时间154 小时
TA的帖子TA的资源
一粒金砂(高级), 积分 453, 距离下一级还需 47 积分
一粒金砂(高级), 积分 453, 距离下一级还需 47 积分
本帖最后由 doganup 于
15:40 编辑
void main(void)
& && &&&uint8 len, i = 1, j = 0;
& && &&&// UART初始化。
& && &&&uartInit();
& && && && && & uartSendString(& UART init end。\r\n \r\n&);& && &&&
& && &&&// SPI初始化,关闭所有片选。InitSpi()
& && &&&InitSpi();
& && && && && & uartSendString(& SPI init end。\r\n \r\n&)
& && & // 外部中断 1 初始化。
& && & Exint1_Init();
& && &&&while(1)
& && && && && && && && &if(CAN_Flag)
& && && && && && && && &{
& && && && && && && && && &&&uartSendString(&into Interrupt. \r\n&);& && &&&// 2 不然无法进入中断& && && && && &
& && && && && && && && &}
& && && && && && && && &else
& && && && && && && && &{
& && && && && && && && && && &&&uartSendString(&into Interrupt. \r\n&);&&//&&1 主循环必须有UART发送函数。
& && && && && && && && &}
& && && && && & }
在线时间154 小时
TA的帖子TA的资源
一粒金砂(高级), 积分 453, 距离下一级还需 47 积分
一粒金砂(高级), 积分 453, 距离下一级还需 47 积分
我查看过STC15F2K32S 芯片的最下行的最后一个字母是C,应该不是A版的问题。
在线时间154 小时
TA的帖子TA的资源
一粒金砂(高级), 积分 453, 距离下一级还需 47 积分
一粒金砂(高级), 积分 453, 距离下一级还需 47 积分
/*---------------------------------------------------------------------*/
/* --- STC MCU Limited ------------------------------------------------*/
/* --- STC15F4K60S4 系列 INT1中断举例----------------------------------*/
/* --- Mobile: (86) ----------------------------------------*/
/* --- Fax: 86-755- -------------------------------------------*/
/* --- Tel: 86-755- -------------------------------------------*/
/* --- Web:
--------------------------------------------*/
/* 如果要在程序中使用此代码,请在程序中注明使用了宏晶科技的资料及程序& &*/
/* 如果要在文章中应用此代码,请在文章中注明使用了宏晶科技的资料及程序& &*/
/*---------------------------------------------------------------------*/
//本示例在Keil开发环境下请选择Intel的8058芯片型号进行编译
//假定测试芯片的工作频率为18.432MHz
#include &timer.h&
#define&&NoChangedTime 9
#define DEBUG_TIMER
//sbit INT1 = P3^3;
extern unsigned char TIM;
extern unsigned char CAN_F
extern void uartSendString(uint8 * pd);& && && && && && && && && && && && && & //
/*******************************************************************************
* 函数名&&: Exint1_Init
* 描述& & : 外部中断1初始化函数
* 输入& & : 无
* 输出& & : 无
* 返回值&&: 无
* 说明& & : 无
*******************************************************************************/
void Exint1_Init(void)
& && &&&EA = 0;& && && && && && && && && && && &// 暂时关闭中断。
& && &&&P33 = 1;
&&//PX1 = 1;& && && && && && && && && && &&&// 设置外部中断1的中断优先级为高优先级
&&IT1 = 1;& && && && && && && && && && && &// 设置INT1的中断类型 (1:仅下降沿 0:上升沿和下降沿)
&&EX1 = 1;& && && && && && && && && && && &// 使能INT1中断
&&EA = 1;& && && && && && && && && && && & // 使能总中断& && &
/*******************************************************************************
* 函数名&&: Exint1_ISR
* 描述& & : 外部中断1中断服务函数
* 输入& & : 无
* 输出& & : 无
* 返回值&&: 无
* 说明& & : 用于检测MCP2515中断引脚的中断信号
*******************************************************************************/
void Exint1_ISR(void) interrupt 2 using 1
& && &&&CAN_Flag = 1;& && && && && && && && && && && && && &
在线时间1785 小时
威望43330分
芯币43437枚
E金币1812枚
TA的帖子TA的资源
在程序中检查中断使能设置,只有准许了中断后才会响应中断。
中断EA使能的。中断也好用。我逐步屏蔽代码后,发现中断好用。能进入。通过在中断函数内设置其它IO驱动LED,得到中断成功能反馈显示效果。
因此也发现,中断函数内的变量调用,如CAN_Flag设为1。在主函数内的CAN_Fl&
上传了一些书籍资料,也许有你想要的:
在线时间154 小时
TA的帖子TA的资源
一粒金砂(高级), 积分 453, 距离下一级还需 47 积分
一粒金砂(高级), 积分 453, 距离下一级还需 47 积分
在程序中检查中断使能设置,只有准许了中断后才会响应中断。
中断EA使能的。中断也好用。我逐步屏蔽代码后,发现中断好用。能进入。通过在中断函数内设置其它IO驱动LED,得到中断成功能反馈显示效果。
因此也发现,中断函数内的变量调用,如CAN_Flag设为1。在主函数内的CAN_Flag没有反应。可以描述不准确,就是中断函数内的变量赋值,在main里没有起到作用。
在线时间154 小时
TA的帖子TA的资源
一粒金砂(高级), 积分 453, 距离下一级还需 47 积分
一粒金砂(高级), 积分 453, 距离下一级还需 47 积分
本帖最后由 doganup 于
19:16 编辑
中断能进入, 但是中断函数内的变量赋值不起作用。&&如果在主循环内加UART发送函数,就能进入中断。
在线时间154 小时
TA的帖子TA的资源
一粒金砂(高级), 积分 453, 距离下一级还需 47 积分
一粒金砂(高级), 积分 453, 距离下一级还需 47 积分
是我代码没弄好,MCP2515&&代码部分没清理干净。造的干扰。中断没问题,使用也正常, 谢谢楼上各位的回贴,非常感谢。
最近脑代糊涂
在线时间1 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 4, 距离下一级还需 1 积分
一粒金砂(初级), 积分 4, 距离下一级还需 1 积分
是我代码没弄好,MCP2515&&代码部分没清理干净。造的干扰。中断没问题,使用也正常, 谢谢楼上各 ...
楼主 当时具体原因是的啥造成的?我现在也是STC15单片机,遇到了统一的问题,求指导啊
技术导师勋章
论坛威望大于30000或网友提名:坛子里公认的技术导师
EEWORLD 官方微信
EE福利 唾手可得
Powered by1被浏览480分享邀请回答暂时还没有回答,开始写第一个回答51单片机中断学习
一、中断的概念
CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理(中断发生);
CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务);
待CPU将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A(中断返回),这一过程称为中断
二、中断源
&&&&在51单片机中有5个中断源
中断号&&&&&&&&&
优先级&&&&&&&&&&&&&&&&&&&&中断源&&&&&&&&&&&&&&&&&&&&中断入口地址&
0&&&&&&&&&&&&&&
1(最高)&&&&&&&&&&&&
外部中断0&&&&&&&&&&&&&&&&&&&&&
1&&&&&&&&&&&&&&
2&&&&&&&&&&&&&&&&&&&&&
定时器0&&&&&&&&&&&&&&&&&&&&&&
2&&&&&&&&&&&&&&
3&&&&&&&&&&&&&&&&&&&&
外部中断1&&&&&&&&&&&&&&&&&&&&&
3&&&&&&&&&&&&&&
4&&&&&&&&&&&&&&&&&&&&&
定时器1&&&&&&&&&&&&&&&&&&&&&&
4&&&&&&&&&&&&&&&5&&&&&&&&&&&&&&&&&&&&&
串口总段&&&&&&&&&&&&&&&&&&&&&
三、中断寄存器
单片机有10个寄存器主要与中断程序的书写控制有关
1.中断允许控制寄存器IE
2.定时器控制寄存器TCON
3.串口控制寄存器SCON
4.中断优先控制寄存器IP
5.定时器工作方式控制寄存器TMOD
6.定时器初值赋予寄存器(TH0/TH1,TL0/TL1)
寄存器详细说明:
四、寄存器功能与赋值说明
注:在用到中断时,必须要开总中断EA,即EA=1。&
//开总中断
&&&&1.中断允许控制寄存器IE
EX0(EX1):外部中断允许控制位
外部中断0开关闭合&& //开外部0中断&&&&
&& EX0=0 外部中断0开关断开
&&&&ET0(ET1):定时中断允许控制位
&&&&&&&&ET0=1&定时器中断0开关闭合&//开内部中断0
ET0=0 定时器中断0开关断开
串口中断允许控制位&&&&&
串口中断开关闭合&&&&
//开串口中断
ES=0 串口中断开关断开
2.定时器控制寄存器
//控制外部中断和定时器中断
外部中断:
&&&&&&&&IE0(IE1):外部中断请求标志位
&&&&&&&&&&&
当INT0(INT1)引脚出现有效的请求信号,此位由单片机自动置1,cpu开始响应,处理终端,而当入
中断程序后由单片机自动置0.
&&&&&&&&//外部中断,即外部中断相应的引脚接入低电平或下降沿信号时,中断开始响应。
IT0(IT1):外部中断触发方式控制位&&&&&&&&&&&&&&&&&&
//选择有效信号
&&&&&&&&&&&
IT0(IT1)=1:脉冲触发方式,下降沿有效。
&&&&&&&&&&&&IT0(IT1)=0:电平触发方式,低电平有效。
内部中断:
TF0(TF1):内部定时器/计数器溢出中断标志位
&&&&&&&&&&&
当定时器、计数器计数溢出的时候,此位由单片机自动置1,cup开始响应,处理中断,而当进入中
断程序后由单片机自动置0.
//内部中断实际上就是利用内部的计数器,只不过提供计数的脉冲来自单片机自身。
TRO(TR1):定时器/计数器启动位&&&&&&&&&&&&&&&&&&&
//启动定时器
TRO(TR1)=1; 启动定时器/计数器0
TR0(TR1)=0; 关闭定时器/计数器0
3.串口控制寄存器SCON
TI:串行口发送中断标志位
当单片机串口发送完一帧数据后,此位由单片机自动置1,而当进入中断服务程序后是不会自动清0的,
必须由用户在中断服务中用软件清0.
&&&&&RI:串行口接收中断标志位
&&&&&&&&&&当单片机串口接收完一帧数据后,此位由单片机自动置1,而当进入中断服务程序后是不会自动清0的,
&&&&必须由用户在中断服务软件中用软件清0.
(IP以后补上,TMOD,TL0/TH0 在定时器/计数器中讲)
五、中断结构图:
六、定时器/计数器
1.计数的定义:
计数是指对外部事件进行计数,外部事件的发生以输入脉冲的形式表示,因此计数功能的实质就是对外来
的脉冲进行计数,在单片机中对应引脚T0和T1,两个脉冲输入端。
外部输入的脉冲在负跳变时有效(即外部脉冲由1变化到0),计数器加1.
2.定时器:
定时器是通过计数器的计数来实现的,不过此时的计数脉冲来自单片机的内部,因此定时器的实质是对内
部脉冲的计数,在单片机中,每个机器周期产生一次计数脉冲,计数器加1.
3.工作方式控制寄存器TMOD:
&&&&&&&&TMOD的低半字节(D0,D1,D2,D3)用来控制定时器/计数器0
TMOD的高半字节(D4,D5,D6,D7)用来控制定时器/计数器1
对TMOD中的内容说明:
GATE——门控制。   
&GATE=1时,由外部中断引脚INT0、INT1来启动定时器T0、T1。   
&&&&&&&&&&&
&当INT0引脚为高电平时TR0置位,启动定时器T0;   
&&&&&&&&&&&
&当INT1引脚为高电平时TR1置位,启动定时器T1。   
&GATE=0时,仅由TR0,TR1置位分别启动定时器T0、T1。
C/T——功能选择位   
&&&&&&&&&&
C/T=0时为定时功能,C/T=1时为计数功能。     
M0、M1——方式选择功能   
由于有2位,因此有4种工作方式&
&&4.根据单片机晶振,所选TMOD的的工作方式,所要定的时间,来确定THO和TLO所要赋予的初值
(以12M晶振,工作方式1,16位计数器为例,设所定时间为Xus(16为计数器最大数65536,即65536us,若所
定时间大于65535,则要用if语句控制,现假设X&65535))
1.时钟周期的时间t=1/12M=1/12 us
2.机器周期的时间T=12*1/12=1 us
&&&&&3.因为每经过一个机器周期计数器+1,所以,计数器+1,经过的时间为
若所定时间为X,则要求经过Xus,中断响应,又因为16为计数器要全部置1(即达到65535)+1后,中断才会
&&&&&响应,所以,初值=(65536-X)
&&&&&4.将初值转化为16进制码,分别付给THO和TLO
&&&&&eg:所定时间5ms
初值=()=60536=EC78
TH0=0XEC; TL0=0X78;
(当工作方式不同时,TH0/TL0的赋值也不同,个人觉得有了16位计数器了,其余的没什么用,不介绍了)
&&5.写程序时另一种THO/TLO赋值方法
TH0=()/256;&&&&&
这样设置,每经过20ms,发生一次中断,中断时间一般以秒为单位,所以经过n次中断即可。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。}

我要回帖

更多关于 单片机中断实验报告 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信