找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4012|回复: 17
收起左侧

哦 无语 为什么分开没问题 合起来就有问题 (编程问题,我是新手)

[复制链接]
ID:65766 发表于 2014-9-12 20:21 | 显示全部楼层 |阅读模式
#include<reg52.h>
        #include<intrins.h>          
#define uchar unsigned char
#define uint unsigned int
uchar temp;
void delay(uint);
void main()
{
   temp=0xfe;
  P1=temp;
   while(1)
  {
          delay(500);
           temp=_crol_(temp,1);
        P1=temp;

  }
}
   void delay (uint z)
  {
   uint x,y;
   for(x=z;x>0;x--)
   for(y=110;y>0;y--);

  }这是第一个,下面还有
填了一个数码管的之后就产生不了效果了
这是合起来的效果的程序
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
uchar aa,num,temp;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x6f,0x7f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delay(uint);
void main()
{ num=0;
  aa=0;
TMOD=1;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
temp=0xfe;
P1=temp;
  wela=1;                                                                                     
  P0=0xc0;
  wela=0;
  dula=1;
  P0=table[0];
  dula=0;
  while(1)
  {
          delay(500);
           temp=_crol_(temp,1);
        P1=temp;
        if(aa==40)
                {        num++;
                        aa=0;
                if(num==16)
                        num=0;       
                dula=1;
                P0=table[num];
                dula=0;
                 }
        }          

}
   void delay(uint x)
   {
           uint i,j;
        for(i=x;i>0;i--)
        for(j=110;j>0;j--);
       
   }
   void time() interrupt 3
   {
            TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;               
                   aa++;
   }

这个程序到底哪儿错了
回复

使用道具 举报

ID:63656 发表于 2014-9-12 21:21 | 显示全部楼层
你是想把这两个程序合起来运行吗
回复

使用道具 举报

ID:65766 发表于 2014-9-12 22:28 | 显示全部楼层
2842687945 发表于 2014-9-12 21:21
你是想把这两个程序合起来运行吗

不是 第二个就是合起来的那个 就运行不起来了 我不知道哪儿错了
回复

使用道具 举报

ID:65766 发表于 2014-9-12 22:28 | 显示全部楼层
2842687945 发表于 2014-9-12 21:21
你是想把这两个程序合起来运行吗

不是 第二个就是合起来的那个 就运行不起来了 我不知道哪儿错了
回复

使用道具 举报

ID:65766 发表于 2014-9-12 22:28 | 显示全部楼层
2842687945 发表于 2014-9-12 21:21
你是想把这两个程序合起来运行吗

不是 第二个就是合起来的那个 就运行不起来了 我不知道哪儿错了  无语
回复

使用道具 举报

ID:64817 发表于 2014-9-12 22:46 | 显示全部楼层
time() interrupt 3 你看是不是3应当改为1呀。。ET0=1;TR0=1;应当是定时器中断T0
相应设置,定时器中断T0的中断源自然优先级排序为1。time() interrupt 1。

评分

参与人数 1威望 +40 黑币 +40 收起 理由
admin + 40 + 40 回帖助人的积分奖励!!!!

查看全部评分

回复

使用道具 举报

ID:19715 发表于 2014-9-12 22:52 | 显示全部楼层
通信-冷 发表于 2014-9-12 22:28
不是 第二个就是合起来的那个 就运行不起来了 我不知道哪儿错了  无语

程序分成两个单独看,
单独第2个程序是跑时间的,明明就存在问题。
先把这个问题处理好
回复

使用道具 举报

ID:63656 发表于 2014-9-12 22:57 | 显示全部楼层
void delay(uint);你这个是函数声明吗?错啦哦,这是一个错误
回复

使用道具 举报

ID:63656 发表于 2014-9-12 23:00 | 显示全部楼层
void time() interrupt 3这个也错了?void time() interrupt 1这样才对(定时器0是第1种中断源)

评分

参与人数 1威望 +40 黑币 +40 收起 理由
admin + 40 + 40 回帖助人的积分奖励!!!!

查看全部评分

回复

使用道具 举报

ID:63656 发表于 2014-9-12 23:13 | 显示全部楼层
你想实现什么功能
回复

使用道具 举报

ID:65766 发表于 2014-9-14 12:04 | 显示全部楼层
abeimao 发表于 2014-9-12 22:46
time() interrupt 3 你看是不是3应当改为1呀。。ET0=1;TR0=1;应当是定时器中断T0
相应设置,定时器中断T0 ...

哦哦 这个是错的
回复

使用道具 举报

ID:65766 发表于 2014-9-14 12:05 | 显示全部楼层
2842687945 发表于 2014-9-12 22:57
void delay(uint);你这个是函数声明吗?错啦哦,这是一个错误

这个声明哪里错了吗 请指导
回复

使用道具 举报

ID:65766 发表于 2014-9-14 12:05 | 显示全部楼层
2842687945 发表于 2014-9-12 23:00
void time() interrupt 3这个也错了?void time() interrupt 1这样才对(定时器0是第1种中断源)

哦 这个事错了 还有吗
回复

使用道具 举报

ID:65766 发表于 2014-9-14 12:09 | 显示全部楼层
2842687945 发表于 2014-9-12 23:13
你想实现什么功能

流水灯以一秒的间隔流动 数码管用中断的方式以1,2-a,b,c..的顺序流动 大概是一秒吧 记得不亲了
回复

使用道具 举报

ID:63656 发表于 2014-9-14 12:55 | 显示全部楼层
本帖最后由 2842687945 于 2014-9-14 12:59 编辑
通信-冷 发表于 2014-9-14 12:05
这个声明哪里错了吗 请指导

void delay(uint x),你漏x了(我复制过你的程序编译,没有错误,就是不知你想实现什么功能)如果你思路对了,应该没有问题了
回复

使用道具 举报

ID:65766 发表于 2014-9-14 16:30 | 显示全部楼层
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
uchar aa,num,temp;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x6f,0x7f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delay(uint x);
void main()
{ num=0;
  aa=0;
TMOD=1;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
temp=0xfe;
P1=temp;
  wela=1;                                                                                     
  P0=0xc0;
  wela=0;
  dula=1;
  P0=table[0];
  dula=0;
  while(1)
  {
          delay(500);
           temp=_crol_(temp,1);
        P1=temp;
        /*if(aa==40)
                {        num++;
                        aa=0;
                if(num==16)
                        num=0;       
                dula=1;
                P0=table[num];
                dula=0;
                 }*/
        }          

}
   void delay(uint x)                                                                                                                                  
   {
           uint i,j;
        for(i=x;i>0;i--)
        for(j=110;j>0;j--);
       
   }
   void time() interrupt 1
   {
            TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;               
                   aa++;
                 if(aa==40)
                {        num++;
                        aa=0;
                if(num==16)
                        num=0;       
                dula=1;
                P0=table[num];
                dula=0;
                 }
   }
这是正确的程序  它实现的流水灯以一秒的间隔流动 数码管用中断的方式以1,2-a,b,c..的顺序流动 大概是一秒吧 记得不亲了 看了正确的程序与错误的 组要错误是数码管的程序不应写在主函数流水灯的下面 这样会导致数码管的程序无法运行 我突然有个疑问就是程序运行的顺序是从上到下吧 主函数与外部函数的顺序又是怎样呢 比如说上面的 void time() interrupt 1
   {
            TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;               
                   aa++;
                 if(aa==40)
                {        num++;
                        aa=0;
                if(num==16)
                        num=0;       
                dula=1;
                P0=table[num];
                dula=0;
                 }
   }这一段程序 他和主函数运行的顺序又是怎样呢 还是说可以同时运行
回复

使用道具 举报

ID:64817 发表于 2014-9-15 00:05 | 显示全部楼层
先运行这一段
void main()
{ num=0;
  aa=0;
TMOD=1;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256  到这里时间到了,进入中断函数,这时中断和主函数中循环同时运行,单片机的定期器和中断是单片机另外一系统,他不占用单片机的计算资源。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表