|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
有没人测试过STC32G单片机的编码器模式。2 g9 N5 P2 u8 S5 I6 H* s# V; R. r: E
1.例程 中 P1口选择P1.0 ,P1.2 ,STC32G 没有P1.2 。这么郁闷的事也有。
9 ~$ ~: ~2 H6 C# B8 X6 V2.换到P2 口也没反应。
- J4 D5 L }$ ~+ p3.找到STC8H的编码器历程也不能用。
4 C0 n; f8 ^6 x1 p5 ?$ u; d8 E" S& B& t
下面是STC8H编码器模式历程:# w ~3 u0 E0 A( g% K* }. h: a% _
#include "reg51.h"& t8 d& h5 g/ _+ B
#include "intrins.h") q9 J0 v' D+ M9 O7 H
1 T( ~, r; W; I; c. m7 s6 g& U6 R5 `typedef struct TIM1_struct2 W, T, b% S. A# K) N( F
{* C3 s3 i0 B; w" V! z
volatile unsigned char CR1; /*!< control register 1 */
: \) C& ]7 l% T, Z: ^4 ~+ E volatile unsigned char CR2; /*!< control register 2 */+ r4 H0 H7 G0 e. I; I
volatile unsigned char SMCR; /*!< Synchro mode control register */5 D4 i' U4 ]! V ]
volatile unsigned char ETR; /*!< external trigger register */
; ]3 E0 J+ L8 k volatile unsigned char IER; /*!< interrupt enable register*/$ q1 q- u( b$ f$ F7 S. M
volatile unsigned char SR1; /*!< status register 1 *// Q7 K# {3 A8 i1 p
volatile unsigned char SR2; /*!< status register 2 */9 U# a( p3 w5 M5 [ ?( t0 ?
volatile unsigned char EGR; /*!< event generation register */# m8 C/ m4 {9 }5 I; R& Z
volatile unsigned char CCMR1; /*!< CC mode register 1 */
- E" W$ v8 I. |; {8 {3 \* d# e volatile unsigned char CCMR2; /*!< CC mode register 2 */
/ x& i# ^' c$ A2 M/ e volatile unsigned char CCMR3; /*!< CC mode register 3 */
8 w; P2 J& L- ^% @& d. r volatile unsigned char CCMR4; /*!< CC mode register 4 */
2 H! p* d* p/ V; o volatile unsigned char CCER1; /*!< CC enable register 1 */
6 {) w4 P- A1 B: r4 |* v1 ^4 L5 D( l volatile unsigned char CCER2; /*!< CC enable register 2 */1 O0 r& Z5 v- z# W
volatile unsigned char CNTRH; /*!< counter high */
* S( n W! b2 i+ I volatile unsigned char CNTRL; /*!< counter low */# p3 p8 ]4 o, |- c# }' l4 g
volatile unsigned char PSCRH; /*!< prescaler high */1 i# v0 h9 }+ F! W- |0 Q9 [* b$ G6 ~
volatile unsigned char PSCRL; /*!< prescaler low */! n5 U2 e! t/ @5 w* ~- a5 y! q
volatile unsigned char ARRH; /*!< auto-reload register high */
8 T3 P, N7 C/ X# p: ` volatile unsigned char ARRL; /*!< auto-reload register low */8 `+ _( q2 w+ Y
volatile unsigned char RCR; /*!< Repetition Counter register */
/ h& s8 t! q& i# z) V volatile unsigned char CCR1H; /*!< capture/compare register 1 high */
" v& ^7 ~! `: u( y volatile unsigned char CCR1L; /*!< capture/compare register 1 low */$ N+ W6 Y$ t4 G6 ?5 [( T1 V v
volatile unsigned char CCR2H; /*!< capture/compare register 2 high */
# ], l( P5 u9 m5 o7 H/ _ volatile unsigned char CCR2L; /*!< capture/compare register 2 low */; j& s" i5 H( G3 C O1 O/ k
volatile unsigned char CCR3H; /*!< capture/compare register 3 high */
. r$ k/ J" D, U; Y& |$ I. Z, D volatile unsigned char CCR3L; /*!< capture/compare register 3 low */! c' u9 n+ v! c. v3 E
volatile unsigned char CCR4H; /*!< capture/compare register 3 high */
4 Z" y v# B: \( P1 } volatile unsigned char CCR4L; /*!< capture/compare register 3 low */
6 k4 J+ O8 e: l, x+ [. K volatile unsigned char BKR; /*!< Break Register */' Y1 P6 e* `; Y9 V( E5 A1 W
volatile unsigned char DTR; /*!< dead-time register */ E3 @# U8 i3 k' Q* \0 U
volatile unsigned char OISR; /*!< Output idle register */+ p+ O! R6 L F8 r6 D6 W3 q
}TIM1_TypeDef;& J' {/ b- i9 i" V+ x
2 M9 G. p6 u; N#define TIM1_BaseAddress 0xFEC0
) N0 {6 T, J+ T7 W+ q) a9 T7 L: w" _' R$ s
#define TIM1 ((TIM1_TypeDef xdata*)TIM1_BaseAddress)
# m" b8 {8 U W+ [/ n1 S5 C2 i7 w5 a* `( H#define PWMA_ENO (*(unsigned char volatile xdata *)0xFEB1)
1 s# N% N# Z% \7 t7 v5 z3 C+ v#define PWMA_PS (*(unsigned char volatile xdata *)0xFEB2)
* x8 \4 d. B# V8 B$ v/ w) S1 N
3 _& j4 q# A" }' \7 Ssfr P0M0 = 0x94;8 x* X7 `( f& `
sfr P0M1 = 0x93;
8 {8 w6 j4 o% w Y& ^sfr P1M0 = 0x92;3 I; v) l# H! c% h; O$ n) d1 ?0 K
sfr P1M1 = 0x91;
# y) ?! Q: r* p$ Q, W# gsfr P_SW2 = 0xba;0 p" ?) a6 `4 v( N" N7 r
( D: ~9 X, v5 @" S4 ~8 d
sbit P03 = P0^3;, }- J' S1 W( D: Z# d! w0 G! I% s
' b. G# ~# E- e9 [unsigned char cnt_H, cnt_L;* O4 O: A5 {7 G' a: x( \
' ^3 ?- {: Z! B; R. C8 q% o$ I
void main(void)* _2 _7 `/ V% {0 g6 a
{
% k7 F, T$ p: R' u P_SW2 = 0x80;
' U- z# d# G/ `7 t3 N) h
9 T( [& N* f, X) z/ y+ F9 }2 | P1M1 = 0x0f;
! a4 a9 j2 \$ C P1M0 = 0x00;
% q1 C/ M: Q( ]$ F+ _+ w# M) a/ {9 X
PWMA_ENO = 0x00; //配置成TRGI 的pin需关掉ENO对应bit并配成input; W% V$ J9 v& v V `# x8 Q/ a
PWMA_PS = 0x00; //00 WM at P1+ `/ [3 ~+ [ S
) u# U4 v( B4 g& r
TIM1-> PSCRH = 0x00; //预分频寄存器0 F+ t0 G/ {0 m5 } r
TIM1-> PSCRL = 0x00;
% U: a" A9 j, ~" g* }& B( P% E( [ j) \: y( x$ K* j/ e
TIM1-> CCMR1 = 0x21; //通道模式配置为输入,接编码器,滤波器4时钟* m9 Q1 a2 {5 d7 p% m
TIM1-> CCMR2 = 0x21; //通道模式配置为输入,接编码器,滤波器4时钟
% f: D$ Z0 p; m* y. ]/ ?5 H# g$ q' f" n2 K- ~/ y( w. p0 z
TIM1-> SMCR = 0x03; //编码器模式3
" @0 s" e& I9 t' M& G8 l
0 E% u9 y+ K1 q* m: a TIM1-> CCER1 = 0x55; //配置通道使能和极性
$ `9 P9 _0 B8 J1 I TIM1-> CCER2 = 0x55; //配置通道使能和极性
( X2 S* o7 O( x% L% M! i9 v5 X/ G" s
TIM1-> IER = 0x02; //使能中断. ~# K2 c/ I, v* U& r
& G2 n& s% K1 K. T TIM1-> CR1 |= 0x01; //使能计数器2 [" e2 d5 O8 s1 D
9 c& R% j2 Q* `0 b5 B1 b. Q! J EA = 1;7 p4 q1 q3 S+ o8 _4 L' F9 p- l
' h0 q! m& T, P2 y' s k: X" F2 ?
while (1);" N& g% W' H+ V2 Q7 N8 E' N( C4 e% o
}
5 r' I2 T2 O) y3 H) Z
( \2 k) _9 y x7 ^8 m& M- G/******************** PWM中断读编码器计数值**************************/* S$ T8 t/ V: E# P" g3 }) E' q
void PWMA_ISR() interrupt 26
, S3 g3 f3 p( B; B+ k Q{
# @7 Y% \! I1 {# o w: I6 w if (TIM1->SR1 & 0X02)3 N! X4 V2 w6 |7 t
{
' p' T" j ?% C P03 = ~P03;4 E& X5 ^) N0 l; ]
cnt_H = TIM1->CCR1H; N) d. T1 Q9 r( N4 L
cnt_L = TIM1->CCR1L;/ L# @2 M. k) B
TIM1->SR1 &= ~0X02;
/ F% ~1 O0 K* y0 c& T; d/ O" m }2 }% ^9 Y+ `- v# B6 m' `
}
% n- l; ^! e+ C# U% u |
|