|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
按下P55按键,将外部中断0计数值返回给上位机,现在外部中断0进入不了,不能计数,求教。" J6 Q7 |7 I( X% v* B* h
( w( C+ A0 [% n8 M! q- Y& d, F& o( B0 J0 Q3 G( C
#include "config.h"
' y6 u& ^* i( S#include "delay.h"
' m- a: G8 m, Q% h! {, t#include "uart.h"
4 X; V4 F/ l- F- gunsigned int INT0_cnt=0, INT1_cnt=0; //测试用的计数变量% X2 s4 s. l, ]
sbit key=P5^5;
4 B; ]2 B! _; {6 X% i' a& h4 J+ M/************* 功能说明 **************9 I$ N- U( Q- f ~8 f; z' n* P, s
- }7 ~6 q' u% u5 N% Y2 g******************************************/
2 a: ^ x9 n: w6 _* w/ p; \5 x/************* 本地常量声明 **************/
- M" [+ v4 H0 b% D3 c# D
- W5 ?. g( N# b$ \, o/************* 本地变量声明 **************/
7 s+ y5 H+ @& \! p1 {% ^2 T; `: c S9 t, ~% e; A: s. M
/************* 本地函数声明 **************/
8 d3 H/ Z% Q# l3 [% V, D( K
- X6 O( X- o, x& \& @/************* 外部函数和变量声明 *****************/1 S4 I# g1 R5 y/ g
& ^4 n0 M" b9 ?; d$ y1 s1 I9 Q/******************** IO配置函数 **************************/1 A) }1 s1 O4 ?" S h, @! Y! v
void GPIO_config(void)
e8 |' }3 J1 y6 j$ |. @* W4 s{. X) s& v9 U: z! i
P5M1 = 0x40; //设置准双向口
. p2 o& ?! P0 `P5M0 = 0x00;
' X( j8 y( x% H PP0M1 = 0; P0M0 = 0; //设置为准双向口
) a! w g8 m# b S, RP1M1 = 0; P1M0 = 0; //设置为准双向口
% c. U- t8 N8 p+ d; H+ A; w: vP2M1 = 0; P2M0 = 0; //设置为准双向口3 @! x X" s- G- ], J6 [- A
P3M1 = 0; P3M0 = 0; //设置为准双向口* J) o, p: Q- _. R6 b" n
P4M1 = 0; P4M0 = 0; //设置为准双向口
( B1 T) ^& w* P6 v0 a/ ^P5M1 = 0; P5M0 = 0; //设置为准双向口
; H W" c1 m2 q/ pP6M1 = 0; P6M0 = 0; //设置为准双向口
7 O% L, }: `9 w" {- [4 eP7M1 = 0; P7M0 = 0; //设置为准双向口) G$ ?9 k: i5 ]$ ~, A% L/ V$ I
}
- B+ C/ F% B- H- G: t/******************** 主函数 **************************/: K6 G& _; N& o7 Q6 z9 h' _
void main(void)6 G- x- M9 _* j) {
{$ ^/ y* j8 \$ P2 c$ I3 x
int count = 0;4 e& K$ {- m! q
GPIO_config();9 t! i2 a+ h; ]; n, T4 ^2 y
Uartinit();+ v* E6 j9 i8 Y& p0 f, n) }! k! x
1 Y4 W! }4 q/ V( Z6 z
INT0_cnt = 0;
# g7 d, w( @& ]. Q9 g6 ~INT1_cnt = 0;" S. U4 n. }4 Q. a+ v+ `
IE1 = 0; //外中断1标志位
7 x7 f) N2 a9 pIE0 = 0; //外中断0标志位9 b, z& B( n# q0 Q+ X
EX1 = 1; //INT1 Enable/ r8 H! G' B' _. }) r
EX0 = 1; //INT0 Enable
2 E2 e0 S1 `6 d: y6 v. A' SIT0 = 1; //INT0 下降沿中断 7 d6 }/ M- f$ h% P
// IT0 = 0; //INT0 上升,下降沿中断
4 I/ K+ q1 K6 I$ G. Y4 BIT1 = 1; //INT1 下降沿中断
% i) e! X7 ~ @" K; I1 e// IT1 = 0; //INT1 上升,下降沿中断
/ Z( `. L6 M' mEA = 1; //允许总中断) @3 U3 R1 Z, }- m$ D2 ~ [
while(1)
3 m9 P6 o& I$ M1 j: y9 R/ `( a: U{$ d/ ^% l5 O9 b1 J
3 H- N4 Y" L% O' V4 y 7 {2 y+ v7 [0 Z0 e; d7 B; a
SendData(1+0x30);+ J3 x$ D' _7 F1 i; |
7 N+ V! Z1 }8 A IF(INT0_cnt >= 65536)) ]1 }, M' b v# c! z
INT0_cnt = 0;/ a" a9 s& ~, e" F5 R
if(key==0)5 u, D- g8 Q. \: @3 W7 d
{; d3 p6 ?: [( ^. R
delay_ms(10);& P W" e. N+ J6 S- E, I
if(key==0)
% |- \+ @1 C; T% t {
& f5 x6 s; l6 Z) h) X . l3 }2 Z# n6 D6 q1 Y& P" h& D
while(!key);
! R/ H" h$ g$ `; R# p" n SendData(INT1_cnt/10000+0x30);, L: C7 p) \* N: T1 E
SendData(INT1_cnt%10000/1000+0x30);
7 N6 S; G1 M! i$ _7 {. n SendData(INT1_cnt%10000%1000/100+0x30);
* U' e/ O9 d |- \2 f- l. F SendData(INT1_cnt%10000%1000%100/10+0x30);# m. W; d0 K7 p1 t0 |
SendData(INT1_cnt%10+0x30);
. J- A9 D2 D; H7 ]/ O4 z SendString("\r\n");( p! l/ N. D& J# F& Q6 Y: I
INT1_cnt=0;
/ a$ L/ Q& Q: Z7 A) f
+ \: k% u% N' M5 v. N' M5 J }9 M" t! A) d3 E) K
' Z% b, u3 u H, @$ K, U3 u: ?
}- l) F0 X! n( _0 R7 }
- T5 |. \* c6 U1 {* C
}
( K3 u, J8 B" E" C7 K3 x}
3 e2 c* k2 {5 L( E) B, i& D' u* ~6 T/********************* INT0中断函数 *************************/" V+ _% O m) w8 \
void INT0_int (void) interrupt 0 //进中断时已经清除标志
) w* b6 n/ s* L8 v: P{% z$ {" W7 B# M; e& a5 e0 ]1 J/ ~6 c9 X( Q
EX0=0;" ]. I: V$ h0 w3 ^
INT0_cnt++; //中断+1
& Q) G( x7 |- B- f6 k; G4 v9 V) nEX0=1;
+ R+ C7 k" R& [5 t( T}) k! t- E1 D: w
/********************* INT1中断函数 *************************/
' x/ D1 } @0 r! G8 O* D, nvoid INT1_int (void) interrupt 2 //进中断时已经清除标志
- t' d( G2 W7 p{4 z4 t, J8 L o! p
EX1=0;
. z' D3 c- L# [+ h2 FINT1_cnt++; //中断+1
3 o1 F9 |' p6 h1 m$ b, N}
0 v) ^/ u, u' Z8 ]% \& e. c* ~& ]' W; x" i
/*********************************************************/
" h3 F# k, ?0 v//#define MAIN_Fosc 22118400L //定义主时钟
( q* k8 K i2 m4 z//#define MAIN_Fosc 12000000L //定义主时钟9 _5 g. ?0 I/ A; H
#define MAIN_Fosc 11059200L //定义主时钟
2 S% J, ]' \% r, F; d) H//#define MAIN_Fosc 5529600L //定义主时钟
* }, L! K8 t$ g2 I//#define MAIN_Fosc 24000000L //定义主时钟+ A# d! I( D& ^4 W' k6 V1 a1 ?
#define BaudRate1 9600UL m; M/ a0 }( A7 B @1 E0 S* F
#define Timer2_Reload (65536UL-(MAIN_Fosc/4)/BaudRate1). |$ j. v- ]1 R
/*********************************************************/" \7 R- L8 h. b `: y
#include "uart.h"
0 O. O8 }9 p7 C% j! V0 b2 j' |: G& A& i2 l |" h9 y+ r7 J
void UartInit(void) [url=]//9600bps@11.0592MHz[/url]/ g M7 y! S4 B$ ]
{
) J& ^0 [/ h' X" zSCON = 0x50; //8位可变波特率2 ?0 l, M0 i* S. X
AUXR&=~(1<<4); ) K1 y$ V. s) J
AUXR|=0x10;
1 @: V! `. D/ Y9 j; g+ x! WAUXR|=(1<<2);
5 J1 c2 |5 a, wT2H =(u8)(Timer2_Reload>>8);9 W) F, h, K5 [$ E
T2L=(u8)(Timer2_Reload);( x9 P" v7 b/ L
AUXR|=(1<<4); //启动4 \$ ?! ]1 R1 [9 z9 p1 n9 _
REN=1;4 w3 k: i6 X. I P+ ^- |
ES=1;EA=1;
& R; ]* {7 i( u( a$ P9 H- S}
5 w- H. N( f5 a; q/*----------------------------
N/ T) a! ?/ s2 T2 e9 T+ E6 R发送串口数据
- _: p1 }) g# R1 ]----------------------------*/4 h' i" [- }$ e
void SendData(unsigned char ch)! L. G, V! s* r: U0 l' S {, v
{
* r/ e! \- X3 V/ x- }2 m: Q3 a8 N" ~; h SBUF = ch; //写数据到UART数据寄存器
% h0 R: Q# [5 R6 a9 L, X! z! f while(TI == 0);; p8 G& H- R e. g! G" j
TI = 0;1 h9 F; M' D t: D4 J
}4 z9 [- ^* D5 {& h
/*----------------------------' w# V# X* w5 j9 \* ?' [) `* C6 G) x
发送字符串
- {2 V, r( ?( i, |----------------------------*/
0 A& j! f! Q X7 G( N6 F E ?2 rvoid SendString(char *s)2 x8 J6 j S8 J" z/ D5 W" N
{
4 v( ^ L7 A! G9 j% J while (*s) //检测字符串结束标志
! m5 o/ p i. W6 g z {
' k, g3 ~9 V& H SendData(*s++); //发送当前字符
2 Y4 ]4 J3 ~1 w) N9 n( j, c }
8 z, x' X" K$ n} | # |1 i" \3 \, }2 W; p/ ?
|
|