|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
有没人测试过STC32G单片机的编码器模式。: Q* a2 \1 K$ U1 P
1.例程 中 P1口选择P1.0 ,P1.2 ,STC32G 没有P1.2 。这么郁闷的事也有。# J/ ~. j, X8 J. W
2.换到P2 口也没反应。
+ @% k$ n1 L; N; F- P9 t% i3 ]+ W3.找到STC8H的编码器历程也不能用。! t8 R$ k2 u3 l Z& N
x8 a1 [+ B* | E! E2 e- V下面是STC8H编码器模式历程:
K$ j! i5 }0 X6 ?8 Q#include "reg51.h"0 m( {8 A5 d" z
#include "intrins.h"
: C( u1 J3 y1 @, x7 C) W. }+ W
( `2 M! u& i+ R8 ?' W. S, \typedef struct TIM1_struct; {( ~8 m" r+ h* H
{. |! R! S: m. M7 N3 A
volatile unsigned char CR1; /*!< control register 1 */
3 }+ L; y L; c' u1 _* l volatile unsigned char CR2; /*!< control register 2 */! z3 K8 Z* h6 Q2 A' q
volatile unsigned char SMCR; /*!< Synchro mode control register */
9 V' x! a3 U2 w. d$ _% k volatile unsigned char ETR; /*!< external trigger register */) O. ^7 j% H9 N
volatile unsigned char IER; /*!< interrupt enable register*/
0 \8 N" U' `* s) n2 e volatile unsigned char SR1; /*!< status register 1 */ B! o: G4 O# @0 q. [
volatile unsigned char SR2; /*!< status register 2 */' M7 X: c+ p7 K" D/ t: C
volatile unsigned char EGR; /*!< event generation register */
# \8 p$ {, r" C volatile unsigned char CCMR1; /*!< CC mode register 1 */
8 x8 `" K7 y7 o" J1 C volatile unsigned char CCMR2; /*!< CC mode register 2 */
1 H) V |2 H# P9 m, w volatile unsigned char CCMR3; /*!< CC mode register 3 */9 @0 i$ L3 n. G6 g- r/ `
volatile unsigned char CCMR4; /*!< CC mode register 4 */
/ Z5 t+ P2 k6 j volatile unsigned char CCER1; /*!< CC enable register 1 */
6 j/ R& u1 z1 L# H) ? volatile unsigned char CCER2; /*!< CC enable register 2 */
/ u' D, q7 n$ \ volatile unsigned char CNTRH; /*!< counter high */
2 b" H# A! d* R5 C, s9 G h volatile unsigned char CNTRL; /*!< counter low */8 y) N( V. N* I: z% h/ @
volatile unsigned char PSCRH; /*!< prescaler high *// H. J5 F" w' W( u2 r; b
volatile unsigned char PSCRL; /*!< prescaler low */
4 w; ^4 L3 C) U" }7 f/ S volatile unsigned char ARRH; /*!< auto-reload register high */7 f( g9 V5 O8 F% T. ~# N
volatile unsigned char ARRL; /*!< auto-reload register low */
& R6 y* I% R. q. g volatile unsigned char RCR; /*!< Repetition Counter register */
- A9 O/ s0 a0 D volatile unsigned char CCR1H; /*!< capture/compare register 1 high */
/ Q; _$ ~- R, `, C! M. t# P volatile unsigned char CCR1L; /*!< capture/compare register 1 low */& Y8 b* B% U1 ^/ m/ N8 C
volatile unsigned char CCR2H; /*!< capture/compare register 2 high */
" g6 G; h+ {/ Y( O, ? volatile unsigned char CCR2L; /*!< capture/compare register 2 low */
Q- q$ W5 C( q( k/ J volatile unsigned char CCR3H; /*!< capture/compare register 3 high */
) A* l8 \ m1 y0 t/ ~ volatile unsigned char CCR3L; /*!< capture/compare register 3 low */
" ~/ f2 _; L' ^, |3 L; N6 H volatile unsigned char CCR4H; /*!< capture/compare register 3 high */" w* f1 u( {6 X, Z
volatile unsigned char CCR4L; /*!< capture/compare register 3 low */
1 }! L$ D O- T" f6 h! X6 V- H8 G volatile unsigned char BKR; /*!< Break Register */' j% b2 ^6 S5 D* }) P3 H7 o7 l
volatile unsigned char DTR; /*!< dead-time register */
* u$ R- e" u I8 h volatile unsigned char OISR; /*!< Output idle register */
8 a w, O2 Y; ^3 Q9 t( _7 u}TIM1_TypeDef;
2 Y$ b" n; d& Q; C" D) F, N% P) k0 J$ h' u( t' |
#define TIM1_BaseAddress 0xFEC0 g% R# B6 ]+ f$ z" R) O# z
0 e9 `2 z1 R6 O0 s( l
#define TIM1 ((TIM1_TypeDef xdata*)TIM1_BaseAddress)
: C. Q5 x$ B1 l) K# q% Y+ K6 Z# e0 }/ N#define PWMA_ENO (*(unsigned char volatile xdata *)0xFEB1)
1 n6 K/ c; I; P' ?#define PWMA_PS (*(unsigned char volatile xdata *)0xFEB2)6 Y X. M* ^# t y1 E) O
* f. h5 x+ A9 S% _- [6 v/ O- J+ N
sfr P0M0 = 0x94;- U" g3 b; V- Z% R
sfr P0M1 = 0x93;
% |$ b3 l, C4 ^2 o) S4 msfr P1M0 = 0x92;
7 x& F) T9 W7 R. i& S' Jsfr P1M1 = 0x91;' c2 P( R# t6 Z: B3 C& z1 m
sfr P_SW2 = 0xba;
1 E9 `4 J0 P7 V4 H& L
6 D: a7 D+ I- nsbit P03 = P0^3;
7 q1 {) j4 t+ ]( A& w3 }) V
5 w( {+ U- Y1 i' Q7 \& @unsigned char cnt_H, cnt_L;
1 m# B+ P& n. `+ {% f1 `( m7 |
! D. l- w, W6 f1 avoid main(void)
: O7 n4 b2 \* F5 C0 {1 P( n. K{9 s, A1 X; @2 X+ G9 M( h- _* ]( K/ o
P_SW2 = 0x80;3 B% N+ P: f+ M, H) V# N" O
8 u7 a0 R3 g# |+ [7 t8 l! L
P1M1 = 0x0f;# U" K5 N a$ G; z8 U( {
P1M0 = 0x00;1 K; r1 i: ^) S6 [
1 K, Q1 Y" p; y2 T- t" K0 z PWMA_ENO = 0x00; //配置成TRGI 的pin需关掉ENO对应bit并配成input
) v8 C3 N: ]* l( u" E3 a0 f" }$ m PWMA_PS = 0x00; //00 WM at P13 Y( N6 r& d( ~7 K0 j
. z3 L' |8 d0 D
TIM1-> PSCRH = 0x00; //预分频寄存器
; P' b% |+ w# C TIM1-> PSCRL = 0x00;
' `6 v9 m! J4 ~. C. Y
& T! R2 f1 c2 V2 n TIM1-> CCMR1 = 0x21; //通道模式配置为输入,接编码器,滤波器4时钟
, f* p7 ?- N: n6 E' W2 j: H TIM1-> CCMR2 = 0x21; //通道模式配置为输入,接编码器,滤波器4时钟; `5 @9 U% q* ?$ u* c' g
$ f! _% G9 h, p. |/ H& {" @+ w( O' Q/ l
TIM1-> SMCR = 0x03; //编码器模式3
) [8 k, F9 F% |! c' D+ [' ]+ \( L7 ?: p" t5 t1 V2 ^' ^! D$ s' T
TIM1-> CCER1 = 0x55; //配置通道使能和极性
6 T: i7 g0 Q4 k/ t TIM1-> CCER2 = 0x55; //配置通道使能和极性
3 O# G* p8 u0 h
3 y' D, Q9 g) W2 s" k9 @ k0 L TIM1-> IER = 0x02; //使能中断
1 V/ M" K x3 _4 ^) g& [! X# [
& S+ G% o/ }0 w6 H6 O TIM1-> CR1 |= 0x01; //使能计数器
V( i. P& t3 Q- `9 @' {4 {* ]1 P4 N9 q( a) ?/ O+ p$ l- I+ z
EA = 1;
) y2 j3 |' Q9 b) w2 s3 j
" n+ ~. g* G/ n while (1);3 H' }2 M6 ^+ D7 `& W
}$ ^# o8 ]' C6 c: [: J
G* Q, o% B8 I; V: i0 x0 v
/******************** PWM中断读编码器计数值**************************/& X. P5 E* \2 n/ N
void PWMA_ISR() interrupt 26% H* L( B3 k; H/ ]8 k; N
{) k$ O/ N9 X9 r9 D/ y
if (TIM1->SR1 & 0X02)
9 M1 D, e$ T/ ^% n {- d5 e- m- e; j" A/ {9 N
P03 = ~P03;1 w: ^, g2 G: O+ [
cnt_H = TIM1->CCR1H;
$ n8 h7 R4 R1 y cnt_L = TIM1->CCR1L;
7 q! h# c, n' F( r TIM1->SR1 &= ~0X02;& F: ^- F, F! A1 Q) _
}; j- a2 U; t/ q( _/ w' v
}
* _- Z* I# V' K) w3 n4 [; K |
|