|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
按下P55按键,将外部中断0计数值返回给上位机,现在外部中断0进入不了,不能计数,求教。: [# {5 b( e: v3 z. v
Y; V2 F7 V$ r- Q7 I0 }4 o
0 i- p# A8 q4 s#include "config.h"
/ | A- E. Y( ~) Y#include "delay.h"
: p: v U! [& R- |; B#include "uart.h"' G6 Z, a8 b: P9 o
unsigned int INT0_cnt=0, INT1_cnt=0; //测试用的计数变量$ j2 P Z/ T" S, U2 x1 M& Z
sbit key=P5^5;
7 w2 Q3 \' U6 }+ d" \, A1 N5 J/************* 功能说明 **************% E: J6 z5 J9 n/ |7 k
0 J5 m* |6 [1 W0 d******************************************/2 x$ Y- T. o" S
/************* 本地常量声明 **************/
1 U8 o; M) P! G* V( G1 v: K! V, P. I: O
/************* 本地变量声明 **************/" z, y; s# J0 G4 l& K
. r9 J" z- r, M1 J/************* 本地函数声明 **************/
* | q7 L. F/ `) Q* u. ~0 A' w& o! E9 `! H# T" x3 d: L" j
/************* 外部函数和变量声明 *****************/
- \0 {' H: d4 ?1 c8 g0 i" J2 f- @, _% `; m. E
/******************** IO配置函数 **************************/6 A8 N# T7 b+ d
void GPIO_config(void)# j P* z H, ]1 Y7 F7 c; v _
{$ ~% f6 x K( ?, r6 ?
P5M1 = 0x40; //设置准双向口* Y5 @! f' X+ d( `9 K/ v
P5M0 = 0x00;$ c V, P+ x4 n# {2 m5 T& ?5 x
P0M1 = 0; P0M0 = 0; //设置为准双向口
- i% `( E a5 |- XP1M1 = 0; P1M0 = 0; //设置为准双向口- l8 t& w( _1 V/ Y+ m
P2M1 = 0; P2M0 = 0; //设置为准双向口$ \& ^# `# I% H6 `8 ^4 T7 Z4 g
P3M1 = 0; P3M0 = 0; //设置为准双向口8 K, K& H! \% M% k) o
P4M1 = 0; P4M0 = 0; //设置为准双向口
( Z Y! p' y! [- l# l% q! x9 gP5M1 = 0; P5M0 = 0; //设置为准双向口
7 k+ k: ~# {( q" K( U8 A C" rP6M1 = 0; P6M0 = 0; //设置为准双向口
! F% S9 P4 K' ~' \: t7 yP7M1 = 0; P7M0 = 0; //设置为准双向口1 ^) v0 f+ V/ v) P
}) D& z+ r" P$ c" F
/******************** 主函数 **************************/- C% p4 K% b- e3 Q
void main(void)7 {+ n0 t4 j- i3 I5 `0 i
{) ]0 H9 T2 n* W/ u
int count = 0;
" d ^6 c& d lGPIO_config();
0 l* y8 ~" K% H" N9 Z* _" `" r* y% i: NUartinit();
0 G: J: t+ A2 `8 ?8 X [8 `8 i2 B* k3 m0 |8 o
INT0_cnt = 0;8 P& \3 ]2 Y5 t% i" W/ x
INT1_cnt = 0;
* `( L9 F3 I* g8 {2 xIE1 = 0; //外中断1标志位. E" Q4 P4 Q1 U( q
IE0 = 0; //外中断0标志位0 c3 S+ T' }- \8 e% n; W8 v5 L2 P
EX1 = 1; //INT1 Enable1 p( ^/ s, C9 f' Z8 G( d
EX0 = 1; //INT0 Enable
* g7 \* x$ A& b& N# h5 b1 KIT0 = 1; //INT0 下降沿中断 5 q' k8 s h" E+ t u. o w2 m
// IT0 = 0; //INT0 上升,下降沿中断
2 n" G2 E6 s; EIT1 = 1; //INT1 下降沿中断
9 y3 Z5 [4 d( v4 r& A5 a1 |// IT1 = 0; //INT1 上升,下降沿中断 " g. C& g |" V- n
EA = 1; //允许总中断( s9 d7 n& N4 o/ r6 x; S+ t s4 V
while(1)
- W/ L# L" R# r$ ]1 F{
7 q: G3 i5 Z; ]$ b0 J' a+ f: n* m s; V% |) g
$ Z3 J7 d: q$ F! e9 X3 c' U- N! I
SendData(1+0x30);6 q; b5 O, k& `& a: a
: w6 N) e5 `" V8 r7 v! b IF(INT0_cnt >= 65536)
. ]0 q( A5 q/ P INT0_cnt = 0;1 O p: D5 ?, E* \3 A+ @1 K2 l
if(key==0)( ]2 p9 b! c6 _) p$ ]0 F
{3 \8 T# m( ]5 ^! Z
delay_ms(10);
8 V! ]& S4 ^3 Q2 i& J5 ^, ]- T if(key==0)
3 W5 f. q) W) t; v2 m {" q) z+ c, W! q, @5 A+ B
5 ?* h/ l6 Z& d8 S3 i! v- E
while(!key);
2 n+ E8 F' v h; \; a SendData(INT1_cnt/10000+0x30);
_/ {1 U0 j4 W( h" _ x3 l* f SendData(INT1_cnt%10000/1000+0x30);
' E6 |% e& _4 B# R! x* P SendData(INT1_cnt%10000%1000/100+0x30);
2 F+ G9 R) @4 C8 x+ o" e6 { SendData(INT1_cnt%10000%1000%100/10+0x30);
9 p; { M2 y0 e( U2 L SendData(INT1_cnt%10+0x30);
1 j- z) w# b2 b: B9 p SendString("\r\n");+ |, _5 E3 K4 [( Z6 L8 s) N
INT1_cnt=0;
5 H. z, x7 w! u2 |- u + ?8 @$ N/ u& ]1 n
}
8 }& Z, a Z" g0 ?3 }# H 3 t- U' ]: O* d' G1 I* J$ X) L
}
9 q& D* [' b) a6 E ~ 9 D- _' K' w0 D3 T8 G
}
; Y' M1 p6 Y; S}
+ ]& k$ ?3 l7 `0 o/********************* INT0中断函数 *************************/6 G+ @/ p/ _5 i0 H$ [
void INT0_int (void) interrupt 0 //进中断时已经清除标志
' i' u" T1 J; k; B{$ \$ v& V x, v; u
EX0=0;
! ]2 Y! _5 k& P5 [& A5 AINT0_cnt++; //中断+1
+ {2 T* g; j- D( f7 ~1 f0 uEX0=1;
6 \1 y8 c* V, l$ _0 }}
- }# u+ L1 w8 r/********************* INT1中断函数 *************************/
8 Z! B3 p* I; v* }void INT1_int (void) interrupt 2 //进中断时已经清除标志: x2 t! m! _0 I& Z
{
) }4 ^% D. }, x3 ?+ e2 [EX1=0;8 o* V6 u* Y4 F4 o/ V: n0 |" I; a
INT1_cnt++; //中断+18 i6 h+ P' ^" c: u6 e
}
* A* Y% r& Y- J4 X8 Q: Y* X3 N3 A- T1 G
/*********************************************************/
+ S8 }; D/ V* D//#define MAIN_Fosc 22118400L //定义主时钟; P3 K R9 G$ k& O7 E
//#define MAIN_Fosc 12000000L //定义主时钟
: X5 ~9 ^$ Y C+ @#define MAIN_Fosc 11059200L //定义主时钟- x9 O+ |) W R( i' u
//#define MAIN_Fosc 5529600L //定义主时钟7 N! q8 T- a/ z5 J; R4 G8 [
//#define MAIN_Fosc 24000000L //定义主时钟7 _7 N) C; I$ c# O+ K J
#define BaudRate1 9600UL4 h! O) b f, M( H$ Q: X, H
#define Timer2_Reload (65536UL-(MAIN_Fosc/4)/BaudRate1)
6 D2 i- X T1 d; d1 T/*********************************************************/* ^$ \* c5 q/ n: I6 u+ K/ L! H
#include "uart.h"
& S, N% v9 E# e, }: n+ g O) Z( q+ X- O" e) J; |
void UartInit(void) [url=]//9600bps@11.0592MHz[/url]3 A2 D/ L5 }) t! q5 A5 J T3 c4 L, Y
{, Z! A! [) V2 {4 [7 V" e' U6 g3 d2 i
SCON = 0x50; //8位可变波特率5 M+ y# W1 O( B
AUXR&=~(1<<4);
7 f+ Z7 x& F6 U* n1 \0 MAUXR|=0x10;
6 S0 x1 ^9 v. P5 _AUXR|=(1<<2);& {6 e- g5 f9 y) k
T2H =(u8)(Timer2_Reload>>8);& {: A/ y' C6 V1 P( k6 f1 R8 F
T2L=(u8)(Timer2_Reload);) p+ [7 g& E& s6 c* E" S5 P. j' {
AUXR|=(1<<4); //启动
; u2 O2 a7 r6 [7 m4 x9 qREN=1;/ L: ?4 R$ r" k2 }8 |1 R( k# e
ES=1;EA=1;8 f9 J$ _* h. H2 E* y
}+ M, p2 \" m2 p- V, Q% z
/*----------------------------5 m4 ^' W9 o. ]3 G6 e* |/ s
发送串口数据6 `3 ` W7 W7 W! I$ ~
----------------------------*/
5 g# T: O' m9 ?void SendData(unsigned char ch)# |8 w5 ~; o, s
{
9 J t1 ?4 V* v8 ~! U- Q9 X SBUF = ch; //写数据到UART数据寄存器" }, x+ O1 I6 Q& T) q2 D
while(TI == 0);5 a" V4 K( a O: N' E7 p! a
TI = 0;
5 A4 K6 S: X* X1 {( @1 |}
; q0 d9 n) x9 F/*----------------------------& Q9 G) c8 w7 J0 c. B# L5 N' y
发送字符串
' W# F9 n E7 H9 q# B" _( [----------------------------*/
8 b* I# U( ^( m1 h, rvoid SendString(char *s)3 F* f+ N+ q0 i7 h$ n
{1 {5 T+ B; [8 U o
while (*s) //检测字符串结束标志
. y4 U1 {. L' l/ Q4 I {+ R2 ]- D2 l8 F" w. q$ s2 d6 n
SendData(*s++); //发送当前字符, ]6 i; O( ^; _$ _- y! H- d
}
. N/ [* V1 n0 m, W0 B$ V} |
' G h; q+ |( ~: l* C& c |
|