找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 4731|回復(fù): 2
收起左側(cè)

STM8S003外部中斷識(shí)別機(jī)械式編碼器的正反轉(zhuǎn)

[復(fù)制鏈接]
ID:95245 發(fā)表于 2015-11-10 09:28 | 顯示全部樓層 |閱讀模式
最近在項(xiàng)目上,用到鼠標(biāo)上用的編碼器,按照廠家給的編程方法,發(fā)現(xiàn)容易產(chǎn)生誤判,故而自己用外部中斷的方式來做,發(fā)現(xiàn)這樣誤判的情況會(huì)得到很大的改善,現(xiàn)發(fā)上來與大家分享。
#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;
}

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的積分獎(jiǎng)勵(lì)!

查看全部評(píng)分

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

ID:94349 發(fā)表于 2015-11-10 14:36 | 顯示全部樓層
樓主你好 謝謝分享  2個(gè)頭文件是 系統(tǒng)自帶的嗎?
回復(fù)

使用道具 舉報(bào)

ID:359215 發(fā)表于 2018-7-7 09:38 | 顯示全部樓層
你這種中斷的方式,也會(huì)產(chǎn)生誤判;
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表