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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 19159|回復: 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 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久国内精品 | 色婷婷丁香 | 国产蜜臀av | 男女av网站 | 日韩精品视频免费在线观看 | 天天爽夜夜操 | 免费看黄色一级片 | av一区二区三区在线观看 | 日本不卡在线视频 | 成人免费视频观看视频 | 自拍三区 | 天天干天天操天天插 | 天天久久| 国产一级片免费观看 | 国产精品午夜视频 | 成人免费视频一区二区 | 亚洲h片 | 国产视频一区二区在线播放 | 理论片中文字幕 | 国产91在线视频 | 欧美在线播放 | 久久久一区二区 | h片免费观看 | 男女搞黄网站 | www.欧美日韩| 亚洲一区成人 | 在线网站免费观看18 | 波多野结衣乳巨码无在线观看 | 午夜精品视频 | 日韩视频二区 | 久久艳片www.17c.com | 亚洲精品自拍视频 | 免费三片在线观看网站v888 | 欧美二三区 | 午夜a级片 | 99精品视频在线观看 | 国产精品天堂 | 欧美激情一区 | 成人免费网站 | 在线不卡视频 | www.天天操|