标题: 单片机方波程序multisim仿真不起振的问题! [打印本页]

作者: ava741963963    时间: 2018-6-8 23:10
标题: 单片机方波程序multisim仿真不起振的问题!
写了一个方波的程序,仿真的时候发现没有起振,求助大神帮忙看看这段代码

#include"reg52.h"
sbit PWM=P3^0;


sbit C1=P2^4 ;
sbit C2=P2^5;
sbit C3=P2^6 ;

int s;


void timer_set(){TMOD=0x01;
TH0=(65536-100)/256;         
TL0=(65536-100)%256;
ET0=1;
EA=1;
TR0=1;
}




void Time0(void) interrupt 1  {        s+=1;TH0=(65536-100)/256;         
TL0=(65536-100)%256;
if(PWM)PWM=0;   
                 else PWM=1;}

void main(){

while(1){
timer_set();
C1=TR0;
C2=EA        ;
C3=ET0        ;
  }}


把TH0=(65536-100)/256;         
TL0=(65536-100)%256;改成TH0=(65536-10)/256;         
TL0=(65536-10)%256;却可以起振,这是软件问题吗?我用的是multisim仿真的

作者: 湖南孵化    时间: 2020-6-25 17:26
不是没有起振,是multisim比较慢,你看看设置的时间步长,我一般都设成1秒
作者: 湖南孵化    时间: 2020-6-25 17:27
不是不起振,是你的时间步长设置不正确,我一般都设成1秒 ,你试下看

新建位图图像.jpg (488.66 KB, 下载次数: 28)

新建位图图像.jpg

作者: wulin    时间: 2020-6-26 08:37
主程序错误,主循环周期小于中断周期,定时器被重复初始化,永远进不到中断。改小中断周期虽然勉强运行但波形与预想差距很大。正确写法如下:
void main()
{
        timer_set();
        while(1)
        {
                C1=TR0;
                C2=EA;
                C3=ET0;
        }
}




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