单片机做一个译码器,使用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;

}
}
展开
 我来答
dfgeoff
2012-04-17 · TA获得超过416个赞
知道小有建树答主
回答量:470
采纳率:50%
帮助的人:436万
展开全部
太复杂,没兴趣看。你这样问不会有结果的。
给你点建议:
1)串口收发程序先调通。
2)将串口收到的,都原封不动的传回电脑。
3)增加译码函数,将译码的结果通过串口传回电脑。
4)控制P0.0口输出指定长度的高、低电平(要用到计时器)。
5)3和4都正确的情况下,自然就可以合并起来用了。
hhu月光大侠
2012-04-17 · 测测控控-CPU/PLC/传感器
hhu月光大侠
采纳数:303 获赞数:1997

向TA提问 私信TA
展开全部
软、硬件都可能出现问题,且要结合起来联调才能确定,再高的高手也无法就看你的程序就能确定问题所在。
首先保证硬件没问题:编个用最简单的程序,试下你需要的功能,正常即可。
硬件没问题后,再看程序是否有问题。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
一万光年MEGn0
2012-04-17 · TA获得超过3712个赞
知道大有可为答主
回答量:4602
采纳率:67%
帮助的人:1071万
展开全部
建议,分步调试解决。
大的任务分解成小任务,一个一个解决。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式