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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 18838|回復: 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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久亚洲一区 | 欧美精品一区二区在线观看 | 亚洲在线一区 | 久久国产精品一区二区三区 | 91精品国产91久久久 | 99精品国产在热久久 | 天天草狠狠干 | 不卡欧美 | 伊人看片 | 免费一级毛片 | 国产毛片毛片 | 亚洲一区二区三区在线视频 | 亚洲网视频 | 国产网站在线免费观看 | 日韩国产一区 | 97成人免费 | 久久国产精品72免费观看 | 成人在线免费观看 | 国产区精品 | 亚洲精品一 | 国产视频2021 | 日本欧美视频 | 亚洲精品乱码久久久久久9色 | 亚洲国产网站 | 国产精品久久久久久久久久三级 | 精品国产99| 91精品欧美久久久久久久 | 91麻豆精品国产91久久久久久 | 国产农村妇女毛片精品久久麻豆 | 夜夜骑首页 | 福利视频网 | 欧美一区二区三区小说 | 国产精品久久久久久久久久久免费看 | 日韩一区二区三区在线观看 | 国产一区二区电影 | 国产天堂 | 日韩在线中文字幕 | 日日干干| 亚洲性人人天天夜夜摸 | 人人鲁人人莫人人爱精品 | 人人操日日干 |