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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1828|回復: 0
打印 上一主題 下一主題
收起左側

PC 機與單片機通信(RS232 協議)

[復制鏈接]
跳轉到指定樓層
樓主
ID:234312 發表于 2017-9-20 11:04 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
PC 機與單片機通信(RS232 協議)
目錄:
1、單片機串口通信的應用
2PC控制單片機IO口輸出
3單片機控制實訓指導及綜合應用實例
4、單片機給計算機發送數據:


[實驗任務]
單片機串口通信的應用,通過串口,我們的個人電腦和單片機系統進行通信。
個人電腦作為上位機,向下位機單片機系統發送十六進制或者ASCLL碼,單片機
系統接收后,用LED顯示接收到的數據和向上位機發回原樣數據。
[硬件電路圖]
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image002.jpg
[實驗原理]
RS-232是美國電子工業協會正式公布的串行總線標準,也是目前最常用的串
行接口標準,用來實現計算機與計算機之間、計算機與外設之間的數據通訊。
RS-232串行接口總線適用于:設備之間的通訊距離不大于15m,傳輸速率最大為
20kBpsRS-232協議以-5V15V表示邏輯1;以+5V15V 表示邏輯0 我們是
MAX232芯片將RS232電平轉換為TTL電平的。 一個完整的RS-232接口有22
根線,采用標準的25芯插頭座。我們在 這里使用的是簡化的9芯插頭座。
注意我們在這里使用的晶振是11.0592M的,而不是12M。因為波特率的設置
需要11.0592M的。
“串口調試助手V2.1.exe 軟件的使用很簡單,只要將串口選擇‘CMO1’波
特率設置為‘9600 數據位為 8 位。打開串口(如果關閉)。然后在發送區里
輸入要發送的數據,單擊手動發送就將數據發送出去了。注意,如果選中‘十六
進制發送’那么發送的數據是十六進制的,必須輸入兩位數據。如果沒有選中,
則發送的是ASCLL碼,那么單片機控制的數碼管將顯示ASCLL碼值。
  
數字
  
二進制
Px0Px7
Abcdefg p
十六進制
0
00111111
00000011
11111100
0xco
1
00000110
10011111
01100000
0xf9
2
01011011
00100101
11011010
0xa4
3
01001111
00001101
11110010
0xb0
4
00110110
10010011
01101100
0x99
5
01101101
01001001
10110110
0x92
6
01111101
01000001
10111110
0x82
7
00000111
00011111
11100000
0xf8
8
01111111
00000001
11111110
0x80
9
01101111
00001001
11110110
0x90
A
01110111
00010001
11101110
0x88
B
01111100
11000001
00111110
0x83
C
00111001
01100011
10011100
0xc6
D
01011110
10000101
01111010
0xa1
E
01111001
01100001
10011110
0x86
F
01110001
01110001
10001110
0x8e





                              ASCII常用代碼表
  
  
  
字符
  
  
代碼
  
  
字符
  
  
代碼
  
  
字符
  
  
代碼
  
  
字符
  
  
代碼
  
  
字符
  
  
32
  
  
  
  
52
  
  
4
  
  
72
  
  
H
  
  
92
  
  
\
  
  
112
  
  
p
  
  
33
  
  
!
  
  
53
  
  
5
  
  
73
  
  
I
  
  
93
  
      
113
  
  
q
  
  
34
  
  
  
  
54
  
  
6
  
  
74
  
  
J
  
  
94
  
  
^
  
  
114
  
  
r
  
  
35
  
  
#
  
  
55
  
  
7
  
  
75
  
  
K
  
  
95
  
  
_
  
  
115
  
  
s
  
  
36
  
  
$
  
  
56
  
  
8
  
  
76
  
  
L
  
  
96
  
  
`
  
  
116
  
  
t
  
  
37
  
  
%
  
  
57
  
  
9
  
  
77
  
  
M
  
  
97
  
  
a
  
  
117
  
  
u
  
  
38
  
  
&
  
  
58
  
  
:
  
  
78
  
  
N
  
  
98
  
  
b
  
  
118
  
  
v
  
  
39
  
  
  
  
59
  
  
;
  
  
79
  
  
O
  
  
99
  
  
c
  
  
119
  
  
w
  
  
40
  
  
(
  
  
60
  
  
<  
  
  
80
  
  
P
  
  
100
  
  
d
  
  
120
  
  
x
  
  
41
  
  
)
  
  
61
  
  
=
  
  
81
  
  
Q
  
  
101
  
  
e
  
  
121
  
  
y
  
  
42
  
  
*
  
  
62
  
  
>  
  
  
82
  
  
R
  
  
102
  
  
f
  
  
122
  
  
z
  
  
43
  
  
+
  
  
63
  
  
?
  
  
83
  
  
S
  
  
103
  
  
g
  
  
123
  
  
{
  
  
44
  
  
,
  
  
64
  
  
@
  
  
84
  
  
T
  
  
104
  
  
h
  
  
124
  
  
|
  
  
45
  
  
-
  
  
65
  
  
A
  
  
85
  
  
U
  
  
105
  
  
i
  
  
125
  
  
}
  
  
46
  
  
.
  
  
66
  
  
B
  
  
86
  
  
V
  
  
106
  
  
j
  
  
126
  
  
~
  
  
47
  
  
/
  
  
67
  
  
C
  
  
87
  
  
W
  
  
107
  
  
k
  
  
  
  
  
  
48
  
  
0
  
  
68
  
  
D
  
  
88
  
  
X
  
  
108
  
  
l
  
  
  
  
  
  
49
  
  
1
  
  
69
  
  
E
  
  
89
  
  
Y
  
  
109
  
  
m
  
  
  
  
  
  
50
  
  
2
  
  
70
  
  
F
  
  
90
  
  
Z
  
  
110
  
  
n
  
  
  
  
  
  
51
  
  
3
  
  
71
  
  
G
  
  
91
  
  
[
  
  
111
  
  
o
  
  
  
  
  
[C語言源程序]
#include"reg52.h" //包函8051 內部資源的定義
unsigned char dat;//用于存儲單片機接收發送緩沖寄存器SBUF里面的內容
sbit gewei=P2^4;//個位選通定義
sbit shiwei=P2^5;//十位選通定義
sbit baiwei=P2^6;//百位選通定義
unsigned char codetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,}; //1~10
voidDelay(unsigned int tc) //延時程序
{
while( tc != 0 )
{unsigned int i;
for(i=0; i<100;i++);
tc--;}
}
void LED() //LED顯示接收到的數據(十進制)
{
gewei=0;P0=table[dat%10]; Delay(10); gewei=1;
shiwei=0;P0=table[dat/10]; Delay(10); shiwei=1;
baiwei=0;P0=table[dat/100]; Delay(10); baiwei=1;
}
///////功能:串口初始化,波特率9600,方式1/////////
voidInit_Com(void)
{
TMOD = 0x20;
PCON = 0x00;
SCON = 0x50;
TH1 = 0xFd;
TL1 = 0xFd;
TR1 = 1;
}
/////主程序功能:實現接收數據并把接收到的數據原樣發送回去///////
void main()
{
Init_Com();//串口初始化
while(1)
{                     
if ( RI ) //掃描判斷是否接收到數據,
{
dat = SBUF; //接收數據SBUF賦與dat
RI=0; //RI 清零。
SBUF = dat; //在原樣把數據發送回去(接收數據為發送數據的ASCII碼,如發送q顯示為113
}
LED(); //顯示接收到的數據
}
}
///這一個例子是以掃描的方式編寫的,還可以以中斷的方式編寫,請大家思考//////
[實驗任務1]PC控制單片機IO口輸出
#include"reg52.h" //包函8051 內部資源的定義
unsigned char dat;//用于存儲單片機接收發送緩沖寄存器SBUF里面的內容
voidDelay(unsigned int tc) //延時程序
{
while( tc != 0 )
{unsigned int i;
for(i=0; i<100;i++);
tc--;}
}
///////功能:串口初始化,波特率9600,方式1/////////
voidInit_Com(void)
{
TMOD = 0x20;
PCON = 0x00;
SCON = 0x50;
TH1 = 0xFd;
TL1 = 0xFd;
TR1 = 1;
}
/////主程序功能:實現接收數據并把接收到的數據原樣發送回去///////
void main()
{
Init_Com();//串口初始化
while(1)
{                     
if ( RI ) //掃描判斷是否接收到數據,
{
dat = SBUF; //接收數據SBUF賦與dat
if(dat==0x00)     //如果PC發送十六進制00,單片機P1口全亮。
P1=0x00;
else if(dat==0x01)
P1=0x01;
else if(dat==0x02)
P1=0x02;
else if(dat==0x03)
P1=0x03;
else if(dat==0x04)
P1=0x04;
RI=0; //RI 清零。
SBUF = dat; //在原樣把數據發送回去(接收數據為發送數據的ASCII碼,如發送q顯示為113
}
}
}
[實驗任務2]單片機控制實訓指導及綜合應用實例
#include"reg52.h" //包函AT89S52 內部資源的定義(注視參看書160頁)
#define ucharunsigned char                   //宏定義
uchar led[10]={0xbf,0x06,0xdb,0xcf,0x66,0xed,0xfd,0x87,0xff,0xef};    //數字110,字符串
uchar led1[64];    //存儲接收數據
unsigned inti,j,t,k;
sbit P32=P3^2;
voidscjs(void)interrupt 4   //定義中斷
{
ES=0;// 使能串行口的中斷
k=1;
while(1)
{
RI=0;
led1[k-1]=SBUF;        //將接收數據送段碼表
k++;
TH0=0x3c; //t0定時50sm內接收不到數據跳過接收
TL0=0xb0;
TR0=1;
while(!RI)
{
if(!TF0) goto FH;
}
}
FH:TF0=0;//TF0不清零不能重新接收
   TR0=0;
   P32=1;
for(j=1;j<k;j++)
{
SBUF=led[j-1];//數據送回給pc
while(!TI);
TI=0;
}
P32=0;
}
delay(t)
{
ES=1;
SCON=0x50;
for(i=0;i<t;i++);
ES=0;
SCON=0x00;
}
void main (void)
{
int a,c;
TMOD=0x21;
TH1=0Xfd;
TL1=0xfd;
SCON=0x50;
PCON=0x00;
IE=0x90;
TR1=1;
k=1;
P32=0;
while(1)
{
ES=0;
SCON=0x00;
for(a=0;a<=k+1/k*8;a++)
{
for(c=5;c>=0;c--)
{
if(a+c<k+1/k*8+1)
{
if(k==1)SBUF=led[a+c];
elseSBUF=led1[a+c];
}
else SBUF=0x00;
while(!TI);
TI=0;
}
delay(39000);
}
}
}
#include"reg52.h" //包函8051 內部資源的定義
#define ucharunsigned char
sbit P3_2=P3^2;
uchar zdzt=0x0c;
uchar zsgw=0x02;
uchar zsdw=0x00;
uchar bs=0;
uchar zqsbw=0;
uchar zqssw=0;
uchar zqsgw=0;
uchar yxsj=0x11;
uchar zs=20;
int zqs=0;
uchar zqsgzj=0x00;
uchar zqsdzj=0x00;
uchar zsscgw=0x1f;
uchar zsscdw=0x00;
uchar bzsj;
uchar ztsj;
void key (void);
void keyprc();
void binbcd();
void disp();
void delay();
code uchartab[13]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x7f,0x6f,0x77,0x7c,0x39};
code ucharzssc[160]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x7f,0x6f,0x77,0x7c,
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x7f,0x6f,0x77,0x7c,0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x7f,0x6f,0x77,0x7c,0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x7f,
0x6f,0x77,0x7c,0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x7f,0x6f,0x77,0x7c,0x3f,
0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x7f,0x6f,0x77,0x7c,0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x7f,0x6f,0x77,0x7c,0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x7f,0x6f,
0x77,0x7c,0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x7f,0x6f,0x77,0x7c,0x3f,0x06,
0x5b,0x4f,0x66,0x6d,0x7d,0x7f,0x6f,0x77,0x7c,};
void key(void)
{
TR0=0;
if(!(P2&0X01))
{
delay();
while(!(P2&0X01));
zdzt=0x0a;
disp();
}
elseif(!(P3&0X08))
{
delay();
while(!(P3&0X08));
zdzt=0x0b;
disp();
}
elseif(!(P3&0X10))
{
delay();
while(!(P3&0X10));
zs=zs+1;
keyprc();
disp();
}
elseif(!(P2&0X02))
{
delay();
while(!(P2&0X02));
zs=zs-1;
keyprc();
disp();
}
}
void keyprc()
{
if(zs<20)
zs=20;
if(zs>99)
zs=99;
zsgw=zs/10;
zsdw=zs%10;
}
void djzd(void)interrupt 1
{
TH0=zssc[(zs-20)*2];
TL0=zssc[(zs-20)*2+1];
if(zdzt==0x0a)
yxsj=yxsj<<1|yxsj>>7;
else if(zdzt==0x0b)
yxsj=yxsj<<7|yxsj>>1;
else if(zdzt==0x0c)
{
P1=0xff;
goto LP;
}
P1=yxsj;
bs++;
if(bs==48)
{
bs=0;
zqs++;
}
LP:binbcd();
disp();
}
void binbcd()
{
zqsbw=zqs/100;
zqssw=zqs%100/10;
zqsgw=zqs%10;
}
void disp()
{
TR1=0;
ES=0;
SCON=0x00;
TMOD=0x01;
SBUF=tab[zqsgw];
while(!TI);TI=0;
SBUF=tab[zqssw];
while(!TI);TI=0;
SBUF=tab[zqsbw];
while(!TI);TI=0;
SBUF=tab[zsdw];
while(!TI);TI=0;
SBUF=tab[zsgw];
while(!TI);TI=0;
SBUF=tab[zdzt];
while(!TI);TI=0;
TMOD=0x02;
TH1=0Xfd;
TL1=0xfd;
SCON=0x50;
TR1=1;
ES=1;
}
void delay()
{
int k;
for(k=0;k<1200;k++);
}
voidsin()interrupt 4
{
P1=0xff;
ES=0;
bzsj=SBUF;
RI=0;
while(!RI);
RI=0;
ztsj=SBUF;
if(bzsj==0x30)
zdzt=ztsj-0x37;
if(bzsj==0x31)
{
if(ztsj==0x49)
zs++;
else zs--;
}
ES=1;
P3_2=0;
keyprc();
zqs=0;
disp();
}
main()
{
TMOD=0x21;
TH1=0xfd;
TL1=0xfd;
SCON=0x50;
PCON=0x00;
IE=0X92;
PS=1;
TR1=1;
P3_2=0;
TH0=0x1f;
TL0=0x00;
SP=0x60;
disp();
while(1)
{
key();
if(zdzt==0x0c)
{
TR0=0;
P1=0xff;
}
else TR0=1;
}
}
單片機給計算機發送數據
#include"reg52.h" //包函8051 內部資源的定義
unsigned char dat;//用于存儲單片機接收發送緩沖寄存器SBUF里面的內容
unsigned char fan;
int i,j;
void Delay() //延時程序
{
for(i=0; i<100;i++)
for(j=0; j<100;j++);
}
void delays()
{
int k;
for(k=0;k<1200;k++);
}
///////功能:串口初始化,波特率9600,方式1/////////
voidInit_Com(void)
{
TMOD = 0x20;
PCON = 0x00;
SCON = 0x50;
TH1 = 0xFd;
TL1 = 0xFd;
TR1 = 1;
}
/////主程序功能:實現接收數據并把接收到的數據原樣發送回去///////
void main()
{
Init_Com();//串口初始化
while(1)
{
                 
if ( RI ) //掃描判斷是否接收到數據,
{
dat = SBUF; //接收數據SBUF賦與dat
if(dat==0x30)     //如果PC發送十六進制00,單片機P1口全亮。
{P1=0x00;
Delay();   }
else if(dat==0x31)
{P1=0x01;
Delay();}
else if(dat==0x32)
{P1=0x03;
Delay();}
else if(dat==0x33)
{P1=0x07;
Delay(); }
else if(dat==0x34)
{P1=0x0f;
Delay(); }
else if(dat==0x35)
{P1=0x1f;
Delay();}
else if(dat==0x06)
{P1=0x3f;
Delay(); }
else if(dat==0x07)
{P1=0x7f;
Delay();}
else if(dat==0x08)
{P1=0xff;
Delay(); }
elseif(!(P2&0x01))
{ delays();
while(!(P2&0x01));
fan = 0x36;}
elseif(!(P2&0x02))
{ delays();
while(!(P2&0x02));
fan = 0x37;}
elseif(!(P2&0x04))
{ delays();
while(!(P2&0x04));
fan = 0x38;}
elseif(!(P2&0x08))
{ delays();
RI=0; //RI 清零。
SBUF =dat; //在原樣把數據發送回去(接收數據為發送數據的ASCII碼,如發送q顯示為113
}
}
}

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久国产精品99久久久久久丝袜 | 久久久久久久久蜜桃 | 国产自产21区 | 日韩精品久久久久久 | 美女黄网站 | 日韩免费在线 | 一区二区视频在线观看 | 神马久久香蕉 | 久久国产精品网站 | 日本一区二区在线视频 | 亚洲精品在线91 | 琪琪午夜伦伦电影福利片 | 久久精品一 | 奇米影视在线 | 国产免费一区二区三区网站免费 | 免费久久久 | 中文字幕日韩欧美一区二区三区 | 91免费看片 | 亚洲精品日韩在线 | 天天草av | 操久久 | 久久久www成人免费无遮挡大片 | 亚洲一区二区三区在线 | 天天久久 | 日本一区二区不卡 | 精品乱码一区二区三四区 | 亚洲精品免费在线 | av中文在线| 欧美freesex黑人又粗又大 | 免费一看一级毛片 | 亚洲高清三级 | 91不卡 | 欧美精品一区二区免费 | 青青99 | 精品一区二区三区免费毛片 | 精产嫩模国品一二三区 | 欧美在线观看免费观看视频 | 日本精品视频一区二区三区四区 | 成年人视频在线免费观看 | 99pao成人国产永久免费视频 | 男人的天堂在线视频 |