|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
有没人测试过STC32G单片机的编码器模式。- i& U- z2 a% z( J! z/ u. Z5 I
1.例程 中 P1口选择P1.0 ,P1.2 ,STC32G 没有P1.2 。这么郁闷的事也有。
6 |, B5 [! ? J3 h2.换到P2 口也没反应。
4 m( _7 N3 s0 Q( W( ~3.找到STC8H的编码器历程也不能用。
; F& G1 u/ Z% N) ^" V6 b
, I U D0 F7 m9 M0 N9 V. U下面是STC8H编码器模式历程:
, }3 q, W5 z) s8 [) T#include "reg51.h"0 { w+ G6 y9 I, N) h3 s0 ~% E2 h
#include "intrins.h"
) A2 m, i" _' T& z# e2 n7 x
0 ^% b0 q7 t$ C& S+ ntypedef struct TIM1_struct1 o- K- k0 j# z6 _4 ~. c
{# C o6 b" v" }& H% g
volatile unsigned char CR1; /*!< control register 1 */
8 V$ `' N; m! e) t' B$ l+ S$ o volatile unsigned char CR2; /*!< control register 2 */ W+ x; H9 x7 J+ y/ n# ]( t
volatile unsigned char SMCR; /*!< Synchro mode control register */$ X9 F& [- Z% j3 J5 q3 t* U! ^4 \5 u: J
volatile unsigned char ETR; /*!< external trigger register */9 j+ I. u6 \& F( A$ r' |. F
volatile unsigned char IER; /*!< interrupt enable register*/
* }8 k& { q' V0 P7 A w6 w. i volatile unsigned char SR1; /*!< status register 1 */( g- u4 Y* J0 u) {5 t
volatile unsigned char SR2; /*!< status register 2 */
: \% ?- [, ~' V! H3 \6 u4 s1 ^6 { volatile unsigned char EGR; /*!< event generation register */
& k, G. }( b1 \5 d. b4 k- U/ d: [( K volatile unsigned char CCMR1; /*!< CC mode register 1 */; }' j O8 Q9 j6 [- z+ q7 {
volatile unsigned char CCMR2; /*!< CC mode register 2 */8 V& I H+ j5 |6 D& @
volatile unsigned char CCMR3; /*!< CC mode register 3 */
% C5 E: O: T% m$ R7 N. U volatile unsigned char CCMR4; /*!< CC mode register 4 */4 v% T3 u8 Q6 ~5 _. W+ U1 \3 D
volatile unsigned char CCER1; /*!< CC enable register 1 */
6 U: M. \! e n volatile unsigned char CCER2; /*!< CC enable register 2 */* P/ J; D) A* j
volatile unsigned char CNTRH; /*!< counter high */
+ S- j0 k* L) O9 p3 j; J volatile unsigned char CNTRL; /*!< counter low */
3 P5 U$ Z- H8 Q7 C volatile unsigned char PSCRH; /*!< prescaler high */
6 T; t6 M- h8 C* u6 v volatile unsigned char PSCRL; /*!< prescaler low */. B+ \- W" o1 Z g( v" ?
volatile unsigned char ARRH; /*!< auto-reload register high */' M" g8 Z( F$ A, \8 n8 z( I, m2 h
volatile unsigned char ARRL; /*!< auto-reload register low */
. h" W" q; W1 l volatile unsigned char RCR; /*!< Repetition Counter register */
2 `0 n. X* h4 p+ r volatile unsigned char CCR1H; /*!< capture/compare register 1 high */
/ u* ~8 T [4 B# E volatile unsigned char CCR1L; /*!< capture/compare register 1 low */
1 v& Q9 P' B# B( \, l volatile unsigned char CCR2H; /*!< capture/compare register 2 high */
' j0 e! m6 w. c( R! E9 } volatile unsigned char CCR2L; /*!< capture/compare register 2 low */
! W9 I3 _( D) z+ Y4 W0 V volatile unsigned char CCR3H; /*!< capture/compare register 3 high */
& I1 @8 L; V9 u2 z volatile unsigned char CCR3L; /*!< capture/compare register 3 low */
8 a9 i! p( Q" h( r7 F! q8 m5 g volatile unsigned char CCR4H; /*!< capture/compare register 3 high */6 w& X$ e9 w: ]4 O4 Q1 T$ V
volatile unsigned char CCR4L; /*!< capture/compare register 3 low */
2 C+ O; I/ U p3 w, } volatile unsigned char BKR; /*!< Break Register */) a% M5 w5 P. ]* Q1 y- T+ l
volatile unsigned char DTR; /*!< dead-time register */
6 p C# U9 S: o* z; b: J$ n7 t volatile unsigned char OISR; /*!< Output idle register */+ W7 e/ B, x4 D3 K- w7 u* ?( n* ]
}TIM1_TypeDef;) k, t9 I( J W: {. ~7 [
( s- i( J- g8 V9 z#define TIM1_BaseAddress 0xFEC0
0 w* i( c( ~( Q& U; T* m) Z q2 y9 C: C- L6 i
#define TIM1 ((TIM1_TypeDef xdata*)TIM1_BaseAddress)* X0 b; I9 Y+ J5 w
#define PWMA_ENO (*(unsigned char volatile xdata *)0xFEB1)
4 |: \* g9 {: q#define PWMA_PS (*(unsigned char volatile xdata *)0xFEB2)5 O0 c% ?) g; C, Y7 o
. X9 D* o. \5 c, s0 l1 Q! `4 f
sfr P0M0 = 0x94;
$ ]# d$ {# h& ^. F- D+ Z( e, Z5 Rsfr P0M1 = 0x93;
" _: `2 a1 V8 i4 B* `3 W8 Psfr P1M0 = 0x92;
" R5 ^, }) J3 q0 ~% ?: h4 {sfr P1M1 = 0x91;
K" b& d$ f; O# ysfr P_SW2 = 0xba;, W1 W' X5 g, }0 Z+ ?/ @% ]
0 `! w7 f4 J/ a& xsbit P03 = P0^3;
/ M- }2 G: Y/ H0 h$ `2 f7 o/ J6 H x6 C
unsigned char cnt_H, cnt_L;- E% ]$ J$ Q5 C; x
$ [8 Q$ [2 P# `( U4 Uvoid main(void)9 Q( t8 a3 J. K, u& N
{
5 D! l( k# o6 {- J. f P_SW2 = 0x80;
8 V9 x: I; @) i' D
2 e+ ]8 k. T% F' b v9 H+ d P1M1 = 0x0f;
; Y4 c3 d8 W4 a, c P1M0 = 0x00;
( E2 C- _8 A5 e/ ^3 o
9 v! @4 z0 H5 M PWMA_ENO = 0x00; //配置成TRGI 的pin需关掉ENO对应bit并配成input, w7 S, t$ L/ ?/ f% Z0 q) m# u
PWMA_PS = 0x00; //00 WM at P1
' A+ _5 P& W9 B& N6 g
/ [4 m) o/ H4 _. I+ W1 G TIM1-> PSCRH = 0x00; //预分频寄存器, d4 @/ \6 _0 o( g, u* C1 T! l
TIM1-> PSCRL = 0x00;, L* x/ |, K' b2 g# ?: ^
8 N& ?. G: j7 T TIM1-> CCMR1 = 0x21; //通道模式配置为输入,接编码器,滤波器4时钟4 E0 O; E/ T; [: p+ k
TIM1-> CCMR2 = 0x21; //通道模式配置为输入,接编码器,滤波器4时钟
7 u7 \: m5 O' E5 S6 u) E8 G% \& Q1 B5 M' r
TIM1-> SMCR = 0x03; //编码器模式3( U$ V; @, W T. X% C
) z6 ~/ i5 X* l1 |6 _7 o
TIM1-> CCER1 = 0x55; //配置通道使能和极性
3 n! z; Y. _% @/ }; [ TIM1-> CCER2 = 0x55; //配置通道使能和极性2 M) ]" U, E$ r! k+ d6 {
9 t) o, X4 s$ U- B% K8 Z1 J/ [$ c
TIM1-> IER = 0x02; //使能中断4 d$ ^2 ]7 V: [; m* C/ [ |
% } @8 C1 `* o( F, A) G4 E
TIM1-> CR1 |= 0x01; //使能计数器
- g8 F$ {1 H: h# H8 l/ o: }
% A! |" n$ ]6 M EA = 1;
( n# A! D2 B; S- W) W! I! s: g. ^$ L+ ]" k7 t2 P" D
while (1);
9 P+ |# x: S8 E3 N g+ L) x}
+ E; t2 @' v: c/ |) G1 L. {, l1 O) e
0 l( S1 V+ R& w/******************** PWM中断读编码器计数值**************************/
0 o; z$ t$ o) z( c ~: X/ pvoid PWMA_ISR() interrupt 26
" x& k* F( M9 l3 j) x3 L{ U8 k) p+ T2 |3 T4 O7 b" Y
if (TIM1->SR1 & 0X02)
* `' O; B Y5 A$ m {
1 u0 x$ K( P" j1 ^+ x: \' M P03 = ~P03;' o. G( R) c' `: L
cnt_H = TIM1->CCR1H;
9 ?, O2 l; S. A$ |9 t- r cnt_L = TIM1->CCR1L;
' V3 _& @) z: f* K' d6 n) k$ S TIM1->SR1 &= ~0X02;
- C+ A& {( o* |1 h- P, ` }
; K, A, X2 S4 u% y/ y0 Y}$ ~+ I' J5 w5 a9 y) U
|
|