首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

[求助]不能调用子程序是怎么回事?

[求助]不能调用子程序是怎么回事?

我刚开始学习32位单片机的编程,mc68376.结果程序不能调用子程序,把子程序的代码写在main()函数里就可以执行.但却是重复执行.比如我想调用一个简单的通过PORTC点亮发光二极管的子程序:displayled()

unsigned int i;

void display(void);

void  main(void)
  {
 //系统初始化开始,初始化CPU,外部rom,ram,片选
asm(" ORI.W #$2700,SR"); 
asm(" MOVEA.L #$111e00,A7\n");  
    SIMCR=0x60CF;

    SYNCR=0x7F00;
     SYPCR=0xD0;
    CSBARBT=0x0003;
    CSBAR0=0x1003;
    CSBAR1=0x1003;
    CSPAR0=0x00FF;
    CSPAR1=0x0000;
    CSORBT=0x68B0;
    CSOR0=0x3830;
    CSOR1=0x5830;
    ICR=0x0446;
    PITR=0x0052;
    PEPAR=0x00;
    DDRE=0x1F;
     PORTE0=0x00;
     FPAR=0x00;
     DDRF=0x00;
     PORTF0=0x00;
     RAMBAH=0x0011;
    RAMBAL=0x0000;
    RAMMCR=0x0A00;//系统初始化结束

displayled();//调用显示子程序

while(1){}

}

 

void display(void)//通过PORTC口点亮4个发光二极管
  {
 ORTC=0x70;
 for(i=0;i<50000;i++)
 asm(" NOP ");
 ORTC=0xff; 

 }

在程序里调用displayled()却不能让led点亮一段时间再熄灭,led一直是亮的.把子程序的代码直接写到main()却可以点亮一段时间.但是过几秒中又点亮一次,好像这段代码

 ORTC=0x70;
 for(i=0;i<50000;i++)
 asm(" NOP ");
 ORTC=0xFF;

在重复执行.搞不明白这是什么原因?编译器是microtec toolkit for 68k

求大侠指教.

不知道  就这点代码没什么错

怀疑是你别的代码影响到了

一个建议 定义全局变量最好还是给个象征意义的变量名
世界上失败只有一种那就是半途而废。
i并不需要定义为全局变量,直接在display()定义,灯一直亮是不是复位了,检查一下mcu初始化,
不断学习,摸索中进步!
返回列表