-
正好用到,谢谢提供。
-
{:1_101:}是我代码没弄好,MCP2515 代码部分没清理干净。造的干扰。中断没问题,使用也正常, 谢谢楼上各位的回贴,非常感谢。:handshake
最近脑代糊涂{:1_142:}
-
本帖最后由 doganup 于 2014-11-12 19:16 编辑
中断能进入, 但是中断函数内的变量赋值不起作用。{:1_142:} 如果在主循环内加UART发送函数,就能进入中断。
-
chunyang 发表于 2014-11-12 17:15
在程序中检查中断使能设置,只有准许了中断后才会响应中断。
中断EA使能的。中断也好用。我逐步屏蔽代码后,发现中断好用。能进入。通过在中断函数内设置其它IO驱动LED,得到中断成功能反馈显示效果。
因此也发现,中断函数内的变量调用,如CAN_Flag设为1。在主函数内的CAN_Flag没有反应。可以描述不准确,就是中断函数内的变量赋值,在main里没有起到作用。
-
/*---------------------------------------------------------------------*/
/* --- STC MCU Limited ------------------------------------------------*/
/* --- STC15F4K60S4 系列 INT1中断举例----------------------------------*/
/* --- Mobile: (86)13922805190 ----------------------------------------*/
/* --- Fax: 86-755-82905966 -------------------------------------------*/
/* --- Tel: 86-755-82948412 -------------------------------------------*/
/* --- Web: www.STCMCU.com --------------------------------------------*/
/* 如果要在程序中使用此代码,请在程序中注明使用了宏晶科技的资料及程序 */
/* 如果要在文章中应用此代码,请在文章中注明使用了宏晶科技的资料及程序 */
/*---------------------------------------------------------------------*/
//本示例在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_Flag;
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;
}
-
我查看过STC15F2K32S 芯片的最下行的最后一个字母是C,应该不是A版的问题。
-
本帖最后由 doganup 于 2014-11-12 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发送函数。
}
}
}
-
本帖最后由 doganup 于 2014-11-12 15:30 编辑
/*---------------------------------------------------------------------*/
/* --- STC MCU Limited ------------------------------------------------*/
/* --- STC15F4K60S4 系列 INT1中断举例----------------------------------*/
/* --- Mobile: (86)13922805190 ----------------------------------------*/
/* --- Fax: 86-755-82905966 -------------------------------------------*/
/* --- Tel: 86-755-82948412 -------------------------------------------*/
/* --- Web: www.STCMCU.com --------------------------------------------*/
/* 如果要在程序中使用此代码,请在程序中注明使用了宏晶科技的资料及程序 */
/* 如果要在文章中应用此代码,请在文章中注明使用了宏晶科技的资料及程序 */
/*---------------------------------------------------------------------*/
//本示例在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_Flag;
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
*/
}
-
/*---------------------------------------------------------------------*/
/* --- STC MCU Limited ------------------------------------------------*/
/* --- STC15F4K60S4 系列 SPI的主模式读写外部串行Flash举例(中断方式)----*/
/* --- Mobile: (86)13922805190 ----------------------------------------*/
/* --- Fax: 86-755-82905966 -------------------------------------------*/
/* --- Tel: 86-755-82948412 -------------------------------------------*/
/* --- Web: www.STCMCU.com --------------------------------------------*/
/* 如果要在程序中使用此代码,请在程序中注明使用了宏晶科技的资料及程序 */
/* 如果要在文章中应用此代码,请在文章中注明使用了宏晶科技的资料及程序 */
/*---------------------------------------------------------------------*/
//本示例在Keil开发环境下请选择Intel的8058芯片型号进行编译
//假定测试芯片的工作频率为18.432MHz
//本示例所读写的目标Flash为PM25LV040,本代码已使用U7编程器测试通过
//#include "reg51.h"
#include "SPI.H"
BOOL g_fSpiBusy; //SPI的工作状态
/************************************************
SPI中断服务程序
************************************************/
void spi_isr() interrupt 9 using 3
{
SPSTAT = SPIF | WCOL; //清除SPI状态位
g_fSpiBusy = FALSE;
}
/************************************************
SPI初始化
入口参数: 无
出口参数: 无
说 明:
************************************************/
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 = dat; //触发SPI发送
while (g_fSpiBusy); //等待SPI数据传输完成
return SPDAT;
}
-
很棒。。。。。就是耗费时间
-
真不知道,也很好奇
-
为了成本usb口的抗干扰芯片,没有。
为了省成本usb电源接口没有保险。
节省成本,在碰上器件品质,电脑配件品质,旧砰砰砰
-
铝型材 阿里巴巴 淘宝
-
爪机 ,看不到视频,顶一下
-
同心度不好吧?,没有直流调速不方便使用吧?
-
跟踪,锁定
-
哈哈,有意思
-
电源电压是否匹配。
电路板线路是否正确。
楼下补充其他注意事项
-
一只大苍蝇 :lol
-
亲自动手,遇到问题多方求教,爱看资料,自学必成材