日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

單片機和Pc機串口通信<轉>_飛鳥留痕

 水無影 2009-07-18
單片機和Pc機串口通信<轉>
2007-08-01 10:41
單片機和Pc機串口通信<轉>
51單片機有一個全雙工的串行通訊口,所以單片機和電腦之間可以方便地進行串口通訊。進行串行通訊時要滿足一定的條件,比如電腦的串口是RS232電平的,而單片機的串口是TTL電平的,兩者之間必須有一個電平轉換電路,我們采用了專用芯片MAX232進行轉換,雖然也可以用幾個三極管進行模擬轉換,但是還是用專用芯片更簡單可靠。我們采用了三線制連接串口,也就是說和電腦的9針串口只連接其中的3根線:第5腳的GND、第2腳的RXD、第3腳的TXD。這是最簡單的連接方法,但是對我們來說已經(jīng)足夠使用了,電路如下圖所示,MAX232的第10腳和單片機的11腳連接,第9腳和單片機的10腳連接,第15腳和單片機的20腳連接。

串口通訊的硬件電路如上圖所示

串口通訊的硬件電路如上圖所示


  在制作電路前我們先來看看要用的MAX232,這里我們不去具體討論它,只要知道它是TTL和RS232電平相互轉換的芯片和基本的引腳接線功能就行了。通常我會用兩個小功率晶體管加少量的電路去替換MAX232,可以省一點,效果也不錯(如有興趣可以查看http://www.網(wǎng)站中的相關資料)。下圖就是MAX232的基本接線圖。





按圖7-3加上MAX232就可以了。這大熱天的拿烙鐵焊焊,還真的是熱氣迫人來呀:P串口座用DB9的母頭,這樣就可以用買來的PC串口延長線進行和電腦相連接,也可以直接接到電腦com口上。







為了能夠在電腦端看到單片機發(fā)出的數(shù)據(jù),我們必須借助一個WINDOWS軟件進行觀察,這里我們利用一個免費的電腦串口調試軟件。





點擊這里可以下載并運行這個串口調試軟件,這是一個綠色的軟件,無需安裝,可以直接在當前位置運行這個軟件。軟件界面如上圖,我們先要設置一下串口通訊的參數(shù),將波特率調整為4800,勾選十六進制顯示。串口選擇為COM1,當然將網(wǎng)站提供的51單片機實驗板的串口也要和電腦的COM1連接,將燒寫有以下程序的單片機插入單片機實驗板的萬能插座中,并接通51單片機實驗板的電源。



串口實驗的源程序如下所示:



;這是一個S51單片機實驗開發(fā)板向PC機的串口單向發(fā)送數(shù)據(jù)AF的演示程序

;采用MAX232專用芯片作RS232/TTL電平轉換.

;通訊波特率為4800KBPS,只要按下一次K1(就是P3.6引腳變成低電平)

;就發(fā)送一個16進制的AF字符



ORG 0000H

MOV SCON,#50H;設置成串口1方式

MOV TMOD,#20H;波特率發(fā)生器T1工作在模式2上

MOV PCON,#80H;波特率翻倍為2400x2=4800BPS

MOV TH1,#0F3H;預置初值(按照波特率2400BPS預置初值)

MOV TL1,#0F3H;預置初值(按照波特率2400BPS預置初值)

SETB TR1;啟動定時器T1

;以上完成通訊初始化設置



WRIT:JB P3.6,$;判斷K1是否按下,如果沒有按下就等待

ACALL DELAY10;延時10毫秒消觸點抖動

JB P3.6,WRIT;去除干擾信號

JNB P3.6,$;等待按鍵松開



MOV A,#0AFH;將16進制的字符AF發(fā)送到串口去

MOV SBUF,A;將AF通過串口發(fā)送出去



AJMP WRIT



;10毫秒延時子程序

DELAY10:MOV R4,#20

D2:MOV R5,#248

DJNZ R5,$

DJNZ R4,D2

RET



END







;=============兩機串口通訊程序(主機)=====================

;

; 功 能: 使用串行中斷,接收數(shù)據(jù)并顯示

; 硬件環(huán)境: 自制單片機實驗板

; 軟件環(huán)境: 偉福 V3.20

; Create date: 2004_07_26

; First Modify: 2004_07_26

; second Modify:

; Last Modify: 2004_07_26

; Author: Sujiande

;

;===========預定義===================

LED0 EQU 40H ;預定義數(shù)碼管

LED1 EQU 41H ;預定義數(shù)碼管

LED2 EQU 42H ;預定義數(shù)碼管

LED3 EQU 43H ;預定義數(shù)碼管

LED4 EQU 44H ;預定義數(shù)碼管

LED5 EQU 45H ;預定義數(shù)碼管

LED6 EQU 46H ;預定義數(shù)碼管

LED7 EQU 47H ;預定義數(shù)碼管

SDA BIT P0.1 ; 定義數(shù)據(jù)線引腳定義

SCL BIT P0.0 ; 定義時鐘線引腳定義

;---------------------------

ORG 0000H ;主程序入口

AJMP MAIN ;跳轉到主程序

ORG 0100H ;主程序在ROM中存放位置

;===============主程序=====================

MAIN:

MOV LED0,#00H ;賦初值

MOV LED1,#00H

MOV LED2,#16 ;賦初值為16, 數(shù)碼管顯示代碼為: 滅

MOV LED3,#16

MOV LED4,#16

MOV LED5,#16

MOV LED6,#16

MOV LED7,#16

;--------------------

;MOV DPTR,#TABLE ; 賦顯示代碼首地址

MOV R1,#00H ; 給R1賦初值00H

ACALL DISPLAY ; 調顯示子程序

MOV SP, #30H ; 給堆棧指針賦初值

;--------------------------

; 使用定時器1,作為波特率發(fā)生器,設定波特率=9600,

; 定時器初值為:FAH

; 串行控制器設置:SM0=0,SM1=1,SM2=0,REN=1,TB8=0,

; RB8=0,TI=0,RI=0 即0101 0000B

; 波特率加倍

;-----------------------------

MOV TMOD,#20H ;設置定時器1,工作方式2

MOV TH1,#0FAh ;賦初值: FA

MOV TL1,#0FAh ;賦初值: FA

MOV SCON, #50h ;設置串行口控制寄存器

MOV PCON, #80h ;設置電源控制寄存器, 讓波特率加倍(2X)

SETB TR1 ;啟動定時

;*****************主程序結束************************

LP8: MOV A,R1 ;將R1的數(shù)據(jù)裝到A中

;-----------------------

MOV SBUF,A ;將A的數(shù)據(jù)送到緩沖區(qū)

JNB TI,$ ;等待數(shù)據(jù)發(fā)送完畢

CLR TI ;清發(fā)送中斷標志

;-----------------------

INC R1

CJNE R1,#99,LP3

MOV R1,#00H



LP3: ACALL SEPERATE ;調拆分程序

ACALL DISPLAY ;調顯示子程序

ACALL DELAY_1S ;調延時子程序

AJMP LP8

;=================拆分程序=====================

SEPERATE: ANL A,#0Fh ;與操作得到個位數(shù)據(jù)

MOV LED0,A ;個位送LED0

MOV A,R1

ANL A,#0F0H ;與操作得到十位數(shù)據(jù)

SWAP A

MOV LED1,A ;十位送LED1

RET

;===============顯示子程序======================



DISPLAY:

MOV DPTR,#TABLE ; 賦顯示代碼首地址



MOV A,LED0 ;查表數(shù)據(jù)送A

MOVC A,@A+DPTR ;查表,得到顯示代碼

ACALL SHIFT ;調移位子程序



MOV A,LED1

MOVC A,@A+DPTR

ACALL SHIFT



MOV A,LED2

MOVC A,@A+DPTR

ACALL SHIFT



MOV A,LED3

MOVC A,@A+DPTR

ACALL SHIFT



MOV A,LED4

MOVC A,@A+DPTR

ACALL SHIFT



MOV A,LED5

MOVC A,@A+DPTR

ACALL SHIFT



MOV A,LED6

MOVC A,@A+DPTR

ACALL SHIFT



MOV A,LED7

MOVC A,@A+DPTR

ACALL SHIFT

RET

;---------顯示代碼表---------

TABLE: DB 11H,0D7H,32H,92H,0D4H,98H,18H,0D3H,10H,90H ;0,1,2,3,4,5,6,7,8,9,

DB 50H,1CH,39H,16H,38H,78H, 0FFH,0FEH,0EFH ;10,11,12,13,14,15,滅,-



;================移位子程序============================

SHIFT: PUSH A ; 進棧暫存A值

MOV R0,#8 ; 循環(huán)8次

CLR C ;清進位標志

CLR SCL ;時鐘線,先鉗位為0

LP2: RLC A

MOV SDA,C

NOP

NOP

SETB SCL

NOP

NOP

CLR SCL

NOP

NOP

DJNZ R0,LP2

POP A ; 出?;謴虯值

RET

;=============延時子程序===============

DELAY_1S:

MOV R7,#0ffH

LOOP7: MOV R6,#0ffH

LOOP6: NOP

NOP

NOP

NOP

NOP

NOP

DJNZ R6,LOOP6

DJNZ R7,LOOP7

RET

;------------------------------

END



;=============兩機串口通訊程序(從機)=====================

;

; 功 能: 使用串行中斷,接收數(shù)據(jù)并顯示

; 硬件環(huán)境: 自制單片機實驗板

; 軟件環(huán)境: 偉福 V3.20

; Create date: 2004_07_26

; First Modify: 2004_07_26

; second Modify:

; Last Modify: 2004_07_26

; Author: Sujiande

;

;===========預定義===================



LED0 EQU 40H ;預定義數(shù)碼管

LED1 EQU 41H ;預定義數(shù)碼管

LED2 EQU 42H ;預定義數(shù)碼管

LED3 EQU 43H ;預定義數(shù)碼管

LED4 EQU 44H ;預定義數(shù)碼管

LED5 EQU 45H ;預定義數(shù)碼管

LED6 EQU 46H ;預定義數(shù)碼管

LED7 EQU 47H ;預定義數(shù)碼管

SDA BIT P0.1 ; 定義數(shù)據(jù)線引腳定義

SCL BIT P0.0 ; 定義時鐘線引腳定義

;---------------------------

ORG 0000H ;主程序入口

AJMP MAIN ;跳轉到主程序

ORG 0023H ;中斷入口地址

AJMP S_INT ;跳轉到中斷程序

ORG 0100H ;主程序在ROM中存放位置

;==============主程序========================

MAIN:

MOV LED0,#00H ;賦初值

MOV LED1,#00H

MOV LED2,#16 ;賦初值為16, 數(shù)碼管顯示代碼為: 滅

MOV LED3,#16

MOV LED4,#16

MOV LED5,#16

MOV LED6,#16

MOV LED7,#16

;------------------------------

MOV DPTR,#TABLE ; 賦顯示代碼首地址

ACALL DISPLAY ; 調顯示子程序

MOV SP, #30H ; 給堆棧指針賦初值

;--------------------------------------------

; 使用定時器1,作為波特率發(fā)生器,設定波特率=9600,

; 定時器初值為:FAH

; 串行控制器設置:SM0=0,SM1=1,SM2=0,REN=1,TB8=0,

; RB8=0,TI=0,RI=0 即0101 0000B

; 波特率加倍

;---------------------------------------------

MOV TMOD,#20H ;設置定時器1,工作方式2

MOV TH1,#0FAh ;賦初值: FA

MOV TL1,#0FAh ;賦初值: FA

MOV SCON, #50h ;設置串行口控制寄存器

MOV PCON, #80h ;設置電源控制寄存器, 讓波特率加倍(2X)

;---------------------------------------

SETB EA ; 啟動總中斷

SETB ES ; 啟動串行中斷

SETB TR1 ;啟動定時

AJMP $ ; 等待中斷



;*****************主程序結束************************





;===============中斷服務程序=============================

S_INT:

MOV R1, SBUF ;將緩沖區(qū)的數(shù)據(jù)送到R1



ACALL SEPERATE ;調拆分程序

ACALL DISPLAY ;調顯示子程序

CLR RI ;清接收中斷標志

RETI ;中斷返回



;=================拆分程序=====================

SEPERATE: MOV A,R1

ANL A,#0Fh ;與操作得到個位數(shù)據(jù)

MOV LED0,A ;個位送LED0

MOV A,R1

ANL A,#0F0H ;與操作得到十位數(shù)據(jù)

SWAP A ;

MOV LED1,A ;十位送LED1

RET







;===============顯示子程序======================



DISPLAY:

MOV A,LED0 ;查表數(shù)據(jù)送A

MOVC A,@A+DPTR ;查表,得到顯示代碼

ACALL SHIFT ;調移位子程序



MOV A,LED1

MOVC A,@A+DPTR

ACALL SHIFT



MOV A,LED2

MOVC A,@A+DPTR

ACALL SHIFT



MOV A,LED3

MOVC A,@A+DPTR

ACALL SHIFT



MOV A,LED4

MOVC A,@A+DPTR

ACALL SHIFT



MOV A,LED5

MOVC A,@A+DPTR

ACALL SHIFT



MOV A,LED6

MOVC A,@A+DPTR

ACALL SHIFT



MOV A,LED7

MOVC A,@A+DPTR

ACALL SHIFT

RET

;---------顯示代碼表---------

TABLE: DB 11H,0D7H,32H,92H,0D4H,98H,18H,0D3H,10H,90H ;0,1,2,3,4,5,6,7,8,9,

DB 50H,1CH,39H,16H,38H,78H, 0FFH,0FEH,0EFH ;10,11,12,13,14,15,滅,-



;================移位子程序============================

SHIFT: PUSH A ; 進棧暫存A值

MOV R0,#8 ; 循環(huán)8次

CLR C ;清進位標志

CLR SCL ;時鐘線,先鉗位為0

LP2: RLC A

MOV SDA,C

NOP

NOP

SETB SCL

NOP

NOP

CLR SCL

NOP

NOP

DJNZ R0,LP2

POP A ; 出?;謴虯值

RET

;=============延時子程序===============

DELAY_1S:

MOV R7,#0ffH

LOOP7: MOV R6,#0ffH

LOOP6: NOP

NOP

NOP

NOP

NOP

NOP

DJNZ R6,LOOP6

DJNZ R7,LOOP7

RET

;------------------------------

END

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多