PIC单片机中断程序设计技巧
欢迎进入IT技术社区论坛,与200万技术人员互动交流 >>进入 所有的中档系列PIC单片机,PORTB端口最高的4个引脚(RB7~RB4)在设为输入模式时,当输入电平由高到低或由低到高发生变化时,可以让单片机产生中断。这就是通常所说的引脚状态变化中断。 在设计引脚
欢迎进入IT技术社区论坛,与200万技术人员互动交流 >>进入
所有的中档系列PIC单片机,PORTB端口最高的4个引脚(RB7~RB4)在设为输入模式时,当输入电平由高到低或由低到高发生变化时,可以让单片机产生中断。这就是通常所说的引脚状态变化中断。
在设计引脚中断程序时,有三个需要特别注意的地方。一是,在清除P0RTB中断标志位RBIF之前,必须安排一条必不可少的,以PORTB端口数据寄存器PORTB为源寄存器的读操作指令。放置这一指令的目的有时并不只是为了读取有用的数据,而是为了取消状态变化的硬件信号,以便顺利清除RBIF标志位,为下一次中断做好准备。二是,由于端口PORTB是引脚电子变化中断,即无论引脚出现上升沿还是下降沿都会产生中断请求,所以必须处理好不需要的虚假中断。三是,一般都利用PIC单片机的引脚功能来检测按键,所以必须处理好按键消抖的问?.
引脚中断程序设计
在主程序里先设置有关的寄存器。
◇设置TRISB寄存器,使RB7~RB4相关的引脚处于输入状态;
◇如果需要弱上拉,通过OPTION_REG的第7位设置;
◇RBIF=O;
◇RBIE=1;
◇GIF=1.
响应状态变化后的中断服务程序。
◇检查RBIF是否为l,为l则是引脚变化引起的中断;
◇调用延时程序,延时20~30 ms,目的是为了按键去抖;
◇判断是引脚出现上升沿还是下降沿引起的中断;
◇调用按键处理程序;
◇读PORTB口的值,取消状态变化的硬件信号;
◇清除RBIF标志。
笔者认为上面程序设计最大的问题是在中断程序里调用延时程序。大家知道,中档PIC单片机只有8层深度的硬件堆栈,在中断里调用于程序出现极易堆栈溢出的情况。另外,PIC单片机中断程序人口只有一个,在响应中断的请求时,PIC单片机就会自动把全局中断的使能位(INTCON的第7位GIF)清除,这样其他中断就暂时不能被响应(此时,如果别的中断发出的中断请求,标志位将一直保留着),直到这个中断程序退出后才会得到响应。这就要求我们设计中断程序的时候必须尽量短,避免调用子程序,更不要在中断里进行复杂的运算。
下面给出笔者设计程序时的思路。
当引脚状态变化引起中断时,在中断子程序里首先判断引起中断的原因是不是我们需要的变化引起的中断。如果是,不要在这里延时,而是设置一个标志位,接着清除中断标志,退出中断。中断程序如下:
else if((RBIE&RBlF)==1){ //如果引脚变化引起中断
if(RB4==0){ //RB4上的按钮接地
key=1; //按键标志位置位
}
RBIF=0; //清除引脚中断标志位
}
其中,if(RB4==0)语句相当于读取了PORTB端口数据寄存器,取消了状态变化的硬件信号。
下面详细介绍怎么样进行按键去抖。
首先,在定时器中断里设置一个lms的时间基准标志位“SYSlms”,每到lms,“SYSlms”便置位。程序如下:
unsigned char count;
if((ToIE&TOIF)==1){ //定时器中断
TMRO+=0x09; //每250μs中断一次
if(count==4){
count=0;
SYSlms=l; //系统时间标志
couot++;
}
T0IF=0; //清除时钟中断标志位
}
有了这个时间基准,便可以在主程序里进行按键去抖处理了。为了更好地利用这个时间基准,定义一个消息标志SYSTime,笔者把它称作时间消息。为了让这个消息有自我发布和自我消失的功能。定义了如下一个宏:
bit SYSTime;
#defincTimeEnahle()SYSTime=0,if(SYSlms){SYSTime=l;SYSlms=0;)
可以把TimeEnable()放到主程序死循环的任何地方,每当程序执行这个宏,SYSTime就会清零,这就是标志位的自我消失。如果在定时器时间基准标志位SYSlms已经置位的话,SYSTime就会置1,这样别的程序就可以利用这个时间消息了,这就是消息的自我发布。下面就是利用这个时间消息来进行按键延时去抖的,首先看一下按键扫描子程序;
void seaakey(){
unsigned char KeyTime,KeyTask;//定义任务时间参数、
//任务参数
switch(KeyTask){
case0:if(key){
KeyTime=30; //准备延时30 ms
KeyTask++; //准备好下一个任务
kcy=0;
}
break;
case I:KeyTime――; //延时30 ms
if(KeyTime==0)Key+ask++;
break;
case2;if(RB4==o){
//调按键处理程序
KeyTask=0;
}
else KeyTask=0;//退出任务
break;
}
}
在主程序的死循环中这样用:
while(1){
TimeEnable();
If(SYSTime==1){scankey();)
//在此可以添加其他程序
只有有时问消息的时候才执行按键扫描程序。可以看到,进入扫描程序执行第一次的时候,程序首先判断按键标志位有没有置位,置位的话(也就是有按键按下的话),任务时间参数(KeyTime)赋值为30,这是延时30ms,去抖,当然你也可以设置为其他的时间值;同时任务参数 (KeyTask)加1.1ms后,再进入扫描程序,这个时候扫描程序执行casel的语句,这样30次后(延时了30ms),任务参数(KeyTask)加1,值为2.lms后,再进入扫描程序,将执行case 2的语句,首先在这里再次判断是不是按键还在按下,如果是就调按键的处理程序,如果不是。就退出按键扫描程序。在这里,还可以加入按键是否抬起的判断程序。
这样设计的引脚变化程序,CPU开销小,效率高,不会出现堆浅溢出的问题,提高了系统的实时性。

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Partage de conseils Win11 : une astuce pour éviter la connexion au compte Microsoft Windows 11 est le dernier système d'exploitation lancé par Microsoft, avec un nouveau style de conception et de nombreuses fonctions pratiques. Cependant, pour certains utilisateurs, devoir se connecter à leur compte Microsoft à chaque démarrage du système peut être un peu ennuyeux. Si vous en faites partie, autant essayer les conseils suivants, qui vous permettront d'éviter de vous connecter avec un compte Microsoft et d'accéder directement à l'interface de bureau. Tout d’abord, nous devons créer un compte local dans le système pour nous connecter au lieu d’un compte Microsoft. L'avantage de faire cela est

Cet article explore le problème de la détection précise d'objets sous différents angles de vue (tels que la perspective et la vue à vol d'oiseau) dans la conduite autonome, en particulier comment transformer efficacement les caractéristiques de l'espace en perspective (PV) en vue à vol d'oiseau (BEV). implémenté via le module Visual Transformation (VT). Les méthodes existantes sont globalement divisées en deux stratégies : la conversion 2D en 3D et la conversion 3D en 2D. Les méthodes 2D vers 3D améliorent les caractéristiques 2D denses en prédisant les probabilités de profondeur, mais l'incertitude inhérente aux prévisions de profondeur, en particulier dans les régions éloignées, peut introduire des inexactitudes. Alors que les méthodes 3D vers 2D utilisent généralement des requêtes 3D pour échantillonner des fonctionnalités 2D et apprendre les poids d'attention de la correspondance entre les fonctionnalités 3D et 2D via un transformateur, ce qui augmente le temps de calcul et de déploiement.

En langage C, il représente un pointeur qui stocke l'adresse d'autres variables ; & représente l'opérateur d'adresse, qui renvoie l'adresse mémoire d'une variable. Les conseils pour l'utilisation des pointeurs incluent la définition des pointeurs, le déréférencement des pointeurs et la garantie que les pointeurs pointent vers des adresses valides. Les conseils pour l'utilisation des opérateurs d'adresse incluent l'obtention d'adresses variables et le retour de l'adresse du premier élément du tableau lors de l'obtention de l'adresse d'un élément du tableau ; . Un exemple pratique démontrant l'utilisation d'opérateurs de pointeur et d'adresse pour inverser une chaîne.

VSCode (Visual Studio Code) est un éditeur de code open source développé par Microsoft. Il possède des fonctions puissantes et une prise en charge riche des plug-ins, ce qui en fait l'un des outils préférés des développeurs. Cet article fournira un guide d'introduction aux débutants pour les aider à maîtriser rapidement les compétences d'utilisation de VSCode. Dans cet article, nous présenterons comment installer VSCode, les opérations d'édition de base, les touches de raccourci, l'installation du plug-in, etc., et fournirons aux lecteurs des exemples de code spécifiques. 1. Installez d'abord VSCode, nous avons besoin

Cet article vous montrera comment activer ou désactiver la copie automatique des sélections dans le presse-papiers du terminal Windows. Windows Terminal est un émulateur de terminal multi-onglets développé par Microsoft spécifiquement pour Windows 11/10, remplaçant l'invite de commande traditionnelle. Il prend en charge l'exécution d'applications telles que l'invite de commande, PowerShell, WSL, Azure, etc. Souvent, lorsqu'ils travaillent dans le terminal, les utilisateurs doivent copier les commandes et les sorties, mais le terminal ne prend pas en charge la copie des opérations de sélection par défaut. Lisez la suite pour savoir comment résoudre ce problème. Comment activer ou désactiver la copie automatique des sélections vers le cache dans Terminal ? Voici comment activer ou désactiver la copie automatique des sélections dans le presse-papier du Terminal : Ouvrez l'application Terminal et cliquez ci-dessus.

Des astuces Win11 révélées : Comment contourner la connexion au compte Microsoft Récemment, Microsoft a lancé un nouveau système d'exploitation Windows11, qui a attiré une large attention. Par rapport aux versions précédentes, Windows 11 a apporté de nombreux nouveaux ajustements en termes de conception d'interface et d'améliorations fonctionnelles, mais il a également suscité une certaine controverse. Le point le plus frappant est qu'il oblige les utilisateurs à se connecter au système avec un compte Microsoft. . Certains utilisateurs sont peut-être plus habitués à se connecter avec un compte local et ne souhaitent pas lier leurs informations personnelles à un compte Microsoft.

Titre : Conseils de programmation PHP : Comment accéder à une page Web en 3 secondes Dans le développement Web, nous rencontrons souvent des situations dans lesquelles nous devons passer automatiquement à une autre page dans un certain laps de temps. Cet article explique comment utiliser PHP pour implémenter des techniques de programmation permettant d'accéder à une page en 3 secondes et fournit des exemples de code spécifiques. Tout d'abord, le principe de base du saut de page est réalisé via le champ Location dans l'en-tête de la réponse HTTP. En définissant ce champ, le navigateur peut accéder automatiquement à la page spécifiée. Vous trouverez ci-dessous un exemple simple montrant comment utiliser P

Le 23 septembre, l'article « DeepModelFusion:ASurvey » a été publié par l'Université nationale de technologie de la défense, JD.com et l'Institut de technologie de Pékin. La fusion/fusion de modèles profonds est une technologie émergente qui combine les paramètres ou les prédictions de plusieurs modèles d'apprentissage profond en un seul modèle. Il combine les capacités de différents modèles pour compenser les biais et les erreurs des modèles individuels pour de meilleures performances. La fusion profonde de modèles sur des modèles d'apprentissage profond à grande échelle (tels que le LLM et les modèles de base) est confrontée à certains défis, notamment un coût de calcul élevé, un espace de paramètres de grande dimension, l'interférence entre différents modèles hétérogènes, etc. Cet article divise les méthodes de fusion de modèles profonds existantes en quatre catégories : (1) « Connexion de modèles », qui relie les solutions dans l'espace de poids via un chemin de réduction des pertes pour obtenir une meilleure fusion de modèles initiale.
