标题:
关于单片机定时器PWM信号仿真的问题,波形不出来
[打印本页]
作者:
月碎兰陵
时间:
2018-9-24 09:00
标题:
关于单片机定时器PWM信号仿真的问题,波形不出来
求大神帮忙
1.程序:(图下面)
2.仿真电路
无标题.png
(117.83 KB, 下载次数: 27)
下载附件
2018-9-24 08:56 上传
仿真:
1.png
(81.45 KB, 下载次数: 27)
下载附件
2018-9-24 08:58 上传
单片机源程序:
#include"reg52.h"
#define uchar unsigned char
#define uint unsigned int
uchar COUNT100,PWMCOUNT;
sbit RS=P3^7;
sbit RW=P3^6;
sbit E=P3^5;
sbit PWM=P1^0;
sfr LCDData=0x80;
/************液晶驱动程序********************/
/************延时函数*/
void Delay(uint i)
{
while(i--);
}
/*写指令函数*/
void Write_Instruction(uchar x)
{
Delay(1000);
E=0;
RW=0;
RS=0;
LCDData=x;
E=1;
Delay(20);
E=0;
}
/*写单个数据的函数*/
void Write_Data(uchar x)
{
Delay(1000);
E=0;
RW=0;
RS=1;
E=1;
LCDData=x;
E=0;
}
/*写入一串字符串函数*/
void Write_String(uchar x,uchar *p)
{ Write_Instruction(x);
while(*p!=0x00)
{Write_Data(*p);
p++;
if (x++==0x8f)
{Write_Instruction(0xc0);}
}
}
/*初始化函数*/
void InitLCD(void)
{Write_Instruction(0x38);
Delay(200);
Write_Instruction(0x0e);
Delay(200);
Write_Instruction(0x06);
Delay(200);
}
/************液晶驱动程序结束***********************/
void DISPPWM(uchar addr,uchar p)
{
Write_Instruction(addr);
Write_Data(p/100+0x30);
Write_Data(p%100/10+0x30);
Write_Data(p%100%10+0x30);
Write_Data('%');
}
void main(void)
{
InitLCD();
Delay(0xffff);
COUNT100=0;
PWMCOUNT=50;
Write_String(0x80,"PWM=");
DISPPWM(0x84,PWMCOUNT);
TMOD=0x01;
EA=1;
ET0=1;
TL0=0x66;
TH0=0xfc;
TR0=1;
while(1);
}
void TIME0ISR(void) using 1
{
TL0=0x66;
TH0=0xfc;
COUNT100++;
if(COUNT100==100)
{
COUNT100=0;
}
if(COUNT100<PWMCOUNT)
{
PWM=1;
}
else
{
PWM=0;
}
}
复制代码
仿真波形一直是一条直线,求大神指点迷津,不胜感激
作者:
cjm82
时间:
2018-9-24 10:31
中断函数写法有误
应写为
void Timer0ISR(void) interrupt 1
{
//你的代码
}
作者:
sxhwdz
时间:
2018-9-24 10:39
定时器中断服务程序缺少中断向量:
正确的应该是:
void TIME0ISR(void) using 1 interrupt 1
using 1 是指这个中断函数使用单片机内存中四组工作寄存器中的哪一组, 可以不要
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1