标题: 单片机数码管程序问题 困扰我很长时间了 [打印本页]

作者: 孙韬    时间: 2018-4-5 09:04
标题: 单片机数码管程序问题 困扰我很长时间了
还是昨天的问题,这两个程序分别如下:

这两个程序唯一的差别在于程序一循环有两个,程序二循环是一个。
但是运行的结果是程序一单片机并不变化,程序二单片机可以正常变化数字
而且通过电压表可以看出,虽然程序赋值相同,这两个单片机空闲接口电压根本不一样
这个问题困扰我很长时间了,谁能解答一下?不胜感激!

程序一:
  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. xdata uchar num[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  4. void delay(uchar i)
  5. {
  6. uchar t;
  7. while(i--)
  8. {
  9.   for(t=0;t<120;t++);
  10. }
  11. }
  12. void main()
  13. {
  14.   uchar i;
  15.   while(1)
  16.   {
  17.    for(i=0;i<10;i=i+2)
  18.    {
  19.     P2=num[i];
  20.     delay(500);
  21.    }
  22.    for(i=0;i<10;i++)
  23.    {
  24.     P2=num[i];
  25.     delay(500);
  26.    }
  27.   }
  28. }
  29. 程序二:
  30. #include<reg51.h>
  31. #define uchar unsigned char
  32. uchar code num[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  33. void delay(uchar i)
  34. {
  35. uchar t;
  36. while(i--)
  37. {
  38.   for(t=0;t<120;t++);
  39. }
  40. }
  41. void main()
  42. {
  43. uchar i;
  44. while(1)
  45. {
  46.   for(i=0;i<10;i++)
  47.   {
  48.     P2=num[i];
  49.     delay(500);
  50.   }
  51. }
  52. }
复制代码

3F`EEF74E7N1SQY75UAY(%R.png (127.6 KB, 下载次数: 54)

3F`EEF74E7N1SQY75UAY(%R.png

作者: 孙韬    时间: 2018-4-5 09:12
我参考了一下昨天的回答,发现只要吧Xdata改成data,程序一单片机就正常了,这是怎么回事?

作者: 冰纯    时间: 2018-4-5 11:24
xdata存储类型是片外RAM,此电路中无片外RAM,CPU找不到数据。
作者: 孙韬    时间: 2018-4-5 14:34
冰纯 发表于 2018-4-5 11:24
xdata存储类型是片外RAM,此电路中无片外RAM,CPU找不到数据。

我明白了,谢谢!




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1