久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 18760|回復: 0
打印 上一主題 下一主題
收起左側

實現單片機程序的暫停和執行的兩種方法

[復制鏈接]
跳轉到指定樓層
樓主
ID:408519 發表于 2019-5-17 18:44 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
兩種方法實現程序的暫停和啟動,我的外部中斷0已經被別的功能占用了,所以只能用外部中斷1了
函數功能:程序無論執行到哪里按下暫停鍵,程序暫停;再按下啟動鍵程序接著暫停的地方執行。以流水燈為例
CPU:STC89C52單片機
方法一:最常規方法用外部中斷1
  1. #include <reg52.h>
  2. #include <intrins.h>
  3. void delayms(unsigned int);
  4. unsigned char led;
  5. //key1=P3^3;//外部中斷1,也就是暫停鍵;
  6. sbit key2=P3^4;//啟動鍵
  7. bit flag=1;

  8. void main(){
  9.         EA=1;//開總中斷
  10.         EX1=1;//打開外部中斷1
  11.         IT1=1;//外部中斷1為跳邊沿觸發
  12.         led=0xfe;
  13.     while (1){
  14.                 P1=led;
  15.             delayms(1000);
  16.             led=_crol_(led,1);
  17.     }
  18. }

  19. //暫停部分
  20. void INT_1() interrupt 2{
  21.         while(flag){
  22.                 if(key2==0){
  23.                         delayms(10);
  24.                         if(key2==0){
  25.                                 flag=0;//如果key2鍵按下,跳出中斷里面的死循環
  26.                         while(!key2);
  27.                 }
  28.         }
  29.         }
  30.         flag=1;
  31. }

  32. void delayms(unsigned int xms){
  33.         unsigned int i,j;
  34.         for(i=xms;i>0;i--)                                 for(j=110;j>0;j--);
  35. }
復制代碼
方法2:用單片機的空閑模式實現上面的功能
  1. #include <reg52.h>
  2. #include <RTX51TNY.h>
  3. #include <intrins.h>

  4. sbit key1=P2^0;//該按鍵進入掉電模式

  5. void delayms(unsigned int);
  6. unsigned char led;

  7. //首先從任務0開始執行
  8. void job0 (void) _task_ 0 {

  9. //        EA=1;//開總中斷
  10.         EX1=1;//打開外部中斷1
  11.         IT1=1;//外部中斷1為跳邊沿觸發
  12.         led=0xfe;
  13. //        os_wait (K_TMO, 20, 0);  //用于將一個任務設置為等待態  
  14.         os_create_task (1);//建立任務1、2
  15.         os_create_task (2);     
  16.         os_delete_task (0);//將一個已經啟動的任務設置為刪除態,停止運行的任務
  17. }

  18. //任務1,掃描鍵盤
  19. void keyscan(void) _task_ 1{
  20.    while (1){                       
  21.               if(key1==0){
  22.                 delayms(10);
  23.                 if(key1==0){
  24.                         PCON=0x02;//如果key1按下,則cpu進入掉電模式
  25.                         while(!key1);
  26.                         }               
  27.                 }
  28. //    os_wait (K_TMO, 20, 0);   //延時等待20個周期,主動讓出CPU         
  29.    }
  30. }

  31. //任務2 LED流水燈
  32. void LEDliu(void) _task_ 2{   
  33.    while (1){
  34.                 P1=led;
  35.             delayms(2000);
  36.             led=_crol_(led,1);
  37. //                os_wait (K_TMO, 20, 0);           
  38.    }
  39. }

  40. //外部中斷1控制喚醒CPU
  41. void INT_1() interrupt 2{
  42.         PCON=0;//喚醒單片機
  43. }

  44. void delayms(unsigned int xms){
  45.         unsigned int i,j;
  46.         for(i=xms;i>0;i--)                      //i=xms即延時約xms毫秒
  47.                 for(j=110;j>0;j--);
  48. }
復制代碼
當然還有其他的方法了,大家可以自己試一試

評分

參與人數 1黑幣 +80 收起 理由
admin + 80 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏4 分享淘帖 頂2 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产在线观看免费 | 日本不卡一区二区三区在线观看 | 国产探花在线精品一区二区 | 伊人网在线播放 | 一本岛道一二三不卡区 | 国产综合网站 | 伊人免费网 | 一区二区三区视频免费看 | 五月婷六月丁香 | 成人免费在线观看 | www.国产91 | 国产伦一区二区三区久久 | 国产美女精品 | 日韩在线免费 | 精品国产乱码久久久久久影片 | a视频在线观看 | 91成人免费看| 懂色av色香蕉一区二区蜜桃 | 成人黄色电影在线观看 | 欧美视频 亚洲视频 | 久久精品中文字幕 | 免费看的黄网站 | 亚洲一区二区三区四区视频 | 日韩中文不卡 | 九九热在线观看视频 | 网站国产| av一级毛片 | 成人国产精品久久 | 亚洲一区二区三区福利 | 国产精品视频免费观看 | 99这里只有精品视频 | 午夜精品久久久久久久久久久久久 | 福利视频一二区 | 精品美女在线观看视频在线观看 | 91国内外精品自在线播放 | 91最新视频 | 久久成人免费 | 东方伊人免费在线观看 | 亚洲成人精品 | 中文字幕在线一区二区三区 | 亚洲看片|