|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
按下P55按键,将外部中断0计数值返回给上位机,现在外部中断0进入不了,不能计数,求教。
6 z) y, k( R/ W8 E# U6 @$ _8 T
- R8 t6 W3 d7 k$ y; t' c& f* h; c0 S5 A" a: I
#include "config.h"
7 M- z J/ ~+ j9 \' {* P+ `& g#include "delay.h". U) q' r! P( e2 R4 Z3 Q
#include "uart.h"' n2 @# d' ^! p; K; B2 S, U9 x
unsigned int INT0_cnt=0, INT1_cnt=0; //测试用的计数变量9 t1 ~, e8 Y' q; ?: d
sbit key=P5^5;
$ C; J" v! r7 ~: _" m/************* 功能说明 **************
# v2 W0 q3 } @/ X# f2 N% @$ T+ t
7 ^9 @9 d4 [, t' x0 L******************************************/
: H- o) `, P) z/************* 本地常量声明 **************/
# N. M6 R; l& G# g, A5 n$ n; W3 U( P u0 \
/************* 本地变量声明 **************/
1 J' f- s$ F B& z; @5 w
5 R5 L* t" X3 @; Y6 B& G2 F/************* 本地函数声明 **************/
: T4 J2 d, N, S" N- `5 z8 e |3 N6 u" r% F+ U
/************* 外部函数和变量声明 *****************/& \+ H. r. i( f# i4 f
5 X ~8 q8 R R2 k2 I p0 I% C
/******************** IO配置函数 **************************/
: m3 A2 w, L4 i" |& I$ [void GPIO_config(void)
! l4 `: P9 N& T- q{9 e& B/ [( u$ d. Q
P5M1 = 0x40; //设置准双向口0 C2 j& E- E2 b
P5M0 = 0x00;
' f, u+ q$ E- A: I4 {" G \P0M1 = 0; P0M0 = 0; //设置为准双向口
! b$ R2 I2 T9 }3 F' F/ }0 lP1M1 = 0; P1M0 = 0; //设置为准双向口
- q+ L4 y4 W2 l1 u! K3 S0 \P2M1 = 0; P2M0 = 0; //设置为准双向口. D# u; m6 Y! C
P3M1 = 0; P3M0 = 0; //设置为准双向口3 f$ ]0 l# a: x& ~" z) `: F# ^
P4M1 = 0; P4M0 = 0; //设置为准双向口$ w& S# f. Z% I) w: f
P5M1 = 0; P5M0 = 0; //设置为准双向口
0 y, s% V/ x7 e2 KP6M1 = 0; P6M0 = 0; //设置为准双向口
6 o0 t) X4 f$ k4 }3 S/ ] h, d" [* WP7M1 = 0; P7M0 = 0; //设置为准双向口
/ r3 X1 b* _6 G. F( k* l% p}8 ^6 W _8 H' g4 C( K8 b B
/******************** 主函数 **************************/
0 _# ], h* j' q9 {6 G; Qvoid main(void)
5 Z7 N; C5 P- |9 N0 y{
9 m3 J' p" K ~ Q+ o9 x3 Hint count = 0;
% t. D- ]6 D% T, w/ d3 |& y3 zGPIO_config();
* r1 ^) @8 N# y; ^3 J; v7 r0 yUartinit();
' i0 @& z3 V, B3 z6 c( I- q# \8 l* ]. ?" P" b
INT0_cnt = 0;! [# Q9 J! {8 ~. `$ E# l: J
INT1_cnt = 0;
; v, y4 J0 D- h+ y$ S- n2 lIE1 = 0; //外中断1标志位
7 a* P" ]/ `- ^/ ~ @' G, L3 ]$ a: HIE0 = 0; //外中断0标志位& z4 u" \. G* T- Z
EX1 = 1; //INT1 Enable
, j1 S2 E0 J1 K- f* OEX0 = 1; //INT0 Enable
' l$ e. [1 `1 ?3 {2 i- I6 v- V% K& U7 oIT0 = 1; //INT0 下降沿中断 * G7 }$ f7 z/ F7 m: w& @7 q
// IT0 = 0; //INT0 上升,下降沿中断
4 A: Q' B# Z1 O' Z6 jIT1 = 1; //INT1 下降沿中断
: o: g$ P2 H/ T# Y! M// IT1 = 0; //INT1 上升,下降沿中断 1 M8 X7 a# @0 @2 A; ~
EA = 1; //允许总中断$ p- x# l5 x7 N1 P7 q- b
while(1)2 d$ A" V3 O4 ?9 v: `% V* W/ V
{1 K% S6 z$ v; @) F0 x( V. C
|! E o) n9 h7 q! x! I4 U4 F
4 E9 t3 n) R3 @, ~& x) @+ \6 r
SendData(1+0x30);7 v' G6 L' t( K
3 b! v7 O9 v4 V/ x! @* Q+ x
IF(INT0_cnt >= 65536)' a7 v& y0 Y7 W! X1 L4 i
INT0_cnt = 0;' x+ K$ p% k- F6 m- A# G% g# G
if(key==0)$ p% }: w+ R" ^' [
{ g2 S: c9 [: O: j4 f0 G/ p
delay_ms(10);7 w" }$ N, Y3 y4 M! X
if(key==0)
% b7 Z. `1 J# ^- B1 Z8 {$ a {
v, `" k: a6 |: H( q! d
! F$ x0 W2 |1 y, |9 l x+ U while(!key);( ]: O" r$ v" Q0 A" E% i2 h# @4 V$ b
SendData(INT1_cnt/10000+0x30);$ W2 S( \3 W$ H/ e9 a$ N
SendData(INT1_cnt%10000/1000+0x30);8 }; ^+ H* t* \' g; V X, _6 S
SendData(INT1_cnt%10000%1000/100+0x30);6 G1 ]/ i5 q @; W* q, f
SendData(INT1_cnt%10000%1000%100/10+0x30);
M% N, R N s" a- ^ SendData(INT1_cnt%10+0x30);% o; b* {" W0 m7 _* x8 f
SendString("\r\n");
4 v+ k6 H# d' s INT1_cnt=0;. @: L' L' u! @
: v% O: H. `5 j: Y
}: \7 q9 E4 ?( ?# F" n+ l
0 O3 s: B0 L4 D' j% [ }8 U3 [4 i0 G& m: L6 `
" G1 U N2 g$ G. K5 R5 Z3 ~' s
}
/ n4 u$ W/ S; c' l# P}
7 R9 c2 z3 x9 M3 T* Z U6 G6 p+ ?& w/********************* INT0中断函数 *************************/; P* X( m6 x: c: e- d
void INT0_int (void) interrupt 0 //进中断时已经清除标志3 V2 j0 D: q7 M$ H* u: E
{; b2 V6 V: ^8 z: d# B# b4 H
EX0=0;% T) N- g$ O2 Z5 }; e
INT0_cnt++; //中断+1
" R; `' o7 {# x- w& S& i% hEX0=1;
% V; Y5 u1 C, j8 D}
7 H$ k; M2 ^1 t& ^. E7 c# R/ ^6 Y/********************* INT1中断函数 *************************/% w/ w" X$ j; I( X
void INT1_int (void) interrupt 2 //进中断时已经清除标志- C. V% v- E# J. h
{
0 i9 l& }5 z$ K) kEX1=0;
: D2 H3 [8 m- ^$ z- R" T; S1 pINT1_cnt++; //中断+10 y0 O# O$ y+ C( @. c }. W
}
; ^7 }) i4 F0 }/ W! X5 i7 c/ d0 @: `' @+ L
/*********************************************************/
, ~4 D9 V. j* v0 D( [//#define MAIN_Fosc 22118400L //定义主时钟
; L' p0 o, {* U- n" l//#define MAIN_Fosc 12000000L //定义主时钟7 \9 I; R6 s ~/ c1 V6 W1 s0 R
#define MAIN_Fosc 11059200L //定义主时钟7 B* j/ O0 c: y( t9 D3 a3 `
//#define MAIN_Fosc 5529600L //定义主时钟
3 e6 ^6 E5 L- y- n# P% ]2 \* F//#define MAIN_Fosc 24000000L //定义主时钟
3 f4 h; b. V1 P#define BaudRate1 9600UL
+ F# K& \4 W- Y X! [: G#define Timer2_Reload (65536UL-(MAIN_Fosc/4)/BaudRate1)
! o$ y6 K: x- `! j* j" r/*********************************************************/
, v$ |# p* s7 S3 }3 @#include "uart.h". L, ^3 w4 j9 V9 k3 S" a8 T
4 C& Z+ ~, ~% i2 L) U: [
void UartInit(void) [url=]//9600bps@11.0592MHz[/url]2 |, e+ p% q8 [ x
{
+ N" S: R% e( K3 U; Q% P7 U: d+ KSCON = 0x50; //8位可变波特率" O- D4 d* C' F$ z3 Q& ^+ o
AUXR&=~(1<<4); 3 E, \! s# N; X" P! R9 B2 k6 T
AUXR|=0x10; ; l/ R3 ^8 K: M% j M
AUXR|=(1<<2);0 w. `$ c2 |5 S. r) _& v: v
T2H =(u8)(Timer2_Reload>>8);
$ [3 N; z+ S" l$ _6 V* sT2L=(u8)(Timer2_Reload); H+ ~* _) C; Y) j
AUXR|=(1<<4); //启动/ _& f1 D% Y4 k; H
REN=1;8 V d3 G0 R; E- @, U
ES=1;EA=1;) S2 i9 U: q4 o/ c: C6 i) o0 g
}
# Y- F& O$ z3 B- v, N/*----------------------------1 J, L! K, {# I9 ?
发送串口数据
9 J+ m9 K2 G" v+ e) E# U----------------------------*/) S- j$ j5 n. @! U7 G
void SendData(unsigned char ch): }3 V* U7 k& I! i2 v
{
( v8 l. g1 {! ]. K- [ SBUF = ch; //写数据到UART数据寄存器4 s' j+ ?0 N4 v: o. }9 `6 i# H
while(TI == 0);( o% f% N2 \$ {8 X# H2 F
TI = 0;, C1 s9 j$ ^5 H. p1 P+ {% \
}6 O" C$ J. b# V) o/ o
/*----------------------------
/ N& s5 i7 u4 f' g* F发送字符串
0 l* z$ M7 j, t# v3 ]2 J3 f; J----------------------------*// Z( j, @4 G- x9 d' v4 W: w& {+ v3 d
void SendString(char *s) B0 l# M# c3 q9 b7 {+ C7 u: E
{$ b, B7 [6 K9 S/ S, }; F' j5 d
while (*s) //检测字符串结束标志
+ i! y0 z# b! z" o {
) [" [2 E" B; k6 x3 w; q, u+ J SendData(*s++); //发送当前字符# M1 B6 E3 n7 R0 B$ E2 ~
}
. i0 `0 C6 w, r5 {9 {7 E+ P: {} |
# y" O( C8 }- _+ `$ r* @( V } |
|