|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
按下P55按键,将外部中断0计数值返回给上位机,现在外部中断0进入不了,不能计数,求教。
) J' \# t0 T' T K3 P* [5 Y
, z2 M% C' b& G6 z- {2 j& k, C! R6 s% f2 q& f0 `: ? w
#include "config.h"
2 ~) ?1 Z& N6 V5 D2 N#include "delay.h"
" L6 I( p% N( ]6 R#include "uart.h"4 n. @ P8 P& t; v6 a" l
unsigned int INT0_cnt=0, INT1_cnt=0; //测试用的计数变量* ^% Z) w! D7 Q% V, [
sbit key=P5^5;/ ^: A: ?8 o5 {# d& @; m
/************* 功能说明 **************
* C2 S& b8 ]% v1 N3 x& Q9 h
6 u, W5 h1 P9 W% }6 D3 F" ]******************************************/
8 R: A' y& H$ B+ p7 g/************* 本地常量声明 **************// j# x( N& V, S; v+ p1 \8 G' n0 O
* }- `) h q) v+ s+ N$ t/************* 本地变量声明 **************/- ^0 L6 m* }! ?6 L+ e
2 f b W3 s3 q" i/ m
/************* 本地函数声明 **************/4 w/ f7 P3 d3 ~$ j$ g
' c" G# v* w M. n3 G/************* 外部函数和变量声明 *****************/
% q: r- N1 [$ E) @9 s! u9 i: b9 [1 @5 J* z$ w7 |2 k" w
/******************** IO配置函数 **************************/
3 Y# @- s+ g/ p% r7 y3 { rvoid GPIO_config(void)# u {$ w8 m7 z
{' F: q. a$ r9 ~+ E5 N
P5M1 = 0x40; //设置准双向口
1 X g' ~) _9 @1 ?6 F" MP5M0 = 0x00;
& k( _; N1 G3 I( ]/ HP0M1 = 0; P0M0 = 0; //设置为准双向口' @0 F Y. T7 n
P1M1 = 0; P1M0 = 0; //设置为准双向口
% N4 X; h4 f/ v& l4 a' cP2M1 = 0; P2M0 = 0; //设置为准双向口
: p' d0 o! M2 `$ \- }P3M1 = 0; P3M0 = 0; //设置为准双向口
! [; M8 X V3 u, Q+ s8 [0 {* ?P4M1 = 0; P4M0 = 0; //设置为准双向口, p+ E; k! x# \1 E9 w
P5M1 = 0; P5M0 = 0; //设置为准双向口0 t0 A! _" }' `! o
P6M1 = 0; P6M0 = 0; //设置为准双向口
" s8 S- Q& c k5 R6 d" }) |P7M1 = 0; P7M0 = 0; //设置为准双向口) G: z+ z3 Y2 h, @
}
+ V1 k# X/ G2 e d# h/******************** 主函数 **************************/7 G, C# w# s% B2 h# Y
void main(void)
" Y3 M/ i0 P) l{/ ^2 b: ?: s1 @2 w$ }5 ~. y
int count = 0;# N3 w5 s' n) }. o
GPIO_config();
4 v4 g7 E1 u3 s5 t; pUartinit();
/ b' B8 w5 x) O7 m- c V# ~& J: y: F0 d6 _7 t q% [
INT0_cnt = 0;
/ k- V$ {4 C4 ]% G% B4 iINT1_cnt = 0;
; P; A, H* i3 \, C$ I2 b- }IE1 = 0; //外中断1标志位: s6 N8 p1 O$ r
IE0 = 0; //外中断0标志位
( C I8 d( w. `! d' T6 yEX1 = 1; //INT1 Enable
" ^/ }% t! R+ H' d- zEX0 = 1; //INT0 Enable! Z9 k5 U! h& i. o8 E
IT0 = 1; //INT0 下降沿中断 - {+ [. a. g6 n8 T
// IT0 = 0; //INT0 上升,下降沿中断 6 {( @: N% Z8 e% w b! o
IT1 = 1; //INT1 下降沿中断 / l7 w7 |( S1 p+ ^) U
// IT1 = 0; //INT1 上升,下降沿中断
& x- Z7 c- I T$ ]. DEA = 1; //允许总中断
* R: ^! Q# D) V1 @6 F5 vwhile(1)" U- Q8 U* S4 {: O
{3 e& N k. v! _7 f4 Z7 `! i
: ]' x9 r) R3 a1 j# D" f% s
! O, a5 @: {0 ^( j% T
SendData(1+0x30);
. z$ i9 b! u( ^ 9 q3 h4 n: e2 z3 A2 L
IF(INT0_cnt >= 65536)1 X4 v# Q i/ U+ r2 X
INT0_cnt = 0;/ D- q( F5 v9 W, Z2 {3 D
if(key==0)
3 S( n2 Z' ]! D$ j+ P0 f2 N% ] {; {+ f7 |2 i$ {/ O
delay_ms(10);
' d6 Z' u! e4 M) v if(key==0)* Y4 Y/ q. J! P$ [+ |- p
{0 @! u! q3 b0 v) z; y( q
: ?( J& `# [- v/ i5 d; w( Z
while(!key);/ \3 V& d$ o& U# Q K( ]+ H
SendData(INT1_cnt/10000+0x30);2 l8 R/ A3 }8 t+ e' B( @6 k3 R/ q; G
SendData(INT1_cnt%10000/1000+0x30);5 M5 g- S* l. S8 x+ |* j- i' W O" B
SendData(INT1_cnt%10000%1000/100+0x30);
* m# G. @2 i' P( q SendData(INT1_cnt%10000%1000%100/10+0x30);
3 s0 R" ^8 Y& Q# w9 u- A SendData(INT1_cnt%10+0x30);) s9 G( ^3 G6 j' a: U
SendString("\r\n");
7 I' _, C( h1 V# ^1 Q INT1_cnt=0;4 n; u. i# B& [, k5 f! {, O
. d- r7 [5 ^4 ?2 _& q
}
2 J6 J4 o# r2 Y5 E 0 K0 s& T; w! v4 x, ~
}# b0 T( {/ ^/ r7 P9 K
h' s8 ` I! s1 W7 Z9 m* S( D
}
3 e) P( v% ^2 f' ~; ^}5 I# l# X" k# B
/********************* INT0中断函数 *************************/
* p9 z$ [7 k- J) H' Ovoid INT0_int (void) interrupt 0 //进中断时已经清除标志
/ m6 `% V5 r/ `% M& [& {& _3 T F{
; [6 Q+ c5 i# U$ M' SEX0=0;
~2 x2 ^% M" l4 C; j! cINT0_cnt++; //中断+1
: E/ l1 [2 \) h2 ]% rEX0=1;
. X0 k1 O( M! e8 b' J}/ r! ?8 B) J& A" |, }$ G* @0 h+ \
/********************* INT1中断函数 *************************/$ Y( k. o; T$ A( a9 ?1 a* P: e
void INT1_int (void) interrupt 2 //进中断时已经清除标志
# C; d& p- h+ U' I# r0 Z& h9 Y. K{
, P. k& C9 a! ]0 zEX1=0;$ Q+ u! c$ e! s3 r/ g
INT1_cnt++; //中断+1- i3 y. J9 i6 B2 o# G) T
}/ w2 o( B5 {, p# ~: T: u- K/ N
$ u v, Z& h4 n3 t# |6 Z/*********************************************************/# z7 ]( x \$ p, K# V
//#define MAIN_Fosc 22118400L //定义主时钟0 L! }# ~$ g `4 q; `% @) ^ D
//#define MAIN_Fosc 12000000L //定义主时钟# ]9 G: n* I5 _
#define MAIN_Fosc 11059200L //定义主时钟' ^' P* P/ U m( u
//#define MAIN_Fosc 5529600L //定义主时钟4 Q+ V$ {2 k' ~7 ^* [- N6 Z3 r6 B
//#define MAIN_Fosc 24000000L //定义主时钟
/ Z9 w+ }! B6 o* E6 W2 @1 w#define BaudRate1 9600UL& [" ~2 p W8 p" ~
#define Timer2_Reload (65536UL-(MAIN_Fosc/4)/BaudRate1)) a( R- |# B& ]: e/ z7 ^
/*********************************************************/% g9 W! R: ]' x) F
#include "uart.h"
3 l0 m2 o% O( W1 \8 N9 `2 t
) q- U% I0 F8 }) i) D( r7 r5 Avoid UartInit(void) [url=]//9600bps@11.0592MHz[/url]
% x" d% ^* P8 B9 k' {{/ w# p; o) O# m9 E
SCON = 0x50; //8位可变波特率' ~/ c& T' z/ r8 d
AUXR&=~(1<<4); & J( z0 F8 L0 r' ?0 P' c6 M
AUXR|=0x10; 3 H! J. C+ |9 b
AUXR|=(1<<2);0 ^- z. h9 A' j3 V2 N
T2H =(u8)(Timer2_Reload>>8);
1 f% i. P, G7 ]! o$ Z) nT2L=(u8)(Timer2_Reload);
* U: z: r# K' b: \" \AUXR|=(1<<4); //启动
) `8 S! G: S J/ gREN=1;/ \, x& x4 q. o O3 l9 n0 D( @
ES=1;EA=1;
) \, i3 C Q% \}8 `0 |: O5 u: K- `, j H# Y1 ^0 p) k( s
/*----------------------------! _+ J% W5 J6 I* w* Y# x
发送串口数据
* e( J0 \% f( d; j2 L+ _* R----------------------------*/( k% \7 I1 {7 [2 F+ Y: {+ m6 T2 P
void SendData(unsigned char ch)
1 O0 _% p. r y" p" o* z1 @6 Y{
( N+ d* L) x+ v) i SBUF = ch; //写数据到UART数据寄存器- h3 a+ e1 H' e) B
while(TI == 0);8 i. s$ R- K7 K( j" Y
TI = 0;
5 p, h' s$ D. Q! m v}7 }" j' }5 K( _1 q9 N+ L6 z
/*----------------------------7 k |* }/ Q. \1 P; g7 ^ ^
发送字符串
+ c2 J% O8 {, h' U----------------------------*/
1 n( t" }# x: n3 Gvoid SendString(char *s)
9 v4 Q' Y; |1 T; ~) A; l, n{8 U* I6 u: \6 B
while (*s) //检测字符串结束标志7 N' s) _. V9 P5 M2 u9 h; `
{: d% ? Z6 ?* J7 G- C6 S
SendData(*s++); //发送当前字符. X% I4 o+ D4 m+ }' ?; H+ I
}
& d$ Q9 u+ z* T% s} | - y# j7 P) R% t7 |" C
|
|