你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM8S003外部中断识别机械式编码器的正反转

[复制链接]
perpetuiy 发布时间:2015-11-7 23:07
本帖最后由 perpetuiy 于 2015-11-7 23:08 编辑

最近在项目上,用到鼠标上用的编码器,按照厂家给的编程方法,发现容易产生误判,故而自己用外部中断的方式来做,发现这样误判的情况会得到很大的改善,现发上来与大家分享。
#include "stm8s103f3p.h"
#include "stm8s_bitsdefine.h"
#include "typedef.h"
#define  CodeA PB_IDR_0
#define  CodeB PB_IDR_1
uint8_t CodeB_last,CodeB_current,whe_ch,ADJ;
void UART1_Init(void)
{   
        UART1_CR2=0x00;        
        UART1_CR1=0x00;           
        UART1_CR3=0x00;           
        UART1_BRR2=0x00;
        UART1_BRR1=0x0d;         
        UART1_CR2=0x2C;              
}
void UART1_SendChar(uint8_t  ch)
{
        while((UART1_SR & 0x80) == 0x00);
        UART1_DR = ch;  
        
}
void IO_Init(void)
{
        PB_DDR=0x04;
        PB_CR1=0x07;
        PB_CR2=0x01;
}
void EXTI1_INIT(void)
{
        EXTI_CR1=0x08;
}
main()
{
        IO_Init();
        EXTI1_INIT();
        UART1_Init();
        _asm("rim");
        while(1) ;
}
@far @interrupt void EXTI1_IRQHandler(void)
{
        _asm("sim");
        whe_ch++;
        if(whe_ch==1)
        {
                CodeB_last=CodeB;
                IO_Init();
                EXTI_CR1=0x04;
        }
        if(whe_ch==2)
        {
                whe_ch=0;
                CodeB_current=CodeB;
                IO_Init();
                EXTI_CR1=0x08;
        }
        if((CodeB_last==1)&&(CodeB_current==0))
        {
                ADJ++;
                UART1_SendChar(ADJ);
        }
        if((CodeB_last==0)&&(CodeB_current==1))
        {
                ADJ--;
                UART1_SendChar(ADJ);
        }
        _asm("rim");
        return;
}


收藏 2 评论9 发布时间:2015-11-7 23:07

举报

9个回答
disheng4688 回答时间:2015-11-8 09:29:10
学习                  
ughbss 回答时间:2015-11-8 11:50:19
使用一个D触发器可以直接输出正反转
k_xg1919 回答时间:2015-11-8 12:26:09
学习                  
埃斯提爱慕 回答时间:2015-11-8 17:37:36
提示: 作者被禁止或删除 内容自动屏蔽
32F 回答时间:2015-12-1 16:04:24


好文章,值得学习
32F 回答时间:2015-12-7 13:18:46

这个赞一下,很有用
wdshuang09 回答时间:2016-10-9 21:27:20
路过,学习了   
robter 回答时间:2018-2-12 22:30:52
这个很好,最近也在搞旋转编码器,借鉴了
adsl989 回答时间:2018-7-20 12:07:50
借鉴了
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版