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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2138|回復: 5
打印 上一主題 下一主題
收起左側(cè)

求助一段單片機代碼 中斷套中斷的

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:209822 發(fā)表于 2017-6-28 22:24 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
代碼目的:單片機通過定時器0產(chǎn)生中斷 ,定時發(fā)送串口數(shù)據(jù)并接受返回值 通過判斷返回值來判斷SIM900a模塊工作狀態(tài),通過檢測LED5亮 否則LED5熄 ,但是總是不知道哪里的問題 達不到效果,請大神們指教 單片機愛好者 初學 謝謝!代碼如下:
  1. #include <reg52.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4. #define Buf_Max 90
  5. unsigned char i = 0;           
  6. unsigned char T0RL =0;
  7. unsigned char T0RH =0;
  8. xdata unsigned char Rec_Buf[Buf_Max];   

  9. void init(void);
  10. void GSM_Call(unsigned char *num)
  11. void Delay_ms(unsigned int time);
  12. void CLR_Buf(void);//Çå3y»o′æ
  13. void Send_ASCII(unsigned char *b);
  14. void Send_Hex(unsigned char c);  
  15. void work_test(void);
  16. void ConfigTimer0(unsigned int ms);
  17. void ConfigUART(unsigned int baud);

  18.         
  19. char code num[]="xxxxxxxxxx";

  20. sbit key1=P1^1;
  21. sbit LED5=P1^5;

  22. void main(void)
  23. {
  24.         EA = 1;   
  25.         ConfigUART(9600);
  26.         ConfigTimer0(20);
  27.         CLR_Buf();   
  28.         Delay_ms(3000);
  29.         
  30.         while(1)
  31.         {                        
  32.                 if(key1==0)
  33.                 {
  34.                         Delay_ms(20)
  35.                         if(key1==0)
  36.                         {
  37.                                 GSM_Call(num);
  38.                                 Delay_ms(1000);
  39.                         }               
  40.                 }
  41.   }

  42. }
  43. void GSM_Call(unsigned char *num)
  44. {
  45.         Send_ASCII("ATD");        
  46.         Send_ASCII(num);
  47.         Send_ASCII(";");
  48.   Send_Hex(0x0d);
  49.         Send_Hex(0x0a);
  50.         Delay_ms(200)
  51. }
  52. //oáÃëÑóê±oˉêy
  53. void Delay_ms(unsigned int time)
  54. {
  55.         unsigned int i;
  56.         for(;time>0;time--)
  57.         {
  58.                 i=125;
  59.                 while(i--);
  60.         }

  61. }

  62. void CLR_Buf(void)
  63. {
  64.         unsigned char k;
  65.     for(k=0;k<Buf_Max;k++)
  66.             {
  67.                         Rec_Buf[k] = 0;
  68.                 }
  69.     i = 0;                 
  70. }

  71. void Send_Hex(unsigned char c)         
  72. {
  73.     ES = 0;           
  74.     SBUF = c;
  75.     while(TI!=1);     
  76.     TI = 0;            
  77.           ES = 1;            
  78. }

  79. void Send_ASCII(unsigned char *b)         
  80. {
  81.   ES = 0;                 
  82.     for (b; *b!='\0';b++)
  83.             {
  84.                 SBUF = *b;
  85.                 while(TI!=1);   
  86.                         TI = 0;         
  87.                 }           
  88.         ES = 1;               

  89. }

  90. void work_test(void)
  91. {

  92.                 Send_ASCII("AT")
  93.           Send_Hex(0x0d);
  94.           Send_Hex(0x0a);
  95.                 Delay_ms(2000);  
  96.         if(strstr(Rec_Buf,"OK")!=NULL)
  97.                
  98.         {
  99.                 CLR_Buf();
  100.         
  101.                 //LED2=0;
  102.         
  103.                 Send_ASCII("AT+CPIN?")
  104.                 Send_Hex(0x0d);
  105.                 Send_Hex(0x0a);
  106.                 Delay_ms(2000);        
  107.                 if(strstr(Rec_Buf,"+CPIN")!=NULL&&strstr(Rec_Buf,"OK")!=NULL)
  108.                 {                                
  109.                                 CLR_Buf();                        
  110.                         //        LED3=0;
  111.                                 
  112.                                 Send_ASCII("AT+CSQ")
  113.                                 Send_Hex(0x0d);
  114.                                 Send_Hex(0x0a);
  115.                                 Delay_ms(2000);
  116.                                 if(strstr(Rec_Buf,"OK")!=NULL)
  117.                                 {
  118.                                         CLR_Buf();
  119.                                 //        LED4=0;
  120.                                         Send_ASCII("AT+CREG?")
  121.                                         Send_Hex(0x0d);
  122.                                         Send_Hex(0x0a);
  123.                                         Delay_ms(2000);
  124.                                         if(strstr(Rec_Buf,"0")!=NULL&&strstr(Rec_Buf,"1")!=NULL&&strstr(Rec_Buf,"OK")!=NULL)
  125.                                         {
  126.                                                 
  127.                                                 CLR_Buf();
  128.                                                 Delay_ms(1000);               
  129.                                                 LED5 = 0;
  130.                                         }
  131.                                 }
  132.                 }
  133.         }else LED5 = 1;
  134. }
  135. void ConfigUART(unsigned int baud)
  136. {
  137.     SCON  = 0x50;
  138.     TMOD &= 0x0F
  139.     TMOD |= 0x20
  140.     TH1 = 256 - (11059200/12/32)/baud
  141.     TL1 = TH1;
  142.     ET1 = 0;     
  143.     ES  = 1;   
  144.     TR1 = 1;     
  145. }
  146. void ConfigTimer0(unsigned int ms)
  147. {
  148.     unsigned long tmp

  149.     tmp = 11059200 / 12;   
  150.     tmp = (tmp * ms) / 1000
  151.     tmp = 65536 - tmp;     
  152.     tmp = tmp + 18;         
  153.     T0RH = (unsigned char)(tmp>>8);
  154.     T0RL = (unsigned char)tmp;
  155.     TMOD &= 0xF0;
  156.     TMOD |= 0x01;
  157.     TH0 = T0RH;   
  158.     TL0 = T0RL;
  159.     ET0 = 1;      
  160.     TR0 = 1;     
  161. }
  162. void InterruptTimer0() interrupt 1
  163. {
  164. static unsigned int cnt = 0;
  165.         TH0 = T0RH;
  166.         TL0 = T0RL;
  167.         cnt++;
  168.         if(cnt ==50)
  169.         {
  170.                 work_test();
  171.         }
  172.         if(cnt ==800)
  173.         cnt =0;

  174. }
  175. void tinit() interrupt 4
  176. {        
  177.         ES = 0;
  178.         if(TI)
  179.                 {
  180.                         TI = 0
  181.                 }
  182.         if(RI)
  183.                 {
  184.                         RI = 0
  185.                         Rec_Buf[i] = SBUF
  186.                         i++;            
  187.                         if(i>90)      
  188.                                 {
  189.                                         i = 0;
  190.                                 }
  191.                 }
  192.         ES = 1;
  193. }
復制代碼

評分

參與人數(shù) 1黑幣 +1 收起 理由
5664645345 + 1 很給力!

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:209822 發(fā)表于 2017-6-28 23:16 | 只看該作者
求大神指點  在線等
回復

使用道具 舉報

板凳
ID:209822 發(fā)表于 2017-6-29 09:56 | 只看該作者
這么大的論壇有人懂的嗎
回復

使用道具 舉報

地板
ID:215758 發(fā)表于 2017-6-29 11:13 | 只看該作者
你就不能加點備注么?好難審閱啊
回復

使用道具 舉報

5#
ID:123289 發(fā)表于 2017-7-1 01:27 | 只看該作者
1、達不到效果,已達到了什么程序呢?
2、串行數(shù)據(jù)丟失風險大,其中斷優(yōu)先級可以考慮設置為最高。
3、中斷服務程序要盡可能“小”少用時間,以防妨礙其它低級別的中斷。所以,中斷事件盡可不要在中斷服務程序中處理,而是做個“記號”,讓事件在主程序中進行依“記號”處理。
回復

使用道具 舉報

6#
ID:82765 發(fā)表于 2017-7-1 08:57 | 只看該作者
提示: 作者被禁止或刪除 內(nèi)容自動屏蔽
回復

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品1区2区 | 99视频在线免费观看 | 精品日韩欧美一区二区 | 视频1区 | 免费视频久久 | 国产免费一区 | 日韩一区二区在线观看 | 夜夜操天天艹 | 欧美在线视频一区二区 | 黄视频免费在线 | av在线二区| 欧美一级黄色片免费观看 | 国产精品视频免费观看 | 国产欧美日韩一区 | 日韩在线不卡 | 国产一区二区三区四区 | 黄色在线网站 | 亚洲精品91 | 在线观看成人 | 紧缚调教一区二区三区视频 | 色综合久 | 免费在线一区二区三区 | 欧美精品国产精品 | 精品国产一区二区三区久久影院 | 欧美一区二区三区久久精品 | 亚州精品天堂中文字幕 | 不用播放器看的av | 一区二区视频在线 | 午夜影院在线观看 | 亚洲午夜视频 | 操操网站 | 久久久久久毛片免费观看 | 国产情侣激情 | 黄视频免费观看 | 91精品久久久久久久久久入口 | 激情免费视频 | 九色网址| 国产精品永久免费视频 | 中文字幕av在线 | www.日韩| 国产精品久久久久久久久久免费看 |