找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1479|回复: 9
收起左侧

单片机代码中断为什么始终没起作用?哪位大神帮忙看一下

[复制链接]
ID:237065 发表于 2018-3-24 23:54 | 显示全部楼层 |阅读模式

原理图

原理图
  1. #include<reg52.h>                                  //正常情况下流水灯正常显示,按下按键K3,后8个流水灯同时亮灭一次,时间间隔是0.5s

  2. #define u8 unsigned char
  3. #define u16 unsigned int

  4. sbit k3=P3^2;

  5. void delay0_5s()           //T0 工作方式1 0.5s延时
  6. {
  7. u8 i;
  8. for(i=0;i<10;i++)
  9. {
  10. TH1=0x3c;
  11. TL1=0xb0;
  12. TR0=1;
  13. while(!TF0);
  14. TF0=0;
  15. }


  16. }



  17. void delay( u8 t)
  18. {
  19. u8 i;
  20.   for(i=0;i<t;i++)
  21.   delay0_5s();
  22. }      

  23. void int_0() interrupt 0
  24. {
  25. delay();
  26. if(k3==0)
  27. {
  28. P2=0xff;
  29. delay0_5s;
  30. P2=0x00;
  31. delay0_5s;
  32. }

  33. }      

  34. void Intoint()
  35. {
  36.    IT0=1;                   //触发方式
  37. EX0=1;
  38. EA=1;
  39. }

  40. void main()
  41. {
  42. u8 i,w;
  43.   void Intoint();
  44. TMOD=0x01;


  45. while(1)
  46. {
  47.   w=0x01;
  48.   for(i=0;i<8;i++)
  49.    {
  50.            P2=~w;
  51.         w<<=1;
  52.            delay(2);

  53.    }


  54. }


  55. }


复制代码


回复

使用道具 举报

ID:272719 发表于 2018-3-25 00:36 | 显示全部楼层
开了中断么
回复

使用道具 举报

ID:213173 发表于 2018-3-25 06:47 | 显示全部楼层
这么多错误能通过编译??
回复

使用道具 举报

ID:155507 发表于 2018-3-25 07:03 | 显示全部楼层
  1. #include<reg52.h>                                  //正常情况下流水灯正常显示,按下按键K3,后8个流水灯同时亮灭一次,时间间隔是0.5s

  2. #define u8 unsigned char
  3. #define u16 unsigned int

  4. sbit k3=P3^2;

  5. void delay0_5s()           //T0 工作方式1 0.5s延时
  6. {
  7.         u8 i;
  8.         for(i=0;i<10;i++)
  9.         {
  10.                 TH0=0x3c;  // TH1=0x3c;
  11.                 TL0=0xb0;  // TL1=0xb0;
  12.                 TR0=1;
  13.                 while(!TF0);
  14.                 TF0=0;
  15.         }

  16. }


  17. void delay( u8 t)
  18. {
  19.         u8 i;
  20.         for(i=0;i<t;i++)
  21.         delay0_5s();
  22. }      

  23. void int_0() interrupt 0  using 1 // IT0外部中断0(中断号0,外部触发管脚3.2)
  24. {
  25.         delay();
  26.         if(k3==0)
  27.         {
  28.                 P2=0xff;
  29.                 delay0_5s();
  30.                 P2=0x00;
  31.                 delay0_5s();
  32.         }

  33. }      

  34. void Intoint()
  35. {
  36.         EA=1; //全局中断开
  37.         EX0=1; //外部中断0开
  38.         IT0=1;                   //触发方式 //下降沿触发

  39. }

  40. void main()
  41. {
  42.         u8 i,w;

  43.         //TMOD=0x01;
  44.         TMOD |= 0x01;          //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响       
  45.         TH0=0x3c;
  46.         TL0=0xb0;
  47.         Intoint();
  48.         ET0=1;           //定时器中断打开
  49.         //TR0=1;           //定时器开关打开

  50.         while(1)
  51.         {
  52.                 w=0x01;
  53.                 for(i=0;i<8;i++)
  54.                 {
  55.                         P2=~w;
  56.                         w<<=1;
  57.                         delay(2);
  58.                 }

  59.         }

  60. }
复制代码
回复

使用道具 举报

ID:287575 发表于 2018-3-25 09:33 | 显示全部楼层
第一下边程序部分有毛病:
void main()
{
u8 i,w;
  void Intoint();  //此处取消void,否则编译器不执行改语句,中断未初始化,当然不能中断了
TMOD=0x01;

第二你给定时器1赋初值,运行的却是定时器0,
void delay0_5s()           //T0 工作方式1 0.5s延时
{
u8 i;
for(i=0;i<10;i++)
{
TH1=0x3c;  //应改为TH0
TL1=0xb0;  //TL0
TR0=1;
while(!TF0);
TF0=0;
}

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:111634 发表于 2018-3-25 09:43 | 显示全部楼层
先看看别人正确的案例,自己对照查错。不要刊出一堆错误,让别人查错,你以为别人吃饱了撑着?
回复

使用道具 举报

ID:287575 发表于 2018-3-25 09:44 | 显示全部楼层
第三 delay()中没带参数,delay0_5没带括号
void int_0() interrupt 0
{
delay();
if(k3==0)
{
P2=0xff;
delay0_5s;
P2=0x00;
delay0_5s;
}

第四你要设是电平触发中断,还是边沿触发中断,把按键放到中断中用法有问题,因为要用延时取抖,影响中断的实时性

评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:237065 发表于 2018-3-25 15:56 | 显示全部楼层

开了啊,没报错
回复

使用道具 举报

ID:237065 发表于 2018-3-25 15:57 | 显示全部楼层
wulin 发表于 2018-3-25 06:47
这么多错误能通过编译??

没报错啊,keil4
回复

使用道具 举报

ID:237065 发表于 2018-3-25 16:10 | 显示全部楼层
zhangxiaozi 发表于 2018-3-25 09:44
第三 delay()中没带参数,delay0_5没带括号
void int_0() interrupt 0
{

多谢大佬,括号和void的错误找着了,T0和T1的没找到,
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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