|
本帖最后由 perpetuiy 于 2015-11-7 23:08 编辑 最近在项目上,用到鼠标上用的编码器,按照厂家给的编程方法,发现容易产生误判,故而自己用外部中断的方式来做,发现这样误判的情况会得到很大的改善,现发上来与大家分享。 #include "stm8s103f3p.h" #include "stm8s_bitsdefine.h"5 m+ H0 b+ \* o8 N; `( T; F. C #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) { w7 X& X& S' H) |) g8 ?, h UART1_CR2=0x00; 9 F2 M0 M- f5 Z# G$ Y% l UART1_CR1=0x00; F/ Z$ f& {# T4 |; o1 ~ UART1_CR3=0x00; UART1_BRR2=0x00;% S' q" F7 }3 M% q+ l. v. k* o0 _ UART1_BRR1=0x0d; UART1_CR2=0x2C; & V, u- N R. W- s } void UART1_SendChar(uint8_t ch) { while((UART1_SR & 0x80) == 0x00); UART1_DR = ch; ( p6 c$ w( d1 [# l2 @6 M' Z + b1 u+ w5 Y& t6 }( b) n! ~# _ } void IO_Init(void)" X( r- u; R) u& m5 [7 z- |, J {5 i$ p/ x" T. ?4 X# N1 S: b [ PB_DDR=0x04; PB_CR1=0x07;& O! V- R) E7 m- A' U PB_CR2=0x01;$ W( V( P; {& X( t } void EXTI1_INIT(void) { EXTI_CR1=0x08;+ |! a, Q; r5 R+ y# l }) J6 D6 ~0 c' q2 C, W' e, j main() { IO_Init();/ ~: {' l0 h8 u2 t2 Z1 k/ y EXTI1_INIT();' Y3 l2 }$ n2 \& e% H! X UART1_Init();8 U8 B. M* `8 L; h _asm("rim"); while(1) ; }; {/ ]' {( m7 H9 P0 W @far @interrupt void EXTI1_IRQHandler(void) { _asm("sim"); whe_ch++;5 `, p) w; u" A' {& P if(whe_ch==1)% ] Y3 \9 O( b* u; _/ I {% }9 _( }# u5 {" Z1 P, a! g CodeB_last=CodeB;3 j- `: }( A+ b2 n! \: F: S IO_Init(); EXTI_CR1=0x04; }9 w& L6 }, k: K" H if(whe_ch==2)' n! M- s4 m U5 _' A# L/ K {$ C3 X, @* k9 ~. J, i- | whe_ch=0;# c2 L2 \- x+ w CodeB_current=CodeB;, v. g4 \, y5 Z5 p$ A IO_Init(); EXTI_CR1=0x08; } if((CodeB_last==1)&&(CodeB_current==0))& s. I' [" C3 E; C( { {; H8 _8 b( n8 a: H" n% F ADJ++; UART1_SendChar(ADJ);+ ^# K# j1 ^- ]" ~) W2 {. i }7 f- {- g: K" Y3 p6 E if((CodeB_last==0)&&(CodeB_current==1))" {& A9 B. P( ]" N( q) B { ADJ--;; T- w7 e7 f2 j UART1_SendChar(ADJ); }9 s y# {. [/ `2 I _asm("rim");4 w8 h# M' \) n4 N' k9 A! m return; }, ]2 [, e3 X2 ^3 y3 C) W! Z ' k8 [* A. G6 [ d7 z" V1 Y$ A* G - ~8 e! X! n" `8 b |
STM8自学笔记(推荐STM8很好的入门电子书)
无刷直流电机控制应用+基于STM8S系列单片机---电子书
【精华资料】STM8Sxx固件库FOR IAR
基于STM8的DALI (数字可寻址调光协议)
分享STM8 风驰光盘的资料,是完整的(包括原理图+例程+PDF注释)
《无刷直流电机控制应用 基于STM8S系列单片机》
STM8S库函数中文参考 小软件
【资料分享】STM8L的智能手持血糖监测设备的源码
基于STM8S207工程模板
【培训资料】STM8系列PPT培训资料
微信公众号
手机版
! H% d: i' s% v4 o* N7 E7 ?1 Z
好文章,值得学习
这个赞一下,很有用