|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
有没人测试过STC32G单片机的编码器模式。0 G) Q: F& Z U/ n
1.例程 中 P1口选择P1.0 ,P1.2 ,STC32G 没有P1.2 。这么郁闷的事也有。4 o" p+ z# c7 B
2.换到P2 口也没反应。- G6 J+ }4 C, b$ S# ~
3.找到STC8H的编码器历程也不能用。6 `, x# I1 D, o) m3 R; Y1 Z
$ z, D, Q: y; E# B- p下面是STC8H编码器模式历程:
. X! W$ [. u0 U#include "reg51.h"
3 y) z0 x! W" g _1 [#include "intrins.h"
5 K# R4 r+ G+ q1 j
( | B" Q( k- j. ttypedef struct TIM1_struct3 E; d$ I% W' y! F5 W# w
{
' }8 v9 ^9 {# d. ^% G. o volatile unsigned char CR1; /*!< control register 1 */
8 p7 n4 @8 W2 `7 t; ^! w+ D$ ~ volatile unsigned char CR2; /*!< control register 2 */% u# B- j1 a ]! ^! W
volatile unsigned char SMCR; /*!< Synchro mode control register */
& P+ r5 Z% @4 c* p volatile unsigned char ETR; /*!< external trigger register */" Q, S; N; L9 g6 W0 \# _
volatile unsigned char IER; /*!< interrupt enable register*/
4 x0 n- H5 Y" J: p2 |6 x+ b" o volatile unsigned char SR1; /*!< status register 1 */
+ j9 d( J8 |6 k4 l* E volatile unsigned char SR2; /*!< status register 2 */& Q% B( J5 P& v# ?8 F" B2 I- s
volatile unsigned char EGR; /*!< event generation register */
$ d9 o2 J) [4 o volatile unsigned char CCMR1; /*!< CC mode register 1 */2 ~1 l- f+ S, i; F' R L1 T8 t
volatile unsigned char CCMR2; /*!< CC mode register 2 */
8 G% p# k1 U5 Z. u* Y volatile unsigned char CCMR3; /*!< CC mode register 3 */! w2 ?3 {6 T- S. q/ K6 }
volatile unsigned char CCMR4; /*!< CC mode register 4 */3 j. M6 l) w- a" b
volatile unsigned char CCER1; /*!< CC enable register 1 */
: ?! l) w' r5 a volatile unsigned char CCER2; /*!< CC enable register 2 */3 ]' G* k5 v( e* b+ n; n+ N
volatile unsigned char CNTRH; /*!< counter high */( }6 c3 E6 z- Y. Z9 Q
volatile unsigned char CNTRL; /*!< counter low */
& ~, S* y# N) ~; p4 `; y. v) k( q volatile unsigned char PSCRH; /*!< prescaler high */
# I1 D7 i' ^* n5 W# `, \9 p% N volatile unsigned char PSCRL; /*!< prescaler low */
0 q7 R. U2 B; K5 U6 i* Q volatile unsigned char ARRH; /*!< auto-reload register high */
6 J& L( G f3 a' G# F% h8 _ volatile unsigned char ARRL; /*!< auto-reload register low */( Y( r h5 U/ L
volatile unsigned char RCR; /*!< Repetition Counter register */; q) b5 M3 @8 e$ ?
volatile unsigned char CCR1H; /*!< capture/compare register 1 high */3 ]9 I( o7 w" v; ? [% @* X
volatile unsigned char CCR1L; /*!< capture/compare register 1 low */1 o2 e# `% Y& x( M8 [
volatile unsigned char CCR2H; /*!< capture/compare register 2 high */
P9 I' V( u0 m3 u1 B" a0 \ volatile unsigned char CCR2L; /*!< capture/compare register 2 low */
- m w$ r/ I) p, V' { volatile unsigned char CCR3H; /*!< capture/compare register 3 high */
1 j, q- C/ x4 B4 X volatile unsigned char CCR3L; /*!< capture/compare register 3 low */2 B( v b: h, O( R
volatile unsigned char CCR4H; /*!< capture/compare register 3 high */
/ U7 U! S$ Q3 O& p% A$ A volatile unsigned char CCR4L; /*!< capture/compare register 3 low */, }# m5 o# j4 {6 s6 N$ Z
volatile unsigned char BKR; /*!< Break Register */
4 `8 t% e5 W# U- N7 G: T( ~. b volatile unsigned char DTR; /*!< dead-time register */
) h5 J/ Q y' Z$ _. O3 F- C3 c4 ~ volatile unsigned char OISR; /*!< Output idle register */0 P6 E- |3 ?, [' i. E' h" G% K
}TIM1_TypeDef;: I. j8 w% z- d6 \
* w4 Y# w7 Y& A" _8 d
#define TIM1_BaseAddress 0xFEC0
1 z" K n2 x6 R2 f
$ R2 W# C- K" C3 n# {; I9 A#define TIM1 ((TIM1_TypeDef xdata*)TIM1_BaseAddress)' }: @* f8 i j) G' }6 ~+ S
#define PWMA_ENO (*(unsigned char volatile xdata *)0xFEB1): S$ X& e, G( `' o
#define PWMA_PS (*(unsigned char volatile xdata *)0xFEB2)- N% v8 i5 R3 k% t% g
; y3 Y" c/ u$ |' X, |; O- i& h+ Xsfr P0M0 = 0x94;4 n* z2 b5 r; A! |" _
sfr P0M1 = 0x93;
7 k/ S4 F4 F& q8 l: Dsfr P1M0 = 0x92;1 P y5 Z# r- X8 r) K
sfr P1M1 = 0x91;3 V! [2 E0 C: y
sfr P_SW2 = 0xba;
5 H! @. s- s |/ b
0 k& |4 ~- u* p5 E, \: i9 h ?) Zsbit P03 = P0^3;- x, \ L/ q/ U- Q
$ p3 a1 B5 \8 Z9 N9 Q, z qunsigned char cnt_H, cnt_L;
; ]9 N1 j9 R Y" m* h9 T. Q; e" {& Z# v& ?
void main(void)
6 {/ S* _! k) m- b0 s0 [4 d{
" F% }8 \* s% q) b/ n4 O P_SW2 = 0x80;* t4 v( N, Q/ D5 ~4 U; `" E
, A5 p9 K$ a0 T4 d/ m P1M1 = 0x0f;0 H- _* {" t% \. {: g
P1M0 = 0x00;" N9 m3 M7 Z- G. Z+ t& J" T/ ?) [
' J( d* }7 n- c- |
PWMA_ENO = 0x00; //配置成TRGI 的pin需关掉ENO对应bit并配成input: T2 q* X0 f' m7 r3 H
PWMA_PS = 0x00; //00 WM at P1
) H }. Y0 Z, R$ p) _ \' |9 u) T1 W* i& Q d. `
TIM1-> PSCRH = 0x00; //预分频寄存器
- J1 {( Y3 Y2 `% B3 u TIM1-> PSCRL = 0x00;
( t, U/ s+ j# b4 A* E; {
6 {0 k# n6 ]* w+ x) l TIM1-> CCMR1 = 0x21; //通道模式配置为输入,接编码器,滤波器4时钟* N( v9 O0 O' l! T8 T9 K1 s
TIM1-> CCMR2 = 0x21; //通道模式配置为输入,接编码器,滤波器4时钟1 B4 L, q' I; ~3 V# J
$ Y" {7 R/ n2 }. ^) H; x
TIM1-> SMCR = 0x03; //编码器模式3
, \4 ^: z* o& Q
, A6 Q% k9 C0 ]# p$ b TIM1-> CCER1 = 0x55; //配置通道使能和极性
. n* w0 l* W7 o# `0 {9 I# \4 _ TIM1-> CCER2 = 0x55; //配置通道使能和极性' Q. u' l) l" ~* T) l
) S4 N+ y: B; l TIM1-> IER = 0x02; //使能中断
/ z2 H- V7 m8 ?6 a
) q2 @ H5 }4 X5 Y TIM1-> CR1 |= 0x01; //使能计数器- P; D" @& i5 }+ m
6 p o* F; x/ D' `2 ` EA = 1;
" K8 V5 T: x- h' L7 Y% B8 Q' D& y% v6 I2 l
while (1);
; d( B. t- b5 S6 ~ e2 d8 {5 s" F8 N}
* C8 U$ t) o, \4 e/ D; I3 `+ v) D6 X. W$ g9 p
/******************** PWM中断读编码器计数值**************************/
7 b4 {6 j5 D+ O0 f( E$ g- P8 k& Zvoid PWMA_ISR() interrupt 26- V0 d- w1 w* R0 Q4 b5 s1 s8 V
{0 Q- |. M4 v: _) z2 r7 c
if (TIM1->SR1 & 0X02); d! m% v1 Z( w) R4 l6 F$ F
{
) f! [7 N+ P E P03 = ~P03;6 y+ \$ \; Z/ x$ B+ i
cnt_H = TIM1->CCR1H;
* [1 ~4 @" C8 b% d; J& l cnt_L = TIM1->CCR1L;
! y+ Q% l& t' p/ x% Q" k, d TIM1->SR1 &= ~0X02;: ]4 ^' j- k2 B% i" A
}
) w! o( `; x* n, H9 f* w}
3 T/ \* o0 a' q& A( y |
|