找回密码
 立即注册

QQ登录

只需一步,快速开始

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

不清楚写的程序为什么错了?

  [复制链接]
回帖奖励 50 黑币 回复本帖可获得 50 黑币奖励! 每人限 1 次
跳转到指定楼层
楼主
ID:278709 发表于 2018-3-28 20:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

#include<reg52.h>//想要程序实现间隔1s的led闪烁

#define uchar unsigned char

#define uint unsigned int

uintnum;

sbitled1=P2^2;

voidmain()

{

TMOD|=0x01;

TH0=(65535-50000)/256;

TL0=(65535-50000)%256;

EA=1;

ET0=1;//开启定时器中断

TR0=1;//打开定时器

while(1);

  

  }



voidtimer0() interrupt 0

{


TH0=(65535-50000)/256;//机器周期是1微秒

TL0=(65535-50000)%256;//定时器溢出,需要重置初值

num++;

if(20==num)

    {

      num=0;

      led1=~led1;

        }


  }



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

使用道具 举报

沙发
ID:203000 发表于 2018-3-29 08:11 | 只看该作者
修改如下:

#include<reg52.h>//想要程序实现间隔1s的led闪烁

#define uchar unsigned char

#define uint unsigned int

uint num;

sbit led1=P2^2;

void main()

{

TMOD|=0x01;

TH0=(65535-50000)/256;

TL0=(65535-50000)%256;

EA=1;

ET0=1;//开启定时器中断

TR0=1;//打开定时器

while(1);

  

  }



voidtimer0() interrupt 0

{


TH0=(65535-50000)/256;//机器周期是1微秒

TL0=(65535-50000)%256;//定时器溢出,需要重置初值

num++;

if(20==num)

    {

      num=0;

      led1=~led1;

        }


  }
回复

使用道具 举报

板凳
ID:203000 发表于 2018-3-29 08:16 | 只看该作者
4行:uintnum;改为:uint num;
5行:sbitled1=P2^2;改为;sbit led1=P2^2;
6行:voidmain() 改为:void main()
回复

使用道具 举报

地板
ID:164602 发表于 2018-3-29 08:33 | 只看该作者
只有一个错误!!!!!
就是中断服务程序中的中断号错了。定时器0的中断号是1,不是0。所以你的程序没有执行中断服务程序。
我改了那一处,就好了。
回复

使用道具 举报

5#
ID:298715 发表于 2018-3-29 09:50 | 只看该作者
#include<reg52.h>//想要程序实现间隔1s的led闪烁  #define uchar unsigned char  #define uint unsigned int  uint num;  sbit led1=P2^2;  void main()  {  TMOD|=0x01;  TH0=(65535-50000)/256;  TL0=(65535-50000)%256;  EA=1;  ET0=1;//开启定时器中断  TR0=1;//打开定时器  while(1);        }    voidtimer0() interrupt 0  {   TH0=(65535-50000)/256;//机器周期是1微秒  TL0=(65535-50000)%256;//定时器溢出,需要重置初值  num++;  if(20==num)      {        num=0;        led1=~led1;          }     }
回复

使用道具 举报

6#
ID:298715 发表于 2018-3-29 09:50 | 只看该作者
注意格式啊
回复

使用道具 举报

7#
ID:298772 发表于 2018-3-29 10:58 | 只看该作者
注意格式,还有定时器0 中断是0么 不是1么
回复

使用道具 举报

8#
ID:295783 发表于 2018-3-29 17:15 | 只看该作者
注意格式 该空格的空格 中断时0 自己改改看吧
回复

使用道具 举报

9#
ID:299036 发表于 2018-3-29 18:50 来自手机 | 只看该作者
注意格式
回复

使用道具 举报

10#
ID:283987 发表于 2018-3-29 19:27 | 只看该作者
voidmain() 改为:void main()
回复

使用道具 举报

11#
ID:299070 发表于 2018-3-29 19:56 | 只看该作者
注意格式
回复

使用道具 举报

12#
ID:289143 发表于 2018-3-29 19:58 | 只看该作者
#include<reg52.h>//想要程序实现间隔1s的led闪烁

#define uchar unsigned char

#define uint unsigned int

uint num;

sbit led1=P2^2;

void main()

{

TMOD|=0x01;

TH0=(65535-50000)/256;

TL0=(65535-50000)%256;

EA=1;

ET0=1;//开启定时器中断

TR0=1;//打开定时器

while(1);

  

  }



void timer0() interrupt 1

{


TH0=(65535-50000)/256;//机器周期是1微秒

TL0=(65535-50000)%256;//定时器溢出,需要重置初值

num++;

if(20==num)

    {

      num=0;

      led1=~led1;

        }


  }
回复

使用道具 举报

13#
ID:299302 发表于 2018-3-30 10:27 | 只看该作者
4行:uintnum;改为:uint num; 5行:sbitled1=P2^2;改为;sbit led1=P2^2; 6行:voidmain() 改为:void main()   希望能帮到您
回复

使用道具 举报

14#
ID:283063 发表于 2018-3-30 11:42 来自手机 | 只看该作者
是1,不是0
回复

使用道具 举报

15#
ID:238556 发表于 2018-3-30 16:07 | 只看该作者
首先你的定义的时候要注意格式:
sbitled1=P2^2;应该改为;sbit led1=P2^2;
uintnum;应该改为:uint num;(你用的是1s中断,其实用uchar就可以了)
voidmain()应该 改为:void main()
你写程序编译的时候哟普错误你双击错误光标会自动跳到错误附近,这样比较容易找出错误。
回复

使用道具 举报

16#
ID:299540 发表于 2018-3-30 17:39 | 只看该作者
interrupt 1(不是0)
回复

使用道具 举报

17#
ID:278709 发表于 2018-3-31 07:40 | 只看该作者
HC6800-ES-V2.0 发表于 2018-3-29 08:33
只有一个错误!!!!!
就是中断服务程序中的中断号错了。定时器0的中断号是1,不是0。所以你的程序没有 ...

没错,我改了那个就好了,真的感谢
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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