欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: STC15與STC12單片機串口通信不成功,但是仿真可以 [打印本頁]

作者: liujinxu1205    時間: 2018-3-29 21:35
標題: STC15與STC12單片機串口通信不成功,但是仿真可以
在proteus上可以仿真成功,主機是stc15w4k32s4單片機,主機程序,是按下一個按鍵然后順序調用四個串口,分別發送一個數據到四個從機,每個從機檢測到接收的數據后P20=0;現在proteus上無法進行4串口的仿真,只連接一個從機的情況下仿真是成功的,但是分別燒進開發板后,按鍵之后從機無反應,用電流表測試主機TXD按鍵時可以正常觸發,但是從機P20無反應,請各位大神看圖和程序 先是主機,有一些定義的函數暫時沒有調用,大家別誤會。

單片機源程序如下:
  1. #include<STC15.H>
  2. #include<intrins.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5.         uchar good;
  6.                                 sbit key1=P2^0;
  7.                                 sbit key2=P2^1;
  8.                                 sbit key3=P2^2;
  9.                                 sbit key4=P2^3;
  10.                                 sbit key5=P2^4;
  11.                                 sbit key6=P2^5;
  12.                                 sbit key7=P2^6;
  13.                                 sbit key8=P2^7;
  14.                                 sbit key9=P1^0;
  15.                                 sbit key10=P1^1;
  16.                                 sbit key11=P1^2;
  17.                                 sbit key12=P3^5;
  18.                                 sbit key13=P1^4;
  19.                                 sbit key14=P1^5;
  20.                                 sbit key15=P1^6;
  21.                                 sbit key16=P1^7;
  22.                                 sbit key17=P3^6;
  23.                                 sbit key18=P3^7;
  24. void Uart1Init(void)                //9600bps@11.0592MHz//波特率設置串口初始化
  25. {
  26.         SCON = 0x50;                //8位數據,可變波特率
  27.         AUXR |= 0x40;                //定時器1時鐘1T
  28.         AUXR &= 0xFE;                //串口1選擇定時器1為波特率發生器
  29.         TMOD &= 0x0F;                //設定定時器1為16位自動重裝填模式
  30.   TL1 = 0xC7;           
  31.         TH1 = 0xFE;              
  32.         ET1 = 0;                //禁止定時器1中斷
  33.         TR1 = 1;        //啟動定時器1
  34.         ES=1;    //啟動串口中斷
  35. }
  36. void Uart2Init(void)            
  37. {
  38.         S2CON = 0x50;            
  39.         AUXR |= 0x04;               
  40.   T2L = 0xC7;               
  41.         T2H = 0xFE;           
  42.         AUXR |= 0x10;              
  43.         ES=1;
  44. }
  45. void Uart3Init(void)         
  46. {
  47.   S3CON = 0x10;      
  48.         S3CON |= 0x40;   
  49.         T4T3M |= 0x02;           
  50.         T3L = 0xC7;               
  51.         T3H = 0xFE;            
  52.         T4T3M |= 0x08;         
  53.         ES=1;
  54. }
  55. void Uart4Init(void)               
  56. {
  57.         
  58.         S4CON = 0x10;            
  59.         S4CON |= 0x40;              
  60.         T4T3M |= 0x20;           
  61.         T4L = 0xC7;              
  62.         T4H = 0xFE;        
  63.         T4T3M |= 0x80;           
  64.         ES=1;
  65. }


  66. void Delay1ms()                //@11.0592MHz//1毫秒延時函數
  67. {
  68.         unsigned char i, j;

  69.         _nop_();
  70.         _nop_();
  71.         _nop_();
  72.         i = 11;
  73.         j = 190;
  74.         do
  75.         {
  76.                 while (--j);
  77.         } while (--i);
  78. }
  79. void Delay10ms()                //@11.0592MHz//10毫秒延時函數
  80. {
  81.         unsigned char i, j;

  82.         i = 108;
  83.         j = 145;
  84.         do
  85.         {
  86.                 while (--j);
  87.         } while (--i);
  88. }
  89. void trans1()//發送函數
  90. {
  91.         SBUF=0x01;
  92.         while(TI==0);
  93.                 TI=0;
  94. }
  95. void trans2()//發送函數
  96. {
  97.         SBUF=0x02;
  98.         while(TI==0);
  99.                 TI=0;
  100. }
  101. void trans3()//發送函數
  102. {
  103.         SBUF=0x03;
  104.         while(TI==0);
  105.                 TI=0;
  106. }
  107. void trans4()//發送函數
  108. {
  109.         SBUF=0x04;
  110.         while(TI==0);
  111.                 TI=0;
  112. }
  113. void trans5()//發送函數
  114. {
  115.         SBUF=0x05;
  116.         while(TI==0);
  117.                 TI=0;
  118. }
  119. void trans6()//發送函數
  120. {
  121.         SBUF=0x06;
  122.         while(TI==0);
  123.                 TI=0;
  124. }
  125. void trans7()//發送函數
  126. {
  127.         SBUF=0x07;
  128.         while(TI==0);
  129.                 TI=0;
  130. }
  131. void trans8()//發送函數
  132. {
  133.         SBUF=0x08;
  134.         while(TI==0);
  135.                 TI=0;
  136. }
  137. void trans9()//發送函數
  138. {
  139.         SBUF=0x09;
  140.         while(TI==0);
  141.                 TI=0;
  142. }
  143. void trans10()//發送函數
  144. {
  145.         SBUF=0x0a;
  146.         while(TI==0);
  147.                 TI=0;
  148. }
  149. void trans11()//發送函數
  150. {
  151.         SBUF=0x0b;
  152.         while(TI==0);
  153.                 TI=0;
  154. }
  155. void trans12()//發送函數
  156. {
  157.         SBUF=0x0c;
  158.         while(TI==0);
  159.                 TI=0;
  160. }
  161. void trans13()//發送函數
  162. {
  163.         SBUF=0x0d;
  164.         while(TI==0);
  165.                 TI=0;
  166. }
  167. void trans14()//發送函數
  168. {
  169.         SBUF=0x0e;
  170.         while(TI==0);
  171.                 TI=0;
  172. }
  173. void trans15()//發送函數
  174. {
  175.         SBUF=0x0f;
  176.         while(TI==0);
  177.                 TI=0;
  178. }
  179. void trans16()//發送函數
  180. {
  181.         SBUF=0x10;
  182.         while(TI==0);
  183.                 TI=0;
  184. }
  185. void trans17()//發送函數
  186. {
  187.         SBUF=0x11;
  188.         while(TI==0);
  189.                 TI=0;
  190. }
  191. void trans18()//發送函數
  192. {
  193.         SBUF=0x12;
  194.         while(TI==0);
  195.                 TI=0;
  196. }
  197. void main()        //主程序
  198. {
  199.         
  200.         
  201.   if(key12==0)      //消抖程序
  202.          {
  203.                  Uart1Init();
  204.                  trans1();
  205.                  Uart2Init();
  206.                  trans1();
  207.                  Uart3Init();
  208.                  trans1();
  209.                  Uart4Init();
  210.                  trans1();
  211.                  

  212.                  }                 
  213.          }
復制代碼

所有資料51hei提供下載:
stc串口通信.rar (22.12 KB, 下載次數: 12)



作者: liujinxu1205    時間: 2019-4-8 17:51
一年了,并沒有人管我
作者: weras    時間: 2020-3-29 15:38
怎能不用STC15仿真?
作者: hangsy    時間: 2020-3-30 17:41
你仿真用的是兩個51單片機,實物如果用一個51一個12的話他們的機器周期好像不太一樣所以定時器要改一下
作者: www12www    時間: 2020-4-1 22:11
兩個單片機串行通訊:1)只有兩個單片機的串口波特率設置一樣,接口物理協議設置一樣(如n,8,1);2)單片機1的txd->單片機2的rxd,單片機1的rxd->單片機2的txd;3)stc15單片機串口的引腳可通過軟件設置,要把所用的串口映射到實際物理連接的引腳上。只有這3點對,兩個單片機串行通訊沒有問題。


作者: www12www    時間: 2020-4-1 22:21
stc15單片機可使用內部晶振,晶振頻率也可設置,stc12好像只能用外部晶振,簡單點,將stc15的主時鐘設成與stc12的外部晶振頻率,串行通訊晶振頻率選11.0592MHz,最容易,2400、4800、9600、…,可支持多個波特率。
作者: liujinxu1205    時間: 2022-5-24 12:23
多年過去了,當時我給解決了,你們猜最后什么原因,是因為STC15雖然有四串口,但是官方沒有給出4串口同時開啟的配置,按例程配置的定時計數器是錯的,無法實現4串口同時用,例程給的是輪流用,很麻煩,最后我費好大勁找出了四串口的正確配置




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1