单片机c语言编程的问题?

kill000000 2004-04-29 11:34:35
#include<absacc.h>
#include<reg51.h>
#include<intrins.h>
#define OUT1 XBYTE[0x8100]

unsigned char i;
unsigned char a[22],b[22];
unsigned char j;
bit flag;
void initiate()
{ i=0;
a=[0xa5,0x05,0x5f,0x50,0xf5,0x05,0xf5,0x05,0xf5,0x05,0xf5,0x5a,0x50,0x5f,0x50,0x5f,0x50,0x5f,0x50,0x5f,0x50,0x5f];
b=[200,10,10,10,10,10,10,10,10,10,10,200,10,10,10,10,10,10,10,10,10,10];
j=b[0];
OUT1=a[0];
TMOD=0x11;
TH0=0x76;
TL0=0;
IE=0x82;
TR0=1;
flag=1;
}
void main()
{
bit data flag;
void initiate();
while(flag){};
}
void int_1(void) interrupt 1 using 3
{
EA=0;
TF0=0;
TMOD=0x11;
TH0=0x76;
TL0=0;
TR0=1;
if(!j--)
{
i++;
j=b[i];
OUT1=a[i];
}
EA=1;
}
...全文
52 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
seawave03 2004-05-03
  • 打赏
  • 举报
回复
看j的初值,j=b[0]=200,而数组a的下标只能到21啊!当然越界了!
seawave03 2004-04-30
  • 打赏
  • 举报
回复
i,j是两个函数的变量,若定义为局部变量必须在两个函数中都定义!
数组的操作与标准c语言无多大差别!
fufu89 2004-04-30
  • 打赏
  • 举报
回复
a=[0xa5,0x05,0x5f,0x50,0xf5,0x05,0xf5,0x05,0xf5,0x05,0xf5,0x5a,0x50,0x5f,0x50,0x5f,0x50,0x5f,0x50,0x5f,0x50,0x5f];
有这么给数组赋值的吗?不对。
tjjack 2004-04-30
  • 打赏
  • 举报
回复
那肯定不对了!如果你要在void int_1(void)函数中用i,j。那么你的给他把这两个值传过来。如果你不想传的话,你只能把他们定义成全局变量了。
kill000000 2004-04-30
  • 打赏
  • 举报
回复
if(!j--)
{
i++;
j=b[i];
OUT1=a[i];
}
程序总是报错,程序i++可能越界,应该还要加一个条件才行

OUT1=a[i];
这个语句应该没问题吧,为什么这里也有错误呢?
kill000000 2004-04-30
  • 打赏
  • 举报
回复
不是
我是用的a={0xa5,0x05,0x5f,0x50,0xf5,0x05,0xf5,0x05,0xf5,0x05,0xf5,0x5a,0x50,0x5f,0x50,0x5f,0x50,0x5f,0x50,0x5f,0x50,0x5f};
被我同学该成这样了我没改过来
kill000000 2004-04-29
  • 打赏
  • 举报
回复
i,j为什么非要定义成全局变量,否则void int_1(void)会说ij未定义?
还有数组究竟应该怎么定义,怎么赋初值,是不是非要用指针实现?
按道理程序应该没有什么问题的啊 !!!!!!!!!!!!11

27,510

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧