單片機(jī)i/o端口是數(shù)據(jù)輸入緩沖、數(shù)據(jù)輸出驅(qū)動(dòng)及鎖存多項(xiàng)功能i/o電路,是單片機(jī)對(duì)外部實(shí)現(xiàn)控制和信息交換的必經(jīng)之路。
at89s52單片機(jī)i/o端口有串行和并行之分,有p0、p1、p2和p3四個(gè)8位并行i/o端口,共占32根引腳,每一個(gè)i/o端口都能獨(dú)立地用作輸入或輸出;有1個(gè)串行i/o端口,一次只能傳送一位二進(jìn)制信息。
1.并行i/o端口
p0口為三態(tài)雙向口,p1、p2、p3口為準(zhǔn)雙向口。
(1)p0端口
p0口字節(jié)地址80h,位地址80h~87h。p0口除作為準(zhǔn)雙向通用i/o接口使用外,還有更重要的兩種功能:分時(shí)復(fù)用為地址總線和數(shù)據(jù)總線。p0口輸出時(shí)能驅(qū)動(dòng)8個(gè)lsttl負(fù)載,即輸出電流不小于800μa。p0口位結(jié)構(gòu)如圖1所示。
圖1 p0口位結(jié)構(gòu)
當(dāng)p0口用作輸出口使用時(shí),在驅(qū)動(dòng)nmos電路時(shí)應(yīng)外接上拉電阻;輸入操作有讀引腳和讀鎖存器之分。
(2)p1端口
p1口字節(jié)地址90h,位地址90h~97h。p1口只有作為通用輸入/輸出接口的功能。p0口位結(jié)構(gòu)如圖2所示。
圖2 p1口位結(jié)構(gòu)
at89s52的p1.0和p1.1是多功能引腳,p1.0可作定時(shí)器/計(jì)數(shù)器2的外部計(jì)數(shù)觸發(fā)輸入端t2,p1.1可作定時(shí)器/計(jì)數(shù)器2的外部控制輸入端t2ex。
(3)p2端口
p2口字節(jié)地址a0h,位地址a0h~a7h。p2口是一個(gè)8位準(zhǔn)雙向i/o口,具有兩種功能。一是作通用i/o口用,與p1口相同。二是作系統(tǒng)擴(kuò)展外部存儲(chǔ)器的高8位地址總線,輸出高8位地址,與p0口一起組成16位地址總線。p2口位結(jié)構(gòu)如圖3所示,
圖3 p2口位結(jié)構(gòu)
(4)p3端口
p3口字節(jié)地址b0h,位地址b0h~b7h。p3口也是一個(gè)8位準(zhǔn)雙向i/o口,既可以字節(jié)操作,也可以位操作;既可以8位口操作,也可以逐位定義口線為輸入線或輸出線;既可以讀引腳,也可以讀鎖存器,實(shí)現(xiàn)“讀一修改一輸出”操作。p3口的位結(jié)構(gòu)如圖4。
圖4 p3口位結(jié)構(gòu)
p3口除具有與p1口同樣的功能外,還具有第二功能,如表1所示
表1 p3口的第二功能
2.串行i/o端口
at89s52有一個(gè)全雙工的可編程串行i/o端口。這個(gè)串行i/o端口既可以在程序控制下將cpu的8位并行數(shù)據(jù)變成串行數(shù)據(jù)一位一位地從發(fā)送數(shù)據(jù)線txd發(fā)送出去,也可以把串行接收到的數(shù)據(jù)變成八位并行數(shù)據(jù)送給cpu,而且這種串行發(fā)送和串行接收可以單獨(dú)進(jìn)行,也可以同時(shí)進(jìn)行。
at89s52串行發(fā)送和串行接收利用了p3口的第二功能,即利用p3.1 引腳作為串行數(shù)據(jù)的發(fā)送線txd和p3.0引腳作為串行數(shù)據(jù)的接收線rxd。