欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
STC15與STC12單片機串口通信不成功,但是仿真可以
[打印本頁]
作者:
liujinxu1205
時間:
2018-3-29 21:35
標題:
STC15與STC12單片機串口通信不成功,但是仿真可以
在proteus上可以仿真成功,主機是stc15w4k32s4單片機,主機程序,是按下一個按鍵然后順序調用四個串口,分別發送一個數據到四個從機,每個從機檢測到接收的數據后P20=0;現在proteus上無法進行4串口的仿真,只連接一個從機的情況下仿真是成功的,但是分別燒進開發板后,按鍵之后從機無反應,用電流表測試主機TXD按鍵時可以正常觸發,但是從機P20無反應,請各位大神看圖和程序
QQ截圖20180329212119.png
(142.71 KB, 下載次數: 40)
下載附件
2018-3-29 21:22 上傳
先是主機,有一些定義的函數暫時沒有調用,大家別誤會。
單片機源程序如下:
#include<STC15.H>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar good;
sbit key1=P2^0;
sbit key2=P2^1;
sbit key3=P2^2;
sbit key4=P2^3;
sbit key5=P2^4;
sbit key6=P2^5;
sbit key7=P2^6;
sbit key8=P2^7;
sbit key9=P1^0;
sbit key10=P1^1;
sbit key11=P1^2;
sbit key12=P3^5;
sbit key13=P1^4;
sbit key14=P1^5;
sbit key15=P1^6;
sbit key16=P1^7;
sbit key17=P3^6;
sbit key18=P3^7;
void Uart1Init(void) //9600bps@11.0592MHz//波特率設置串口初始化
{
SCON = 0x50; //8位數據,可變波特率
AUXR |= 0x40; //定時器1時鐘1T
AUXR &= 0xFE; //串口1選擇定時器1為波特率發生器
TMOD &= 0x0F; //設定定時器1為16位自動重裝填模式
TL1 = 0xC7;
TH1 = 0xFE;
ET1 = 0; //禁止定時器1中斷
TR1 = 1; //啟動定時器1
ES=1; //啟動串口中斷
}
void Uart2Init(void)
{
S2CON = 0x50;
AUXR |= 0x04;
T2L = 0xC7;
T2H = 0xFE;
AUXR |= 0x10;
ES=1;
}
void Uart3Init(void)
{
S3CON = 0x10;
S3CON |= 0x40;
T4T3M |= 0x02;
T3L = 0xC7;
T3H = 0xFE;
T4T3M |= 0x08;
ES=1;
}
void Uart4Init(void)
{
S4CON = 0x10;
S4CON |= 0x40;
T4T3M |= 0x20;
T4L = 0xC7;
T4H = 0xFE;
T4T3M |= 0x80;
ES=1;
}
void Delay1ms() //@11.0592MHz//1毫秒延時函數
{
unsigned char i, j;
_nop_();
_nop_();
_nop_();
i = 11;
j = 190;
do
{
while (--j);
} while (--i);
}
void Delay10ms() //@11.0592MHz//10毫秒延時函數
{
unsigned char i, j;
i = 108;
j = 145;
do
{
while (--j);
} while (--i);
}
void trans1()//發送函數
{
SBUF=0x01;
while(TI==0);
TI=0;
}
void trans2()//發送函數
{
SBUF=0x02;
while(TI==0);
TI=0;
}
void trans3()//發送函數
{
SBUF=0x03;
while(TI==0);
TI=0;
}
void trans4()//發送函數
{
SBUF=0x04;
while(TI==0);
TI=0;
}
void trans5()//發送函數
{
SBUF=0x05;
while(TI==0);
TI=0;
}
void trans6()//發送函數
{
SBUF=0x06;
while(TI==0);
TI=0;
}
void trans7()//發送函數
{
SBUF=0x07;
while(TI==0);
TI=0;
}
void trans8()//發送函數
{
SBUF=0x08;
while(TI==0);
TI=0;
}
void trans9()//發送函數
{
SBUF=0x09;
while(TI==0);
TI=0;
}
void trans10()//發送函數
{
SBUF=0x0a;
while(TI==0);
TI=0;
}
void trans11()//發送函數
{
SBUF=0x0b;
while(TI==0);
TI=0;
}
void trans12()//發送函數
{
SBUF=0x0c;
while(TI==0);
TI=0;
}
void trans13()//發送函數
{
SBUF=0x0d;
while(TI==0);
TI=0;
}
void trans14()//發送函數
{
SBUF=0x0e;
while(TI==0);
TI=0;
}
void trans15()//發送函數
{
SBUF=0x0f;
while(TI==0);
TI=0;
}
void trans16()//發送函數
{
SBUF=0x10;
while(TI==0);
TI=0;
}
void trans17()//發送函數
{
SBUF=0x11;
while(TI==0);
TI=0;
}
void trans18()//發送函數
{
SBUF=0x12;
while(TI==0);
TI=0;
}
void main() //主程序
{
if(key12==0) //消抖程序
{
Uart1Init();
trans1();
Uart2Init();
trans1();
Uart3Init();
trans1();
Uart4Init();
trans1();
}
}
復制代碼
所有資料51hei提供下載:
stc串口通信.rar
(22.12 KB, 下載次數: 12)
2018-3-29 21:32 上傳
點擊文件名下載附件
作者:
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