|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
有没人测试过STC32G单片机的编码器模式。# @0 G4 t% d3 J+ J, t6 k( t
1.例程 中 P1口选择P1.0 ,P1.2 ,STC32G 没有P1.2 。这么郁闷的事也有。
& f4 C- C9 ~7 }- X, ~ t8 z2.换到P2 口也没反应。% Y& D, J- \1 f. @5 W9 r1 b
3.找到STC8H的编码器历程也不能用。
/ L6 B3 Y0 I! @# v( L4 p# h0 D& @6 K% D# s
下面是STC8H编码器模式历程:! O3 |" R. l/ M7 Q& D/ o
#include "reg51.h"
D |8 B- d. D#include "intrins.h"9 i# H2 ]" L6 ]/ `1 V! F9 W
4 k2 C* ^0 s8 c8 A% W9 G: _& U' H
typedef struct TIM1_struct
0 g J. {; n: d{7 D1 i" E9 K, X+ w0 ^2 K
volatile unsigned char CR1; /*!< control register 1 */) z' P* ~# q" h6 R0 i: I% R0 F7 V, E
volatile unsigned char CR2; /*!< control register 2 */
1 X6 b, f; ]8 y/ U$ e volatile unsigned char SMCR; /*!< Synchro mode control register */* [- z w: E( O: A, Y k, i' A6 k
volatile unsigned char ETR; /*!< external trigger register */
6 Y# }& J2 _! L5 F! Q/ [/ Q volatile unsigned char IER; /*!< interrupt enable register*/
; Q' _1 }! ]. Y volatile unsigned char SR1; /*!< status register 1 */
5 p6 s1 ~! u. ]7 Y0 w volatile unsigned char SR2; /*!< status register 2 */
" i$ n. |( q4 ` volatile unsigned char EGR; /*!< event generation register */; R- C; Y2 W# j4 c
volatile unsigned char CCMR1; /*!< CC mode register 1 */5 t( h& n. ?% l+ F
volatile unsigned char CCMR2; /*!< CC mode register 2 */
7 a# v) N& {0 C8 K- H; X volatile unsigned char CCMR3; /*!< CC mode register 3 */
8 @ x E: U# u% a7 C4 A volatile unsigned char CCMR4; /*!< CC mode register 4 */7 `" z. P4 q* ]. D4 ] q/ z
volatile unsigned char CCER1; /*!< CC enable register 1 */
8 }4 y' ^1 O8 m9 }7 x$ d volatile unsigned char CCER2; /*!< CC enable register 2 */
# R* k' ]1 v/ _1 Q2 w volatile unsigned char CNTRH; /*!< counter high */; ^# h9 E" y7 p* |
volatile unsigned char CNTRL; /*!< counter low */2 C3 E' G9 }& Y! a8 V
volatile unsigned char PSCRH; /*!< prescaler high */
, q9 g0 S+ |: X volatile unsigned char PSCRL; /*!< prescaler low */
: \6 u- |3 }' K+ P) ~5 P, D" \4 f volatile unsigned char ARRH; /*!< auto-reload register high */) G% f- u3 h. ]
volatile unsigned char ARRL; /*!< auto-reload register low */
7 L/ p( k9 e1 X8 z volatile unsigned char RCR; /*!< Repetition Counter register */
& o" s, B$ I0 m1 i) n volatile unsigned char CCR1H; /*!< capture/compare register 1 high */
. A: a: x8 W I# ?' q0 W volatile unsigned char CCR1L; /*!< capture/compare register 1 low */' p+ ^) ^7 q; F* n
volatile unsigned char CCR2H; /*!< capture/compare register 2 high */( e6 B0 L) Z Q; z3 ~. A# p
volatile unsigned char CCR2L; /*!< capture/compare register 2 low */4 A* G; l9 q0 n: G, n7 E
volatile unsigned char CCR3H; /*!< capture/compare register 3 high */
O3 ]2 d0 \) r: T9 Y- F4 t volatile unsigned char CCR3L; /*!< capture/compare register 3 low */; I- V7 m4 _* i2 _- Q
volatile unsigned char CCR4H; /*!< capture/compare register 3 high */
/ A" v9 D3 ]7 l3 H3 o volatile unsigned char CCR4L; /*!< capture/compare register 3 low */" C2 w* w/ o( X q, x2 A& |
volatile unsigned char BKR; /*!< Break Register */
& k1 Z5 Z% Z) S. L, ] volatile unsigned char DTR; /*!< dead-time register */
t- \- ]0 {- w- m volatile unsigned char OISR; /*!< Output idle register */9 p! l! ?2 m: I# Z$ t
}TIM1_TypeDef;; K1 ]9 _/ o) ^% R- {# d1 ^
9 T- R# ~- r& U7 e- C' }4 y#define TIM1_BaseAddress 0xFEC0; v( q* G% \) \# ~' ~
5 J- `6 k' ?6 G3 Y1 A( Y1 F4 ~$ ^# q
#define TIM1 ((TIM1_TypeDef xdata*)TIM1_BaseAddress)
; U0 C! M$ w0 w( L; x#define PWMA_ENO (*(unsigned char volatile xdata *)0xFEB1)6 a- H- ?* d; R
#define PWMA_PS (*(unsigned char volatile xdata *)0xFEB2)
9 K9 z/ A8 _# F4 |* s( E
" b; X X( `. A8 a2 S; i* y: Z7 `sfr P0M0 = 0x94;
- q7 e" I, Z6 A9 }sfr P0M1 = 0x93;
; t9 A4 d9 d4 v/ ]sfr P1M0 = 0x92;! ?/ v2 o9 j+ U' B
sfr P1M1 = 0x91;5 o8 R1 y$ o0 f0 D* n
sfr P_SW2 = 0xba;' Y+ C' m3 T$ F9 t8 Y! Q
1 r% [5 @* x6 {5 C
sbit P03 = P0^3;* r) u& X1 r6 S! u e" u
6 q: k8 Z" ^! S
unsigned char cnt_H, cnt_L;
. F. s7 k1 ]1 o0 @+ R/ s, N2 N1 ~7 [
, N0 T. N) @3 }) Tvoid main(void)- s. D" t; o3 `, c
{, f) \2 I: N7 c) k1 i0 X* ]' L
P_SW2 = 0x80;& N3 d5 ?" {- o! ]( T. \+ h
* w7 M2 I `, R) [# Q( U" E
P1M1 = 0x0f;+ @) }9 v1 `- Z6 e. D5 U
P1M0 = 0x00;0 Y+ a$ ]9 G) E$ a* X" c
, {6 X0 G1 v; ?3 g8 Q A% U' S PWMA_ENO = 0x00; //配置成TRGI 的pin需关掉ENO对应bit并配成input
' x- U( n& Q1 K: o1 [; c: h2 { PWMA_PS = 0x00; //00 WM at P1! F) M1 d6 w% N6 l# K2 k
9 [$ Z1 @# N0 P9 J- ^% ~
TIM1-> PSCRH = 0x00; //预分频寄存器
5 ] R& ~$ z/ _' |0 l/ h! m- O4 u( C TIM1-> PSCRL = 0x00;
$ B0 K! V. A: m/ r( _1 _4 B1 u# j( i" s8 k' v; x/ d
TIM1-> CCMR1 = 0x21; //通道模式配置为输入,接编码器,滤波器4时钟
* I& z2 I# r& R5 l* Y TIM1-> CCMR2 = 0x21; //通道模式配置为输入,接编码器,滤波器4时钟
9 T" e$ H; z4 b2 G; C6 O; Z8 b4 j5 w; w. X) G
TIM1-> SMCR = 0x03; //编码器模式3! a; W& J& u& i' P# a+ s H
A; y+ h5 o- {# w0 { TIM1-> CCER1 = 0x55; //配置通道使能和极性
& S) M2 g; U; D. Z& Y TIM1-> CCER2 = 0x55; //配置通道使能和极性
( n0 y: ]$ L4 E. Z m l
4 w, h4 U& E! l5 I; `( [2 L7 p TIM1-> IER = 0x02; //使能中断: W( \' _9 O' e! o$ q+ I; W/ p
$ x+ p& J' G3 V! S! e TIM1-> CR1 |= 0x01; //使能计数器6 U( A' I, k+ X! C
9 n0 q! Z. m% ] u EA = 1;7 h, x3 z. }7 A! L3 n$ R. A! @
+ Z9 s. n o7 w% L
while (1);% D' ?5 A! W, Y9 p/ B6 |
}/ c! p/ G4 k/ U5 `& f
5 Z' o$ f9 D: X( \/******************** PWM中断读编码器计数值**************************// v8 e! D5 a! ^; R
void PWMA_ISR() interrupt 26
5 ~# M0 v6 Y. p' t" O7 d% t7 ^# a{8 K$ W; N1 F7 P7 Y0 ^0 x: R2 e, Y
if (TIM1->SR1 & 0X02): T. z) c9 A- V9 G
{" J4 U) f: ~" \# m7 i
P03 = ~P03;
) }/ n3 {4 L) Z! C5 ^0 l cnt_H = TIM1->CCR1H;8 T a" U. L! x! e! }
cnt_L = TIM1->CCR1L;: e( W+ a" J" S; {5 Q0 M7 y, B, k" R4 l
TIM1->SR1 &= ~0X02;& `* \9 \9 x/ H; b* \
}
1 N" } `% q% r; L}" G2 r: H, Z0 O8 u* Z. w2 t
|
|