|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
有没人测试过STC32G单片机的编码器模式。
" Q! y2 c" T' z1.例程 中 P1口选择P1.0 ,P1.2 ,STC32G 没有P1.2 。这么郁闷的事也有。- i8 D5 S& U+ `
2.换到P2 口也没反应。
/ S, B" N6 g$ d+ v! l7 v3.找到STC8H的编码器历程也不能用。
" _0 \ T( w2 l' P* T" E1 F x8 E2 w3 L, C
下面是STC8H编码器模式历程:/ U) n8 L8 p1 n, w
#include "reg51.h"; \# f- `( m! a
#include "intrins.h"" V4 ^/ Y* }0 F5 |' J
6 Q' q. c, A+ k/ ?/ b, o
typedef struct TIM1_struct$ W1 L4 E: K0 ]1 I0 n
{
7 S+ V# \" m y volatile unsigned char CR1; /*!< control register 1 */
! |( l$ T1 y* q5 u8 F volatile unsigned char CR2; /*!< control register 2 */! [; U% I: U, P; [% J N* f
volatile unsigned char SMCR; /*!< Synchro mode control register */) ^% }$ _/ L% `0 |/ z b
volatile unsigned char ETR; /*!< external trigger register */
5 x0 s% n" {# U; r; J volatile unsigned char IER; /*!< interrupt enable register*// Y4 ? r6 F/ F' C" C3 K
volatile unsigned char SR1; /*!< status register 1 *// ^7 t8 v+ M# b; T; d. S
volatile unsigned char SR2; /*!< status register 2 */
: f6 x! e! k. J2 h volatile unsigned char EGR; /*!< event generation register */0 c( j% ~0 P: Z- Z- I& F( H& E, e
volatile unsigned char CCMR1; /*!< CC mode register 1 */
( o% o3 @6 z @. F, i volatile unsigned char CCMR2; /*!< CC mode register 2 */
2 s( ], \7 N( P3 r" H. S8 @ volatile unsigned char CCMR3; /*!< CC mode register 3 */! {. ?6 s9 c2 C- n& @* P
volatile unsigned char CCMR4; /*!< CC mode register 4 */
" @ P6 |% _7 @* u volatile unsigned char CCER1; /*!< CC enable register 1 */
8 L6 \# a; T4 l volatile unsigned char CCER2; /*!< CC enable register 2 */! D, r3 ], t, x! j" g0 T7 `+ Z
volatile unsigned char CNTRH; /*!< counter high */
2 o q1 q7 A0 W3 f. i$ s volatile unsigned char CNTRL; /*!< counter low */
$ M: H7 E( h$ y2 b volatile unsigned char PSCRH; /*!< prescaler high */
# q2 E0 ]" o7 R. G& K1 y volatile unsigned char PSCRL; /*!< prescaler low */
+ J& v$ ]0 t4 U' K4 U; I6 f volatile unsigned char ARRH; /*!< auto-reload register high */
2 Z8 r$ M P9 i& S( ]8 x2 _ volatile unsigned char ARRL; /*!< auto-reload register low */3 F; x Y# ^) `, H$ r
volatile unsigned char RCR; /*!< Repetition Counter register */
5 Y/ Y2 Z9 J) N4 u. } ^0 E volatile unsigned char CCR1H; /*!< capture/compare register 1 high */* ]/ S' J2 i& Y A
volatile unsigned char CCR1L; /*!< capture/compare register 1 low */
" h6 W8 \$ b, V) n Y$ H0 | volatile unsigned char CCR2H; /*!< capture/compare register 2 high */
. f r+ n( }9 k8 p5 _$ ` volatile unsigned char CCR2L; /*!< capture/compare register 2 low */0 z. j/ ^6 g; o- m4 s
volatile unsigned char CCR3H; /*!< capture/compare register 3 high */
/ ]7 P8 U1 M. f+ w6 S6 i; t volatile unsigned char CCR3L; /*!< capture/compare register 3 low */
2 v: _4 l! }# e. [) M) i volatile unsigned char CCR4H; /*!< capture/compare register 3 high */
2 n1 E% | _% T. F volatile unsigned char CCR4L; /*!< capture/compare register 3 low */
- b* _5 O7 u1 E; E1 @" ?5 X volatile unsigned char BKR; /*!< Break Register */ b9 V) [3 `: g6 a$ V
volatile unsigned char DTR; /*!< dead-time register */
' N% Q" r" h3 B; X$ {) d, B: | volatile unsigned char OISR; /*!< Output idle register */! {5 w; ]4 D5 Z' N3 a
}TIM1_TypeDef;
/ w. R3 y. n% v5 y# \: ]# }
1 [5 N- ]$ J$ \7 q2 |( ^! x2 m#define TIM1_BaseAddress 0xFEC06 k4 _- N" n% c
1 G- d$ u" l) J1 _. ~
#define TIM1 ((TIM1_TypeDef xdata*)TIM1_BaseAddress)
, F: x8 f/ Y0 W' x% ]1 l#define PWMA_ENO (*(unsigned char volatile xdata *)0xFEB1)
/ B1 y B+ c ?* p3 o6 n#define PWMA_PS (*(unsigned char volatile xdata *)0xFEB2) w' V, a% R2 E3 q8 C9 F
1 ^$ [' b/ u- x5 u9 y3 `$ h/ ~sfr P0M0 = 0x94;
8 O3 A1 _" |7 @sfr P0M1 = 0x93;, m/ Z- o/ ^4 j
sfr P1M0 = 0x92;, C1 ~5 w+ h1 J, d, @
sfr P1M1 = 0x91;
7 ~) M/ m% v4 I( b8 Msfr P_SW2 = 0xba;
9 Z% W* b; d& F$ _4 j) j5 v/ p
sbit P03 = P0^3;+ a* K' Y4 a" ~% v. f
" K ~5 P3 }) F* Y! M/ Qunsigned char cnt_H, cnt_L;! G# e* ~% M4 V2 j7 C
/ k: K7 v5 _0 f( |9 a
void main(void)
. y7 ?3 }/ K1 e. N{
2 d; v1 Z+ |8 p% o- R9 e& Y P_SW2 = 0x80;+ X! L7 b' j& K$ Z% B) w- [* n2 C
# U5 o9 q! }7 }* b P1M1 = 0x0f;* s4 D; ]& u* I/ T9 O
P1M0 = 0x00;
% h; P- b7 ~8 Y
( P: U. `3 n1 N, s* L PWMA_ENO = 0x00; //配置成TRGI 的pin需关掉ENO对应bit并配成input$ J p f9 m) C
PWMA_PS = 0x00; //00 WM at P1% z2 O/ j$ \1 F: {& @: z
; N/ ^2 c3 ?8 _: p1 _
TIM1-> PSCRH = 0x00; //预分频寄存器
% c2 U$ y. W9 D. D" J TIM1-> PSCRL = 0x00;
/ B: m, E8 S6 i w' M0 d. m
' Z% `! Y. o- ?. t. S( {7 t TIM1-> CCMR1 = 0x21; //通道模式配置为输入,接编码器,滤波器4时钟1 g' L5 [% Z( H2 x. E& u
TIM1-> CCMR2 = 0x21; //通道模式配置为输入,接编码器,滤波器4时钟
3 b3 s* j) n' P+ Y1 L" }
3 G5 y% E) O* ~7 ]0 c TIM1-> SMCR = 0x03; //编码器模式3
3 Q% B& v3 l- n2 p
- c0 r- f3 l" n* u6 I) s TIM1-> CCER1 = 0x55; //配置通道使能和极性
+ [8 Y- `2 e- a" h5 t3 t9 l9 u3 R5 O TIM1-> CCER2 = 0x55; //配置通道使能和极性$ A* ^3 W9 k' o7 h* `3 K
, L2 j% h# E9 L5 } TIM1-> IER = 0x02; //使能中断$ t, x' v& }# m& I' m' \* E) n h
, Y& |( N8 ?" C$ Y3 Q6 V7 H8 Q
TIM1-> CR1 |= 0x01; //使能计数器
$ t7 f2 c+ l6 N9 z% K* f; [) Y+ I. K2 I* Y; }0 G
EA = 1;
' p8 [+ `; @. h/ f! v$ W, `6 i# L6 J; q" Z; X) ^6 D3 F7 z
while (1);
% a1 C7 ?8 O4 z! r}
8 t6 x- \4 k4 e6 ?
* ]0 ~0 b z# p) E/******************** PWM中断读编码器计数值**************************/2 i. V$ g$ Z5 A- D
void PWMA_ISR() interrupt 26
) n8 d& y H; c6 ]1 A{
% F. ]# c! j# ~. [& g$ U4 I if (TIM1->SR1 & 0X02)
. c Y t8 S' S) \- P+ G% e {' |" N# H q6 f
P03 = ~P03;4 H4 z4 T2 I) R( N6 Z7 |
cnt_H = TIM1->CCR1H;
! _5 O1 M3 D# W5 s. \, ?1 } cnt_L = TIM1->CCR1L;* E+ c/ x9 F5 ^7 c
TIM1->SR1 &= ~0X02;7 P7 g, M" _" x8 g" O
}
! V7 _; j! d L' E4 l' m5 m' g}9 G7 D0 V; C" ~& j
|
|