找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1991|回复: 2
打印 上一主题 下一主题
收起左侧

关于单片机定时器PWM信号仿真的问题,波形不出来

[复制链接]
跳转到指定楼层
楼主
求大神帮忙

1.程序:(图下面)

2.仿真电路


仿真:


单片机源程序:
  1. #include"reg52.h"
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. uchar COUNT100,PWMCOUNT;
  5. sbit RS=P3^7;
  6. sbit RW=P3^6;
  7. sbit E=P3^5;
  8. sbit PWM=P1^0;
  9. sfr LCDData=0x80;
  10.   /************液晶驱动程序********************/
  11.   /************延时函数*/
  12.   void Delay(uint i)
  13.   {
  14.     while(i--);
  15.   }
  16.   /*写指令函数*/
  17.   void Write_Instruction(uchar x)
  18.   {
  19.    Delay(1000);
  20.    E=0;
  21.    RW=0;
  22.    RS=0;
  23.    LCDData=x;
  24.    E=1;
  25.    Delay(20);
  26.    E=0;
  27.    }
  28.   /*写单个数据的函数*/
  29.   void Write_Data(uchar x)
  30.   {
  31.    Delay(1000);
  32.    E=0;
  33.    RW=0;
  34.    RS=1;
  35.    E=1;
  36.    LCDData=x;

  37. E=0;
  38. }
  39. /*写入一串字符串函数*/
  40. void Write_String(uchar x,uchar *p)
  41. { Write_Instruction(x);
  42.   while(*p!=0x00)
  43. {Write_Data(*p);
  44.   p++;
  45.   if (x++==0x8f)
  46.   {Write_Instruction(0xc0);}
  47. }
  48. }
  49. /*初始化函数*/
  50. void InitLCD(void)
  51. {Write_Instruction(0x38);
  52. Delay(200);
  53. Write_Instruction(0x0e);
  54. Delay(200);
  55. Write_Instruction(0x06);
  56. Delay(200);
  57. }

  58. /************液晶驱动程序结束***********************/
  59. void DISPPWM(uchar addr,uchar p)
  60. {
  61. Write_Instruction(addr);
  62. Write_Data(p/100+0x30);
  63. Write_Data(p%100/10+0x30);
  64. Write_Data(p%100%10+0x30);
  65. Write_Data('%');
  66. }
  67. void main(void)
  68. {
  69. InitLCD();
  70. Delay(0xffff);
  71. COUNT100=0;
  72. PWMCOUNT=50;
  73. Write_String(0x80,"PWM=");
  74. DISPPWM(0x84,PWMCOUNT);
  75. TMOD=0x01;
  76. EA=1;
  77. ET0=1;
  78. TL0=0x66;
  79. TH0=0xfc;
  80. TR0=1;
  81. while(1);
  82. }
  83. void TIME0ISR(void) using 1
  84. {
  85. TL0=0x66;
  86. TH0=0xfc;
  87. COUNT100++;
  88. if(COUNT100==100)
  89.   {
  90.   COUNT100=0;
  91.   }
  92.   if(COUNT100<PWMCOUNT)
  93.   {
  94.   PWM=1;
  95.   }
  96.   else
  97.   {
  98.   PWM=0;
  99.   }
  100. }
复制代码

仿真波形一直是一条直线,求大神指点迷津,不胜感激

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:388197 发表于 2018-9-24 10:31 | 只看该作者
中断函数写法有误
应写为
void Timer0ISR(void) interrupt 1
{
    //你的代码
}

评分

参与人数 2黑币 +50 收起 理由
admin + 20 回帖助人的奖励!
月碎兰陵 + 30 很给力!

查看全部评分

回复

使用道具 举报

板凳
ID:387733 发表于 2018-9-24 10:39 | 只看该作者
定时器中断服务程序缺少中断向量:
正确的应该是:

void TIME0ISR(void) using 1  interrupt 1   

using 1 是指这个中断函数使用单片机内存中四组工作寄存器中的哪一组, 可以不要

评分

参与人数 1黑币 +30 收起 理由
月碎兰陵 + 30 很给力!

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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