找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3124|回复: 0
收起左侧

单片机INT0中断子程序 - 单灯左移3圈 实验 Proteus仿真和源代码

[复制链接]
ID:175881 发表于 2017-4-5 02:53 | 显示全部楼层 |阅读模式
单片机INT0中断子程序的仿真原理图(proteus仿真工程文件可到本帖附件下载):

0.png

单片机源代码:
  1. //==声明区===================================
  2. #include        <reg51.h>                                                  //        定义8x51特殊功能寄存器
  3. #define        LED        P1                                                //        定义LED接至P 1
  4. void  delay1ms(int);                                                //        声明延迟函数
  5. void  left(int);                                                        //        声明单灯左移函数
  6. //==主程序===================================
  7. main()                                                                  //        主程序开始
  8. {        IE=0x81;                                                     //        准许INT 0中断
  9.         LED=0x00;                                                  //        初值=0000 0000,灯全亮        
  10.         while(1)                                                     //        无穷循环,程序一直跑
  11.         {        delay1ms(250);                                         //        延迟250*1m=0.25s
  12.                 LED=~LED;                                          //        LED反相
  13.         }                                                              //        while循环结束
  14. }                                                                      //        主程序结束
  15. //==子程序===================================
  16. /* INT 0的中断子程序 - 单灯左移3圈 */
  17. void  my_int0(void)  interrupt  0                        //        INT0 中断子程序开始
  18. {        unsigned  saveLED=LED;                              //        储存中断前LED状态
  19.         left(3);                                               //        单灯左移3圈
  20.         LED=saveLED;                                            //        写回中断前LED状态
  21. }                                                              //        结束INT0 中断子程序
  22. /* 延迟函数,延迟约x 1ms */
  23. void  delay1ms(int  x)                                     //        延迟函数开始
  24. {        int  i, j;                                                         //        声明整数变数i,j
  25.         for (i=0;i<x;i++)                                              //        计数x次,延迟x 1ms
  26.         for (j=0;j<120;j++);                                        //        计数120次,延迟1ms
  27. }                                                                         //        延迟函数结束
  28. /* 单灯左移函数,执行x圈 */
  29. void  left(int x)                                                     //        单灯左移函数开始
  30. {        int  i,  j;                                                            //        声明变数i,j
  31.         for(i=0;i<x;i++)                                                    //        i循环,执行x圈
  32.         {        LED=0xfe;                                                    //        初始状态=1111 1110,最右灯亮
  33.                 for(j=0;j<7;j++)                                    //        j循环,左移7次
  34.                 {        delay1ms(250);                          
  35.                         LED=(LED<<1)|0x01;                 //        左移1位後,LSB设为1
  36.                 }                                                    //        j循环结束
  37.                 delay1ms(250);                              
  38.         }                                                           //        i循环结束*/
  39. }                                                               //        单灯左移结束

复制代码

该系列源码包含有很多非常经典,代码风格十分规范,而且注释详细的单片机例程,还带仿真,对于MCU学习特别是初学者是很有帮助的,全部源码下载(共几十个项目):http://www.51hei.com/bbs/dpj-80575-1.html

0.png
本例程下载(含proteus仿真工程文件与源码):
单片机INT0中断子程序.rar (12.88 KB, 下载次数: 7)
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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