如题!
这两天在做一个项目,用的是STM8L152的单片机,调试的时候一直出现一个问题,就是每次都在一个地方停住了,用仿真器仿真调试的时候一直会死在一个地方,后来发现产生了莫名的中断。
具体是这样的,我使用了IO口模拟I2C通信,一开始把IO口初始化为输出用了以下语句:
GPIO_Init(GPIOC, GPIO_Pin_1, GPIO_Mode_Out_OD_HiZ_Fast);//SCL引脚置为输出
GPIO_Init(GPIOC, GPIO_Pin_0, GPIO_Mode_Out_OD_HiZ_Fast);//SDA引脚置为输出
然后模拟I2C的时候需要把SDA引脚时常设置为输出,时常设置为输入,所以用了以下两个语句:
#define SDA_OUT() (GPIOC->DDR |= 0x01)
#define SDA_IN() (GPIOC->DDR &= ~(0x01))
然后这样的话,每次我调用SDA_IN()的时候就会产生PC0中断,并且一直死在里面出不来,让我头痛了好久,我并没有开启这个中断啊,经过几天的调试终于发现原因,如下:
在执行GPIO_Init(GPIOC, GPIO_Pin_0, GPIO_Mode_Out_OD_HiZ_Fast)的时候,会将DDR寄存器置为1,以此设置为输出模式,并且由于设置了Fast模式,所以由上图CR2寄存器会设置为1,以此设置为10MHz。问题就出在这里,当我再执行SDA_IN()时,DDR寄存器相应位置为0,设置为输入。此时CR寄存器值为1就变成使能外部中断了,所以在I2C时序中一直会产生中断。
所以大家用寄存器编程的时候注意一下。
关键字:STM8 单片机 外部中断
引用地址:
STM8单片机莫名进入外部中断的原因
推荐阅读最新更新时间:2024-03-16 16:15
单片机控制12864液晶显示屏显示静态图片
PROTEUS仿真电路图: 仿真结果展示: 大长安城墙的一角: 大雁塔: 龙: C语言程序代码: #include reg51.h #define LCDLCDDisp_Off 0x3e #define LCDLCDDisp_On 0x3f #define Page_Add 0xb8//ye #define LCDCol_Add 0x40//lie #define Start_Line 0xC0//hang /*****液晶显示器的端口定义*****/ #define data_ora P1 /*液晶数据总线*/ sbit LCDMcs=P2^4 ; /*片选1*/ sbit LCDSc
[单片机]
利用SST89E564RC单片机的多点温控采暖控制系统的设计
利用SST89E564RC单片机及新型测温器件设计了多点温控采暖控制系统,根据室内各点温度设定实时控制采暖系统,从而提高居室的舒适性以及采暖的经济性。 1 系统设计目标 系统总体设计思想是以SST89E564RC单片机为控制核心,整个系统硬件部分包括温度检测部分、控制执行部分、显示及键盘系统及最小系统基本电路。系统利用单片机获得温度传感器数据并与系统设计值进行比较,根据比较结果分别控制执行系统。温度控制系统控制框图如图1所示。 2 系统硬件设计 根据系统所需完成的功能,设计系统硬件结构如图2所示。 2.1 控制核心 系统采用SST89E564RC单片机作为控制核心,进行温度采集、信息显示及执行机
[工业控制]
一种基于单片机的高精度温度测量系统设计
精密化学、生物医药、精细化工、精密仪器等领域对温度控制精度的要求极高,而温度控制的核心正是温度测量。采用铂电阻测量温度是一种有效的高精度温度测量方法,但具有以下难点:引线电阻、自热效应、元器件漂移和铂电阻传感器精度。其中,减小引线电阻的影响是高精度测量的关键点。对于自热效应,根据元件发热公式P=I2R,必须使流过元件的电流足够小才能使其发热量小,传感器才能检测出正确的温度。但是过小的电流又会使信噪比下降,精度更是难以保证。此外,一些元器件和仪器很难满足元器件漂移和铂电阻传感器精度的要求。 易先军等提出了以铂电阻为测温元件的高精度温度测量方案,解决了高精度测量对硬件电路的一些苛刻要求问题,但是精度不佳( 0.4 ℃);杨彦伟提出了以
[单片机]
意法半导体(ST)的安全微控制器获索尼选用
意法半导体的技术为日本带来首个单片集成多个非接触式支付应用的芯片卡,拥有独一无二的自动射频检测功能,可提高支付卡的交易速度和便利性。 中国,2014年11月19日 ——横跨多重电子应用领域、全球领先的半导体供应商、全球三大智能卡芯片厂商之一的意法半导体(STMicroelectronics,简称ST;纽约证券交易所代码:STM)宣布,旗下的双接口安全微控制器获索尼 (Sony) 选用,用于设计新一代具有微支付功能 (micropayment-enabled) 的芯片卡。新一代支付卡有望在2016年上半年进入日本消费市场。 作为市场上最先进的双接口(接触式/非接触式接口)安全微控制器,兼具出色的计算性能、优异的能效、
[安防电子]
基于Atmega128单片机无人车控制系统电路设计
该方案可广泛应用于短途货运客运、应急救援、恶劣环境下自动作业等领域。智能无人车是一种履带式移动机器人,目前市场上的无人车大多采用单片机对其进行控制,其优点是体积小,成本低,结构简单,但仅仅依靠单片机远不能使无人车在复杂多变的工作环境中进行及时调整,并且极大地限制了其功能的扩展。基于此不足,本设计主要利用PC机与无人车的无线通信,使无人车在PC机无线指令下完成前进、后退、转弯、打击、生命值显示、调速和自动行驶等功能,并通过车载摄像头实时获取无人车所处环境信息,实现了远程监控。在执行任务时,如遭遇敌方车辆干扰通信,无人车在抵御干扰信号同时进行敌我识别,适时作出反击。 无人车系统工作原理为:打开教学无人车电源时,Atmega128单
[单片机]
第001课 不要再用老方法学习单片机和ARM
单片机程序员发展的必选之路: Linux 我们的第一期是教大家如何将ARM开发板当作单片机来用,但在这期视频的第一节,我告诉你们,学习单片机是没有前途的。 话说得非常狠,因为不这样说,没法警醒你们。我说这句话,是冒着生命危险的,因为很多人依靠单片机来生活,淘宝上有一大堆售卖单片机开发板的,像51、STM32等。 工资方面 我们学习这些不就是为了赚钱吗?在51job上,搜索“单片机”,工资平均下来是几千块钱。然后搜搜“Linux系统工程师”,平均工资是上万左右。 职业发展 这里我有切实的体会,我2003年毕业,2005年进入一个小公司,当时做的是车载电话,我们先是用51单片机来做的。当时我的李姓同事,用两个3000多行的
[单片机]
基于AT89s52单片机的智能救援机器人的设计
O 引言 自从1920年捷克斯洛伐克作家卡雷尔,恰佩克的《罗萨姆的机器人万能公司》问世,人们便对机器人充满了幻想与期待。随着社会的不断发展,各行各业的分工越来越明细,机器人也能在其中扮演重要的角色来替代人们的劳动。与此同时,随着科学技术的发展,探险、救灾、排爆等危险场合工作的机器人,以及自动化生产中机器人的应用也日益广泛。因此,智能救援机器人的研制已成为急需和必要,文章就智能救援机器人的设计进行了探讨。 1 智能救援机器人的硬件设计 该智能救援机器人主要由电源模块、检测感应模块(实现巡线、避障、捡放硬币、测距功能)、声光报警模块、控制器模块、电机驱动模块、显示模块六部分组成,其结构框图如图1所示。
[工业控制]
怎样利用C8051F系列单片机来降低系统的总功耗?
在控制终端系统设计中,当系统要求整体功耗偏低时,C8051F系列单片机是一个最佳的选择。它们拥有灵活的时钟硬件,使系统能够方便地在高效运作模式与低功耗模式问进行转换,智能的电源管理模式能够在正常工作及待机状态自由切换,从而降低整个系统的能量损耗;当工作频率低于10kHz时,时钟丢失检测器(MCD)能够引发系统产生复位,确保系统工作的安全可靠。 1 C8051F各部分组件的功耗 当一个系统对功耗要求严格时,可以在硬件电路建立前首先粗略计算一下整个系统所需的功耗。由于C8051F系列单片机为数模混合SOC系统,能够实现整个设计的大部分功能,因此整个设计系统的功耗将主要集中在C805IF系列单片机的能量消耗上。 整个单片机系统的
[单片机]