Proteus通過虛擬串口程序仿真51單片機(jī)串口的實(shí)現(xiàn)
1.參考文章下載地址:http://download.csdn.net/source/1927624
2.虛擬串口
3.串口調(diào)試助手
4.Proteus 7.5 sp3
實(shí)現(xiàn)方法
1.參考文章(參考文章是從CSDN下載的一篇PDF文件)已經(jīng)很詳細(xì)的說明了怎么實(shí)現(xiàn),我就不想啰嗦了,我只提供幾個(gè)關(guān)鍵的截圖和串口調(diào)試程序代碼
如果參考文章打不開我提供參考文章的下載連接
2.提供Proteus的連線圖如下:(值得注意的是單片機(jī)的RXD和TXD分別和串口的RXD和TXD一一對(duì)應(yīng)相連,這和用Proteus的虛擬終端給串口輸入信號(hào)時(shí),單片機(jī)和串口的連接方式是不一樣的,用Proteus的虛擬終端作為串口輸入信號(hào)的時(shí)候單片機(jī)的RXD和串口的TXD相連,是交錯(cuò)連接的)
注意:1.51單片機(jī)的晶振頻率我設(shè)置的是11.0592MHz,單片機(jī)載入的program file可以是HEX,也可以是BIN
2.SCMR表示單片機(jī)接收到的內(nèi)容,SCMT代表單片機(jī)發(fā)送出去的內(nèi)容
3.我的串口設(shè)置如下圖(主要設(shè)置波特率,這里是9600)
4.我的虛擬串口程序的抓圖如下
6.我串口調(diào)試工具的截圖如下:
7.最后附上串口調(diào)試所使用到的程序代碼(只寫了輸入調(diào)試的程序)
#include
void init();
void main()
{
init();
while(1)
{
while(!RI);//RI=1,判定為串口接收到了數(shù)據(jù),RI要清零,
RI=0;//否則就會(huì)進(jìn)入中斷,如果沒接收數(shù)據(jù)就一直在while循環(huán)
P1=SBUF;//如果介紹到數(shù)據(jù)就點(diǎn)亮第一個(gè)發(fā)光二極管
}
}
void init()
{
TMOD=0x20;//設(shè)置T1工作方式為方式2
TH1=0xfd;//給定時(shí)器高位裝初值
TL1=0xfd;//給定時(shí)器低位裝初值
TR1=1;//開定時(shí)器
//以上是設(shè)置波特率
SM0=0;//設(shè)置串口通訊方式為方式1
SM1=1;
REN=1;//串口是否接收數(shù)據(jù)的開關(guān)
}
8.最后提供一張調(diào)試成功的截圖