单片机做一个译码器,使用C语言,的程序问题。程序如下,希望各位高手能帮忙看看
希望是从串口输入0~9的数字,然后对应shuzi[],查找其译码,最后,从P0.0口按照译码输出不同长度的高低电平。程序下载到板子上之后,没有任何反应,不知道是哪里错了,...
希望是从串口输入0~9的数字,然后对应shuzi[],查找其译码,最后,从P0.0口按照译码输出不同长度的高低电平。程序下载到板子上之后,没有任何反应,不知道是哪里错了,希望各位高手能帮忙看看。
#include <c8051f310.h> // SFR declarations
#include <stdio.h>
#define SYSCLK 24500000 // 系统时钟24.5Mhz
#define BAUDRATE 9600 // 波特率9600bps
#define INTERRUPT_INT0
void SYSCLK_Init (void);
void UART0_Init (void);
void PORT_Init (void);
void Timer2_Init (int);
void time(int b[]);
void diantime(int j);
static char Byte;
int morse[];
xdata unsigned int shuzi[]={3,3,3,3,3,2, 1,3,3,3,3,2, 1,1,3,3,3,2, 1,1,1,3,3,2,1,1,1,1,3,2, 1,1,1,1,1,2, 3,1,1,1,1,2, 3,3,1,1,1,2, 3,3,3,1,1,2, 3,3,3,3,1,2};
int i;
int a;
int b[];
int j;
int P0_0; //用于之后译码时,判断脉冲长度,INT0
//-------------------------主函数----------------------------------//
void main (void)
{
PCA0MD &= ~0x40; // WDTE = 0 (clear watchdog timer enable
XBR0=0x00; //P0.0=INT0
XBR1=0x10;
UART0_Init();
//---编码-----------------------------//
while(1)
{
a=a-'0';
for(i=6*a;i<=(6*a+6);i++)
{
morse[i]=shuzi[i];
}
time(morse);
}
//串口初始化
void UART0_Init (void)
{
TMOD=0x20;
PCON=0x00;
TH1=0xfd; //波特率9600bps
TL1=0xfd;
ES0=1;
EA =1; //开中断
TR1=1; //开定时器
}
//串口通信
void UART0_Interrupt (void) interrupt 4
{
if (RI0 == 1)
{
RI0 = 0; // Clear interrupt flag
Byte = SBUF0; // Read a character from UART
}
if (TI0 == 1) // Check if transmit flag is set
{
TI0 = 0; // Clear interrupt flag
SBUF0 = Byte; // Transmit to Hyperterminal
}
}
//时间规定控制
void time(int b[])
{
for(i=0;i<=5;i++)
{
if(b[i]==1||b[i]==3)
{
for(;b[i]<1;b[i]--)
{
TMOD=0x00; //点的时间长度为1ms,划的长度为3ms,都用高电平表示
TH0=0x0F8;
TL0=0x05;
TR0=1;
while(TF0!=1)
P0_0=1; //在P0.0处输出脉冲
TF0=0;
}
}
else if(b[i]==2) //可以并到上面去!
{
for(;b[i]<1;b[i]--)
{
TMOD=0x00; //字符间隔为3ms
TH0=0x0F8;
TL0=0x05;
TR0=1;
while(TF0!=1)
P0_0=0;
TF0=0;
}
}
TMOD=0x00;
TH0=0x0F8;
TL0=0x05;
TR0=1;
while(TF0!=1)
P0_0=0;
TF0=0;
}
} 展开
#include <c8051f310.h> // SFR declarations
#include <stdio.h>
#define SYSCLK 24500000 // 系统时钟24.5Mhz
#define BAUDRATE 9600 // 波特率9600bps
#define INTERRUPT_INT0
void SYSCLK_Init (void);
void UART0_Init (void);
void PORT_Init (void);
void Timer2_Init (int);
void time(int b[]);
void diantime(int j);
static char Byte;
int morse[];
xdata unsigned int shuzi[]={3,3,3,3,3,2, 1,3,3,3,3,2, 1,1,3,3,3,2, 1,1,1,3,3,2,1,1,1,1,3,2, 1,1,1,1,1,2, 3,1,1,1,1,2, 3,3,1,1,1,2, 3,3,3,1,1,2, 3,3,3,3,1,2};
int i;
int a;
int b[];
int j;
int P0_0; //用于之后译码时,判断脉冲长度,INT0
//-------------------------主函数----------------------------------//
void main (void)
{
PCA0MD &= ~0x40; // WDTE = 0 (clear watchdog timer enable
XBR0=0x00; //P0.0=INT0
XBR1=0x10;
UART0_Init();
//---编码-----------------------------//
while(1)
{
a=a-'0';
for(i=6*a;i<=(6*a+6);i++)
{
morse[i]=shuzi[i];
}
time(morse);
}
//串口初始化
void UART0_Init (void)
{
TMOD=0x20;
PCON=0x00;
TH1=0xfd; //波特率9600bps
TL1=0xfd;
ES0=1;
EA =1; //开中断
TR1=1; //开定时器
}
//串口通信
void UART0_Interrupt (void) interrupt 4
{
if (RI0 == 1)
{
RI0 = 0; // Clear interrupt flag
Byte = SBUF0; // Read a character from UART
}
if (TI0 == 1) // Check if transmit flag is set
{
TI0 = 0; // Clear interrupt flag
SBUF0 = Byte; // Transmit to Hyperterminal
}
}
//时间规定控制
void time(int b[])
{
for(i=0;i<=5;i++)
{
if(b[i]==1||b[i]==3)
{
for(;b[i]<1;b[i]--)
{
TMOD=0x00; //点的时间长度为1ms,划的长度为3ms,都用高电平表示
TH0=0x0F8;
TL0=0x05;
TR0=1;
while(TF0!=1)
P0_0=1; //在P0.0处输出脉冲
TF0=0;
}
}
else if(b[i]==2) //可以并到上面去!
{
for(;b[i]<1;b[i]--)
{
TMOD=0x00; //字符间隔为3ms
TH0=0x0F8;
TL0=0x05;
TR0=1;
while(TF0!=1)
P0_0=0;
TF0=0;
}
}
TMOD=0x00;
TH0=0x0F8;
TL0=0x05;
TR0=1;
while(TF0!=1)
P0_0=0;
TF0=0;
}
} 展开
3个回答
展开全部
软、硬件都可能出现问题,且要结合起来联调才能确定,再高的高手也无法就看你的程序就能确定问题所在。
首先保证硬件没问题:编个用最简单的程序,试下你需要的功能,正常即可。
硬件没问题后,再看程序是否有问题。
首先保证硬件没问题:编个用最简单的程序,试下你需要的功能,正常即可。
硬件没问题后,再看程序是否有问题。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
建议,分步调试解决。
大的任务分解成小任务,一个一个解决。
大的任务分解成小任务,一个一个解决。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询