找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4411|回复: 2
收起左侧

通过单片机定时器中断产生方波的问题

[复制链接]
ID:301728 发表于 2018-4-14 14:38 | 显示全部楼层 |阅读模式
这是通过定时器T1定时,查询TF1电平高低来产生周期为2ms的方波,在keil中仿真没有错误,但是在proteus仿真中,通过示波器可以看出并没有产生方波,谁知道这是怎么回事吗?
#include<reg51.h>
sbit P1_0=P1^0;//通过P1.0口产生方波,定义一个特殊位
void main()
{
TMOD=0x50;//选用T1的方式1
TH1=0xfc;//高位设定初值
TL1=0x17;//低位设定初值
TR1=1;//启动定时器T1
p1_0=1;//P1.0口为高电平
while(1)
{
  if(TF1)//如果计满,TF1就是1
  {
    TH1=0xfc;//重新装入
    TL1=0x17;//重新装入
    P1_0=!P1_0;//P1.0口电位定时取反
    TF1=0;//将中断标志位清零
  }
}
}
@SJZ%P)C8LZ[KB8XQ5JZJMC.png
_F2WC`[3IPORQ7Q{DO)B29I.png
回复

使用道具 举报

ID:213173 发表于 2018-4-14 20:36 | 显示全部楼层
1.定时器设置错误
2.P1_0大小写混用
#include<reg51.h>
sbit P1_0=P1^0;//通过P1.0口产生方波,定义一个特殊位
void main()
{
        TMOD= 0x10;                //设置定时器T1的方式1
        TH1 = 0xfc;                //设置定时初值
        TL1 = 0x18;                //设置定时初值
        TF1 = 0;                //清除TF1标志
        TR1 = 1;                //定时器1开始计时
//        TMOD=0x50;//选用T1的方式1
//        TH1=0xfc;//高位设定初值
//        TL1=0x17;//低位设定初值
//        TR1=1;//启动定时器T1
//        p1_0=1;//P1.0口为高电平
        P1_0=1;//P1.0口为高电平
        while(1)
        {
                if(TF1)//如果计满,TF1就是1
                {
                        TH1=0xfc;//重新装入
                        TL1=0x18;//重新装入
                        P1_0=~P1_0;//P1.0口电位定时取反
                        TF1=0;//将中断标志位清零
                }
        }
}

回复

使用道具 举报

ID:301728 发表于 2018-4-15 14:58 来自手机 | 显示全部楼层
多谢!改好了!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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