|
本帖最后由 perpetuiy 于 2015-11-7 23:08 编辑 ; @5 d6 {* `* _. C 最近在项目上,用到鼠标上用的编码器,按照厂家给的编程方法,发现容易产生误判,故而自己用外部中断的方式来做,发现这样误判的情况会得到很大的改善,现发上来与大家分享。' {( o2 j8 v8 ]0 j: q0 Z #include "stm8s103f3p.h" #include "stm8s_bitsdefine.h"- Y" ^, J# N8 w$ J5 @5 q #include "typedef.h" #define CodeA PB_IDR_0 #define CodeB PB_IDR_1 uint8_t CodeB_last,CodeB_current,whe_ch,ADJ;) a5 x7 ]$ _9 @/ h void UART1_Init(void)" @9 B9 B2 m9 C( w, j { UART1_CR2=0x00; UART1_CR1=0x00; UART1_CR3=0x00; : R! i k- d& A UART1_BRR2=0x00;/ y1 S* c5 \$ }, ]% {, g; X3 U UART1_BRR1=0x0d; UART1_CR2=0x2C; . g) h' |( n/ k } void UART1_SendChar(uint8_t ch) {; d# f% k/ ?0 d4 z while((UART1_SR & 0x80) == 0x00); UART1_DR = ch; # O* B' x( M; k5 N- l5 m& B0 S" i % z& |( \! S; x8 |7 F } void IO_Init(void)% e3 h ^2 m/ S0 C' _- x T( \9 J' G7 w {; J! y" x+ G: A& K* f PB_DDR=0x04; PB_CR1=0x07;' \% o2 w' `9 ` o PB_CR2=0x01; } void EXTI1_INIT(void)) F' [4 j; i. o" c { EXTI_CR1=0x08; }# ]/ _% s: r, t! x& q main()* \1 i: D; p2 H3 p) `8 N) _" \ { IO_Init();: q) _9 e. f" E2 a! b EXTI1_INIT();/ m$ P2 X$ x J UART1_Init();5 K# D! r" C9 p; n3 D _asm("rim"); while(1) ;9 }" x2 Y$ P6 E# I2 p* k. x$ } }4 {/ V Q* D7 H @far @interrupt void EXTI1_IRQHandler(void)4 r/ q8 \& q2 e& w4 p/ m0 [& Z {7 i' k( u5 u! _- j( o, d& [: m% w _asm("sim");2 c4 u" v1 `# B q" j+ X whe_ch++;2 S) `. W1 A5 U- a" j& Q! l if(whe_ch==1)( c q" C2 P* t {, K1 I( u X1 z; g. x j CodeB_last=CodeB; IO_Init(); EXTI_CR1=0x04; } if(whe_ch==2) {$ G7 F3 W+ T+ V3 r whe_ch=0;2 N$ V- H+ b$ ~. M% d8 j2 O CodeB_current=CodeB; IO_Init();$ V, \: N$ [) x Y, R EXTI_CR1=0x08; }5 n7 ]' v. A: G, X+ y6 |$ h7 f if((CodeB_last==1)&&(CodeB_current==0)) {. j5 K* a: ~9 B3 w, @7 T. U8 z6 I1 ^- f ADJ++; UART1_SendChar(ADJ); } if((CodeB_last==0)&&(CodeB_current==1)) {4 c5 p( B" @0 X% w ADJ--; UART1_SendChar(ADJ);2 F0 p' S& K/ R1 C# [2 U( }4 P } _asm("rim"); return;! |% r& R: ]; D, C& j } ( G* J0 G; } n, [ |
STM8自学笔记(推荐STM8很好的入门电子书)
无刷直流电机控制应用+基于STM8S系列单片机---电子书
【精华资料】STM8Sxx固件库FOR IAR
基于STM8的DALI (数字可寻址调光协议)
分享STM8 风驰光盘的资料,是完整的(包括原理图+例程+PDF注释)
《无刷直流电机控制应用 基于STM8S系列单片机》
STM8S库函数中文参考 小软件
【资料分享】STM8L的智能手持血糖监测设备的源码
基于STM8S207工程模板
【培训资料】STM8系列PPT培训资料
微信公众号
手机版
/ k! W" @4 S' ?5 w# Q( R
好文章,值得学习
这个赞一下,很有用