Solo necesito contar las interrupciones que ocurren en el pin 3.2 y luego imprimir ese valor en UART. No sé por qué el siguiente programa no funciona como se esperaba. Cualquier ayuda será apreciada. Gracias de antemano.
#include<reg51.h>
#include<stdio.h>
#include<stdlib.h>
/* function prototypes */
void delay(unsigned int ms);
void putc1( chr);
void initialize(void);
void record_wind(unsigned char c);
void puts1(char* p);
// global variables declared
unsigned char buf[8]={0},*ptr;
int c=0,i=0;
sbit P3_2 = P3^2;
/* delay function to create a delay of 1 sec */
void delay(const unsigned int ms)
{
unsigned int x;
unsigned int y;
for (x = 0; x < ms; x++)
{
for (y = 0; y <= 113; y++)
;
}
}
void puts1(char* p)
{
char *temp = p; /*temp pointer so that the actual pointer is not displaced */
while(*temp != 0x00)
{
putc1(*temp);
temp++;
}
}
/* function to detect the wind speed */
void windspeed_read( void ) interrupt 0
{
EA=0;
c = c+1;
sprintf(buf,"%d",c);
EA=1;
}
/*init the TIMER and etc*/
void initialize()
{
SCON = 0x50; /*SCON: mode 1, 8-bit UART, enable receive */
TMOD |= 0x20; /*TMOD: timer 1, mode 2, 8-bit */
TH1 = 0xFD; /*TH1: for 9600 baud */
TR1 = 1; /*TR1: timer 1 run */
}
/* to print the character in UART and serial window*/
void putc1(chr)
{
SBUF = chr;
while(TI==0); /*Wait until the character is completely sent */
TI=0; /*Reset the flag */
}
/* main function */
void main()
{
initialize();
IE = 0x81;
EX0 = 1;
EA = 1;
while(1)
{
*ptr = buf;
delay(10000);
puts1(ptr);
}
}
El código anterior no cuenta las interrupciones e incrementa los valores HEX. Necesito incrementar en decimal (0,1,2,3, .. 100 o más) e imprimir en UART.