單片機(jī)原理與應(yīng)用(C51編程+Proteus仿真) 課件 劉霞 第7、8章 單片機(jī)串行口、模數(shù)和數(shù)模轉(zhuǎn)換_第1頁(yè)
單片機(jī)原理與應(yīng)用(C51編程+Proteus仿真) 課件 劉霞 第7、8章 單片機(jī)串行口、模數(shù)和數(shù)模轉(zhuǎn)換_第2頁(yè)
單片機(jī)原理與應(yīng)用(C51編程+Proteus仿真) 課件 劉霞 第7、8章 單片機(jī)串行口、模數(shù)和數(shù)模轉(zhuǎn)換_第3頁(yè)
單片機(jī)原理與應(yīng)用(C51編程+Proteus仿真) 課件 劉霞 第7、8章 單片機(jī)串行口、模數(shù)和數(shù)模轉(zhuǎn)換_第4頁(yè)
單片機(jī)原理與應(yīng)用(C51編程+Proteus仿真) 課件 劉霞 第7、8章 單片機(jī)串行口、模數(shù)和數(shù)模轉(zhuǎn)換_第5頁(yè)
已閱讀5頁(yè),還剩101頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

單片機(jī)的串行口07介紹52單片機(jī)串行通信的基本概念、串行口的結(jié)構(gòu)、工作方式、雙機(jī)通信、多機(jī)通信以及計(jì)算機(jī)與計(jì)算機(jī)之間的通信。07單片機(jī)的串行口01串行通信基礎(chǔ)050203方式2及其應(yīng)用方式0及其應(yīng)用串行口內(nèi)部結(jié)構(gòu)04方式1及其應(yīng)用06方式3及其應(yīng)用07單片機(jī)與計(jì)算機(jī)的串行通信7.1串行通信基礎(chǔ)并行通信一、并行通信和串行通信AT89S52單片機(jī)內(nèi)部集成了一個(gè)全雙工異步通信串行口。串行通信通信線路復(fù)雜且成本高通信速度較快適合短距離傳輸,用得較少傳輸線少、成本低定義:串行通信中每秒傳送二進(jìn)制的位數(shù)12適合遠(yuǎn)距離傳輸,應(yīng)用廣泛通信速度慢!波特率單位:位/秒(bit/persecond)、

bps。7.1串行通信基礎(chǔ)二、同步串行通信和異步串行通信 同步串行通信12數(shù)據(jù)傳輸效率較高,采用同步時(shí)鐘,增加一條同步時(shí)鐘線異步串行通信不需要傳送同步脈沖,可靠性高,所需設(shè)備簡(jiǎn)單,傳輸速率低通信雙方必須保證兩點(diǎn):①相同的波特率;②相同的數(shù)據(jù)格式。7.1串行通信基礎(chǔ)三、串行通信的制式 單工方式1半雙工方式2全雙工方式3四、串行通信的錯(cuò)誤校驗(yàn) 奇偶校驗(yàn):數(shù)據(jù)位尾隨的1位為奇偶校驗(yàn)位123代碼和校驗(yàn):所發(fā)數(shù)據(jù)塊求和附加到數(shù)據(jù)塊末尾循環(huán)冗余校驗(yàn)(CRC):目前應(yīng)用最廣的檢錯(cuò)碼編碼方式之一7.1串行通信基礎(chǔ)五、串行通信標(biāo)準(zhǔn) TTL電平標(biāo)準(zhǔn)(5V)1輸出時(shí),電平≥2.4V,即為高電平“1”,

電平≤0.4V,即為低電平“0”;輸入時(shí),電平≥2.0V,即為高電平“1”,

電平≤0.8V,即為低電平“0”。通信距離在1.5m以內(nèi)。單片機(jī)雙機(jī)近距離TTL通信(1.5m以內(nèi))7.1串行通信基礎(chǔ)五、串行通信標(biāo)準(zhǔn) RS232C電平標(biāo)準(zhǔn)(負(fù)邏輯)2通信距離在15m以內(nèi)單片機(jī)雙機(jī)遠(yuǎn)距離RS232C通信(15m以內(nèi))高電平(1):-3V~-15V低電平(0):+3V~+15V單片機(jī)與計(jì)算機(jī)通信(15m以內(nèi))7.1串行通信基礎(chǔ)五、串行通信標(biāo)準(zhǔn) RS-485電平標(biāo)準(zhǔn)3最大傳輸距離約1219m,最大傳輸速率為10Mbit/s。單片機(jī)雙機(jī)遠(yuǎn)距離RS485通信高電平(1):

—(2~6)V低電平(0):+(2~6)V半雙工通信方式RS-232或485RS-232或485單片機(jī)甲乙兩地之間遠(yuǎn)距離通訊MCS-51TXD(甲)RXD

RXDMCS-51TXD(乙)07單片機(jī)的串行口01串行通信基礎(chǔ)050203方式2及其應(yīng)用方式0及其應(yīng)用串行口內(nèi)部結(jié)構(gòu)04方式1及其應(yīng)用06方式3及其應(yīng)用07單片機(jī)與計(jì)算機(jī)的串行通信7.2單片機(jī)串行口的內(nèi)部結(jié)構(gòu)7.2單片機(jī)串行口的內(nèi)部結(jié)構(gòu)【例】串口既可以發(fā)送數(shù)據(jù)又可以接收數(shù)據(jù),工作在方式1,配置SCON。SCON=0x50;//整字節(jié)賦值010

10000SM0=0;SM1=1;REN=1;//按位賦值7.2單片機(jī)串行口的內(nèi)部結(jié)構(gòu)【例】串行口方式2的波特率為0.375Mbps,晶振fosc為12MHz,配置PCON。PCON=0x80;//整字節(jié)賦值不能按位賦值

SMOD=107單片機(jī)的串行口01串行通信基礎(chǔ)050203方式2及其應(yīng)用方式0及其應(yīng)用串行口內(nèi)部結(jié)構(gòu)04方式1及其應(yīng)用06方式3及其應(yīng)用07單片機(jī)與計(jì)算機(jī)的串行通信7.3方式0及其應(yīng)用一、串行口方式0(同步移位寄存器方式)

方式0的設(shè)置:1SM0SM1=00234波特率:fosc/12,即單片機(jī)機(jī)器周期的頻率幀格式:8位數(shù)據(jù)為一幀,無(wú)起始位和停止位,先發(fā)送或接收最低位方式0的發(fā)送和接收工作過(guò)程:接收時(shí)序發(fā)送時(shí)序RXD:接收/發(fā)送數(shù)據(jù)TXD:移位脈沖串行口方式0中斷使用步驟:1、硬件連接:外接移位寄存器2、串口初始化:發(fā)送:SCON=0x00;接收:SCON=0x10;3、中斷初始化:EA=1;ES=1;4、發(fā)送數(shù)據(jù):

SBUF=data;4、中斷服務(wù)程序void函數(shù)名()interrupt4

{if(TI)

{TI=0;......

}if(RI)

{RI=0;

接收數(shù)據(jù):X=SBUF;

......}}串行口方式0查詢使用步驟:1、硬件連接:外接移位寄存器2、串口初始化:

發(fā)送:SCON=0x00;

接收:SCON=0x10;3、發(fā)送數(shù)據(jù):SBUF=data;4、查詢標(biāo)志位:TI/RI

while(TI==0);TI=0;或while(RI==0);

RI=0;接收數(shù)據(jù):X=SBUF;

7.3方式0及其應(yīng)用7.3方式0及其應(yīng)用二、并行輸出口擴(kuò)展仿真實(shí)例 任務(wù)要求:方式0擴(kuò)展并行輸出口,并行輸出口外接8個(gè)LED按流水方式亮滅。7.3方式0及其應(yīng)用二、并行輸出口擴(kuò)展仿真實(shí)例 硬件設(shè)計(jì)1任務(wù)要求:方式0擴(kuò)展并行輸出口,并行輸出口外接8個(gè)LED按流水方式亮滅。A、B:數(shù)據(jù)輸入Q0~Q7:數(shù)據(jù)輸出CLK:時(shí)鐘輸入

LED從上到下順序:D1D2D3D4D5D6D7D874LS174輸出端順序:Q0Q1Q2Q3Q4Q5Q6Q7串口輸出數(shù)據(jù)從高到低位順序:01111111D1點(diǎn)亮的編碼0x7fD2~D7點(diǎn)亮的編碼為0x7f循環(huán)右移D2點(diǎn)亮的編碼101111117.3方式0及其應(yīng)用二、并行輸出口擴(kuò)展仿真實(shí)例 軟件設(shè)計(jì)2任務(wù)要求:方式0擴(kuò)展并行輸出口,并行輸出口外接8個(gè)LED按流水方式亮滅。分析:8個(gè)LED按由上到下的順序流水點(diǎn)亮,串口方式0,串口中斷,循環(huán)發(fā)送數(shù)據(jù)#include<reg52.h>#include<intrins.h>//移位函數(shù)頭文件#defineucharunsignedchar#defineuintunsignedintsbitMR=P2^0;//74LS164復(fù)位引腳ucharLEDbuffer;//點(diǎn)亮發(fā)光二極管數(shù)據(jù)//串行口方式0中斷初始化voiduart_init(){SCON=0x00;//設(shè)置串行口為方式

ES=1; //允許串行口中斷

EA=1; //全局中斷允許}voidmain()

{ uart_init(); LEDbuffer=0x7f;//點(diǎn)亮D1

MR=1;//本例74LS164不需要復(fù)位

SBUF=LEDbuffer;//啟動(dòng)串行發(fā)送

while(1);}voidSerial_Port()interrupt4

{if(TI)//TI=1,發(fā)送完畢

{delay(500);//延時(shí)

LEDbuffer=_cror_(LEDbuffer,1);

SBUF=LEDbuffer;

}

TI=0;//清發(fā)送中斷標(biāo)志位}

7.3方式0及其應(yīng)用三、并行輸入口擴(kuò)展仿真實(shí)例 任務(wù)要求:方式0擴(kuò)展并行輸入口,通過(guò)8個(gè)按鍵分別控制8個(gè)LED的亮滅。7.3方式0及其應(yīng)用三、并行輸入口擴(kuò)展仿真實(shí)例 硬件設(shè)計(jì)1任務(wù)要求:方式0擴(kuò)展并行輸入口,通過(guò)8個(gè)按鍵分別控制8個(gè)LED的亮滅。按鍵從上到下順序:

B1B2B3B4B5B6B7B874LS175輸入端順序:D0D1D2D3D4D5D6D7LED從上到下順序:P27P26P25P24P23P22P21P20SO:數(shù)據(jù)輸出D0~D7:數(shù)據(jù)輸入CLK:時(shí)鐘輸入

B1按鍵,P2.7引腳控制的LED點(diǎn)亮B2按鍵,P2.6引腳控制的LED點(diǎn)亮7.3方式0及其應(yīng)用三、并行輸入口擴(kuò)展仿真實(shí)例 軟件設(shè)計(jì)2任務(wù)要求:方式0擴(kuò)展并行輸入口,通過(guò)8個(gè)按鍵分別控制8個(gè)LED的亮滅。分析:方式0,串口接收數(shù)據(jù),采用查詢方式#include<reg52.h>#defineucharunsignedchar #defineuintunsignedint sbitSH=P1^0;//74LS164控制端;ucharINbuffer;main(){

SCON=0x10;//方式0,可接收

while(1) {

while(!RI);//等待接收到數(shù)據(jù)

SH=0;//SH=0讀入S0~S7的狀態(tài)

delay(1);

SH=1;//SH=1串行讀入到串行口中

INbuffer=SBUF;//讀取串口數(shù)據(jù)

P2=INbuffer;//開(kāi)關(guān)狀態(tài)送P2口

RI=0;//清接收標(biāo)志位

}}7.4方式1及其應(yīng)用一、串行口方式1(8位異步通信方式)

方式1的設(shè)置:1SM0SM1=012波特率:

T1選擇定時(shí)器工作方式2,自動(dòng)重裝初值8位定時(shí)模式根據(jù)實(shí)際情況確定波特率,求T1的初值X晶振頻率fosc最好選擇11.0952MHz定時(shí)時(shí)間=(最大計(jì)數(shù)量-初值)*機(jī)器周期SMOD取值0或17.4方式1及其應(yīng)用【例】串口方式1,波特率為9600bps,晶振頻率為11.0592MHz,

求TL1、TH1中裝入的數(shù)值是多少?寫出初始化程序段。X=253(0xfd)

初始化程序段為:

SCON=0x40;

PCON=0x00;

TMOD=0x20;TL1=0xfd;TH1=0xfd;TR1=1;7.4方式1及其應(yīng)用常用波特率T1初值表單片機(jī)串口通信系統(tǒng)中,晶振常采用11.0592MHz,主要是因?yàn)榫д?2MHz,計(jì)算出的T1初值不是一個(gè)整數(shù),這樣通信會(huì)產(chǎn)生累計(jì)誤差,導(dǎo)致通信失敗。!7.4方式1及其應(yīng)用3幀格式:10位數(shù)據(jù)為一幀,1位起始位、8個(gè)數(shù)據(jù)位、1個(gè)停止位先發(fā)送低位方式1發(fā)送的工作過(guò)程41.串口初始化:SCON=0x40;PCON=0x00/0x80;2.T1初始化:TMOD=0x20;TH1=TL1=X;TR1=1;3.中斷初始化:ES=1;EA=1;(查詢方式不需要)4.發(fā)送數(shù)據(jù):SBUF=數(shù)據(jù);5.中斷服務(wù)程序:void函數(shù)名()interrupt4

或查詢:while(TI==0);

{TI=0;......}TI=0;7.4方式1及其應(yīng)用方式1接收的工作過(guò)程51.串口初始化:SCON=0x50;PCON=0x00/0x80;2.T1初始化:TMOD=0x20;TH1=TL1=X;TR1=1;3.中斷初始化:ES=1;EA=1;(查詢方式不需要)4.

中斷服務(wù)程序:void函數(shù)名()interrupt4

或查詢:while(RI==0);

{RI=0;RI=0;變量=SBUF;變量=SBUF;............

}7.4方式1及其應(yīng)用二、雙機(jī)通信的仿真實(shí)例任務(wù)要求:兩機(jī)方式1,fosc為11.0592MHz,波特率為4800bps,SMOD=1。

甲機(jī)循環(huán)發(fā)送0~9;查詢方式發(fā)送,虛擬終端觀察發(fā)送數(shù)據(jù);

乙機(jī)接收數(shù)據(jù),顯示在數(shù)碼管(共陽(yáng))上,中斷方式接收數(shù)據(jù)。7.4方式1及其應(yīng)用硬件設(shè)計(jì)17.4方式1及其應(yīng)用軟件設(shè)計(jì)2分析:甲機(jī)方式1,fosc=11.0592MHz,4800bps,SMOD=1,查詢,循環(huán)發(fā)送0~9#include<reg52.h>#defineucharunsignedchar#defineuintunsignedintucharcodesendbuf[]={0,1,2,3,4,5,6,7,8,9};voiddelay(uintXms);voiduart_init();/*********串口初始化*******voiduart_init(){

SCON=0x40; PCON=0x80;

TMOD=0x20; TH1=0xf4; TL1=0xf4; TR1=1;}voidmain()

{ucharindex=0;//發(fā)送數(shù)據(jù)索引

uart_init();//串口初始化

while(1){

SBUF=sendbuf[index];

while(TI==0);

TI=0;

index++;

if(index>=10)

index=0

delay(1000);}}乙機(jī)方式1,fosc=11.0592MHz,4800bps,SMOD=1,中斷接收,數(shù)碼管顯示#include<reg52.h>#defineucharunsignedcharucharcodeseg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};ucharreceivebuf;//定義接收緩沖voiduart_init();voidmain(void)

{

uart_init(); while(1);}voiduart_init(){

SCON=0x50;

PCON=0x80;//波特率加倍

TMOD=0x20;//T1定時(shí)方式2TH1=0xf4;TL1=0xf4;//2400b/sTR1=1;//啟動(dòng)T1ES=1;//開(kāi)串口中斷允許

EA=1; //開(kāi)總中斷

}voiduart_receive()interrupt4{

if(RI==1)//接收完成

{RI=0;

receivebuf=SBUF;

P2=seg[receivebuf];

}}7.5方式2及其應(yīng)用一、串行口方式2(9位異步通信方式)

方式2的設(shè)置:1SM0SM1=102波特率:

3幀格式:一幀11位,1位起始位、8個(gè)數(shù)據(jù)位、1位可編程位、1個(gè)停止位先發(fā)送低位【例】fosc

=11.0592MHz:SMOD=0,計(jì)算波特率。波特率=0.3456Mbit/s。波特率

=

0.1728Mbit/s;【例】fosc

=11.0592MHz:SMOD=1,計(jì)算波特率。7.5方式2及其應(yīng)用方式2發(fā)送的工作過(guò)程41.串口初始化:SCON=0x80;PCON=0x00/0x80;2.中斷初始化:ES=1;EA=1;(查詢方式不需要)3.發(fā)送數(shù)據(jù):TB8=0/1;SBUF=數(shù)據(jù);4.

中斷服務(wù)程序:void函數(shù)名()interrupt4

或查詢:while(TI==0);

{TI=0;TI=0;............

}方式2接收的工作過(guò)程51.串口初始化:SCON=0x90;PCON=0x00/0x80;2.中斷初始化:ES=1;EA=1;(查詢方式不需要)3.

中斷服務(wù)程序:void函數(shù)名()interrupt4

或查詢:while(RI==0);

{RI=0;

RI=0;變量=SBUF;變量=SBUF;......}......

接收到有效數(shù)據(jù)完畢,置位RI的條件:(1)REN=1,RI=0(2)且SM2=0或接收到第9位數(shù)據(jù)為1,此時(shí),數(shù)據(jù)裝載SBUF,RI置1,第9位數(shù)據(jù)(TB8)送入RB8。7.5方式2及其應(yīng)用二、帶奇偶校驗(yàn)的雙機(jī)通信仿真實(shí)例任務(wù)要求:方式2,fosc為11.0592MHz,波特率為0.3456Mbps,奇偶校驗(yàn)。

甲機(jī)查詢循環(huán)發(fā)送0~9,數(shù)碼管顯示(共陽(yáng))。乙機(jī)中斷接收后若結(jié)果無(wú)誤,接收數(shù)據(jù);若結(jié)果有誤,則拒絕

接收,把接收到的數(shù)據(jù)顯示在數(shù)碼管(共陽(yáng))上。7.5方式2及其應(yīng)用硬件設(shè)計(jì)17.5方式2及其應(yīng)用軟件設(shè)計(jì)2分析:甲機(jī)方式2,fosc=11.0592MHz,0.3456Mbps,查詢循環(huán)發(fā)送0~9,數(shù)碼管顯示#include<reg52.h>#defineucharunsignedchar#defineuintunsignedintvoiddelay(uintxms);ucharcodesendbuf[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09};ucharcodeseg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};voiduart_init(){

SCON=0x80; PCON=0x80;}voidmain(void){ uchari;

uart_init();

while(1)

{

for(i=0;i<10;i++) {

Senddata9(sendbuf[i]);

P2=seg[sendbuf[i]];

delay(1000);

}}}voidSenddata9(uchardat)

{

ACC=dat;

TB8=P;

SBUF=dat;

while(TI==0);

TI=0;}

乙機(jī)方式2,fosc=11.0592MHz,

0.3456Mbps,中斷接收,數(shù)碼管顯示#include<reg52.h>#defineucharunsignedchar#defineuintunsignedintvoiduart_init();//串口初始化函數(shù)ucharcodeseg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};ucharreceivebuf;//定義接收緩沖voidmain(void) {

uart_init();//串口初始化

while(1) {

P2=seg[receivebuf];}}voiduart_init(){

SCON=0x90; PCON=0x80;

ES=1;

EA=1; }voiduart_receive()interrupt4{

if(RI==1)

{ RI=0;

ACC=SBUF;

if(RB8==P)

receivebuf=ACC;

} }7.5方式2及其應(yīng)用7.6方式3及其應(yīng)用一、串行口方式3(9位異步通信方式)

方式3的設(shè)置:1SM0SM1=112波特率:3幀格式:一幀11位,1位起始位、8個(gè)數(shù)據(jù)位、1位可編程位、1個(gè)停止位

同方式1同方式2方式3發(fā)送的工作過(guò)程4方式3接收的工作過(guò)程5同方式2同方式27.6方式3及其應(yīng)用二、多機(jī)通信原理 主從式結(jié)構(gòu)是指多機(jī)系統(tǒng)中,只有一個(gè)主機(jī),其余全是從機(jī)。每一個(gè)從機(jī)都有獨(dú)立的地址,從機(jī)地址可設(shè)為0x01、0x02和0x03等。從機(jī)和從機(jī)之間不能進(jìn)行直接通信,只能經(jīng)主機(jī)才能實(shí)現(xiàn)。主機(jī)發(fā)送信息可被所有從機(jī)接收,從機(jī)發(fā)送的信息,只能主機(jī)接收。主從式結(jié)構(gòu)多機(jī)通信7.6方式3及其應(yīng)用二、多機(jī)通信原理 接收到有效數(shù)據(jù)完畢,置位RI的條件:(1)REN=1,RI=0

(2)且SM2=0或接收到第9位數(shù)據(jù)為1,此時(shí),數(shù)據(jù)裝載SBUF,RI置1,第9位數(shù)據(jù)(TB8)送入

RB8。

1.SM2=0:RB8=1或RB8=0

都使RI=1,接收數(shù)據(jù)送入SBUF。2.SM2=1:RB8=1,使RI=1并引發(fā)中斷,接收的數(shù)據(jù)送入SBUF。

RB8=0,信息丟失。在方式2、3中接收到的數(shù)據(jù)是否能裝載SBUF的條件:7.6方式3及其應(yīng)用二、多機(jī)通信原理 1.SM2=0:RB8=1或RB8=0

都使RI=1,接收數(shù)據(jù)送入SBUF。2.SM2=1:RB8=1,使RI=1并引發(fā)中斷,接收的數(shù)據(jù)送入SBUF。

RB8=0,信息丟失。主機(jī)1.SM2=02.主機(jī)發(fā)出從機(jī)地址

地址標(biāo)識(shí)

TB8=13.主機(jī)發(fā)出數(shù)據(jù)

數(shù)據(jù)標(biāo)識(shí)TB8=0從機(jī)1.SM2=12.從機(jī)接收到RB8=1,接收地址碼,判斷是否和本機(jī)地址碼相同,若相同,則SM2=0,若不同,則SM2=13.被尋中的從機(jī),接收RB8=0,且SM2=0

將主機(jī)發(fā)出的數(shù)據(jù)碼送入SBUF,

RI=1,

沒(méi)有被尋中的從機(jī),接收RB8=0,且SM2=1,不接收任何數(shù)據(jù)。7.6方式3及其應(yīng)用三、多機(jī)通信仿真實(shí)例任務(wù)要求:1+2主從式、方式3、晶振11.0592MHz、波特率9600bps主機(jī)按下1#從機(jī)通信按鍵,主機(jī)向1#從機(jī)循環(huán)發(fā)送“0~9”10個(gè)字符,按下2#從機(jī)通信按鍵,主機(jī)向2#從機(jī)循環(huán)發(fā)送“A~F”6個(gè)字符,主機(jī)用虛擬終端觀察發(fā)送的數(shù)據(jù)。從機(jī)數(shù)碼管(共陽(yáng))顯示7.6方式3及其應(yīng)用三、多機(jī)通信仿真實(shí)例任務(wù)要求:1+2主從式、方式3、晶振11.0592MHz、波特率9600bps主機(jī)按下1#從機(jī)通信按鍵,主機(jī)向1#從機(jī)循環(huán)發(fā)送“0~9”10個(gè)字符,按下2#從機(jī)通信按鍵,主機(jī)向2#從機(jī)循環(huán)發(fā)送“A~F”6個(gè)字符,主機(jī)用虛擬終端觀察發(fā)送的數(shù)據(jù)。從機(jī)數(shù)碼管(共陽(yáng))顯示7.6方式3及其應(yīng)用三、多機(jī)通信仿真實(shí)例主機(jī):串口方式3,晶振11.0592MHz、波特率9600bps

1#從機(jī)按鍵采用INT0,中斷函數(shù)設(shè)給1#機(jī)發(fā)送“0~9”字符標(biāo)志位

2#從機(jī)按鍵采用INT1,中斷函數(shù)設(shè)給2#機(jī)發(fā)送“A~F”字符標(biāo)志位voiduart_init(){SCON=0xc0;//方式3、禁止接收

PCON=0x00;

TMOD=0x20;//T1定時(shí)方式2TH1=TL1=0xfd;//9600bps SMOD=0TR1=1; //啟動(dòng)T1}voidEx_init(){IT0=1;//INT0下跳沿觸發(fā)

EX0=1;//開(kāi)INT0中斷允許

IT1=1;//INT1下跳沿觸發(fā)

EX1=1;//開(kāi)INT1中斷允許

EA=1;//開(kāi)總中斷}voidkey1_int()interrupt0{flag=1;//設(shè)標(biāo)志位,1#機(jī)通信

IE0=0;//清INT0中斷標(biāo)志位}voidkey2_int()interrupt2{flag=2;//設(shè)標(biāo)志位,2#機(jī)通信

IE1=0;//清INT1中斷標(biāo)志位}7.6方式3及其應(yīng)用主機(jī):串口方式3,晶振11.0592MHz、波特率9600bps

1#從機(jī)按鍵采用INT0,中斷函數(shù)設(shè)給1#機(jī)發(fā)送“0~9”字符標(biāo)志位

2#從機(jī)按鍵采用INT1,中斷函數(shù)設(shè)給2#機(jī)發(fā)送“A~F”字符標(biāo)志位voidkey_send(ucharnode_number){ delay(1000);uart_init();

TB8=1;

//發(fā)送地址碼

SBUF=node_number;//發(fā)送從機(jī)地址while(TI==0); //等待發(fā)送結(jié)束

TI=0;

//清TI標(biāo)志

TB8=0;

//發(fā)送數(shù)據(jù)碼switch(node_number)

{case1:

{

SBUF=str1[num1++];//1#從機(jī)數(shù)據(jù)幀if(num1>=10)num1=0;//修改發(fā)送指針break;}case2:

{SBUF=str2[num2++];//2#從機(jī)數(shù)據(jù)幀

if(num2>=6)num2=0;//修改發(fā)送指針

break;}default:break;

while(TI==0);//等待數(shù)據(jù)幀發(fā)送結(jié)束

TI=0;

}}1.SM2=02.主機(jī)發(fā)出從機(jī)地址

地址標(biāo)識(shí)

TB8=13.主機(jī)發(fā)出數(shù)據(jù)

數(shù)據(jù)標(biāo)識(shí)TB8=0主機(jī)7.6方式3及其應(yīng)用三、多機(jī)通信仿真實(shí)例主機(jī):串口方式3,晶振11.0592MHz、波特率9600bps

1#從機(jī)按鍵采用INT0,中斷函數(shù)設(shè)給1#機(jī)發(fā)送“0~9”字符標(biāo)志位

2#從機(jī)按鍵采用INT1,中斷函數(shù)設(shè)給2#機(jī)發(fā)送“A~F”字符標(biāo)志位#include<reg52.h>#defineucharunsignedchar#defineuintunsignedint#defineSlave1_ADDR1//1#從機(jī)地址#defineSlave2_ADDR2//2#從機(jī)地址voiddelay(uintxms);//延時(shí)函數(shù)voidEx_init();//中斷初始化voiduart_init();//串口初始化函數(shù)voidkey_send(ucharnode_number);ucharcodestr1[]="0123456789";//1#;ucharcodestr2[]="ABCDEF";//2#;ucharnum1=0,num2=0;ucharflag=0;//按鍵標(biāo)志位voidmain(){

Ex_init();while(1)

{ switch(flag){

case1:key_send(Slave1_ADDR);break;

case2:key_send(Slave2_ADDR);

break;

}}}7.6方式3及其應(yīng)用1#從機(jī):串口方式3,晶振11.0592MHz、波特率9600bps

1#從機(jī)接收“0~9”字符,數(shù)碼管顯示voiduart_init(){

SCON=0xf0;//方式3、多機(jī)通信、接收

TMOD=0x20;//T1定時(shí)方式2TH1=TL1=0xfd; //9600bpsTR1=1; //啟動(dòng)T1ES=1;EA=1; //開(kāi)中斷

}1.SM2=12.從機(jī)接收到RB8=1,接收地址碼,判斷是否和本機(jī)地址碼相同,若相同,則SM2=0,若不同,則SM2=13.被尋中的從機(jī),接收RB8=0,且SM2=0,將主機(jī)發(fā)出的數(shù)據(jù)碼送入SBUF,RI=1,

沒(méi)有被尋中的從機(jī),接收RB8=0,且SM2=1,不接收任何數(shù)據(jù)。voidreceive(void)interrupt4{RI=0;if(RB8==1){if(SBUF==Slave1_ADDR)SM2=0;return;}display(SBUF);SM2=1;}7.6方式3及其應(yīng)用1#從機(jī):串口方式3,晶振11.0592MHz、波特率9600bps

1#從機(jī)接收“0~9”字符,數(shù)碼管顯示voiddisplay(ucharch){if((ch>=48)&&(ch<=57))P2=seg[ch-48];elseif((ch>=65)&&(ch<=70))

P2=seg[ch-55];}#include<reg52.h>#defineSlave1_ADDR1#defineucharunsignedcharvoiduart_init();//串口初始化函數(shù)voiddisplay(ucharch);//顯示函數(shù)ucharcodeseg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//共陽(yáng)0-F段碼

/*************主函數(shù)*********/voidmain(){

uart_init();while(1);}2#從機(jī)程序和1#從機(jī)程序除從機(jī)地址不一樣以外,兩個(gè)從機(jī)程序完全一樣。0的ASCII:0x30(48)9的ASCII:0x39(57)A的ASCII:0x41(65)F的ASCII:0x70(46)!7.7單片機(jī)與計(jì)算機(jī)的串行通信計(jì)算機(jī)RS-232電平標(biāo)準(zhǔn):邏輯1:-3~-15V邏輯0:+3V~+15V單片機(jī)TTL電平標(biāo)準(zhǔn):邏輯1:2.0~5V邏輯0:0~0.8V

解決3個(gè)問(wèn)題:1.電平轉(zhuǎn)換電路設(shè)計(jì)

2.單片機(jī)程序設(shè)計(jì)

3.PC機(jī)程序設(shè)計(jì)7.7單片機(jī)與計(jì)算機(jī)的串行通信一、單片機(jī)與計(jì)算機(jī)通信基礎(chǔ)單片機(jī)串行通信接口1DB9插頭TTL電平計(jì)算機(jī)串行通信接口2RS232電平!單片機(jī)與計(jì)算機(jī)通信必須進(jìn)行電平轉(zhuǎn)換7.7單片機(jī)與計(jì)算機(jī)的串行通信TTL電平與RS232電平轉(zhuǎn)換電路3MAX232引腳及內(nèi)部結(jié)構(gòu)單片機(jī)與PC機(jī)RS232通信接口單片機(jī)與PC機(jī)電平轉(zhuǎn)換電路圖7.7單片機(jī)與計(jì)算機(jī)的串行通信單片機(jī)端接收或發(fā)送程序:4VB設(shè)計(jì)接收發(fā)送程序單片機(jī)向計(jì)算機(jī)和單片機(jī)向單片機(jī)發(fā)送數(shù)據(jù)的方法是完全一樣5計(jì)算機(jī)端接收或發(fā)送程序:C#設(shè)計(jì)接收發(fā)送程序C++設(shè)計(jì)接收發(fā)送程序Labview設(shè)計(jì)接收發(fā)送程序串口調(diào)試助手接收或發(fā)送7.7單片機(jī)與計(jì)算機(jī)的串行通信一、單片機(jī)與計(jì)算機(jī)通信基礎(chǔ)TTL電平?計(jì)算機(jī)或筆記本電腦沒(méi)有DB9插頭,單片機(jī)如何和電腦串行通信USB轉(zhuǎn)串口技術(shù)實(shí)現(xiàn)單片機(jī)與計(jì)算機(jī)之間通信。USB轉(zhuǎn)串口接口電路:CH340USB轉(zhuǎn)串口電路PL2303USB轉(zhuǎn)串口電路7.7單片機(jī)與計(jì)算機(jī)的串行通信二、單片機(jī)向計(jì)算機(jī)發(fā)送數(shù)據(jù)仿真實(shí)例任務(wù)要求:?jiǎn)纹瑱C(jī)晶振為11.0592MHz。串口方式1,波特率為9600bps。

單片機(jī)按下發(fā)送按鍵給計(jì)算機(jī)循環(huán)發(fā)送0~9,數(shù)碼管顯示;按下停止按鍵停止發(fā)送數(shù)據(jù),沒(méi)有按鍵按下時(shí),顯示“-”。

計(jì)算機(jī)接收數(shù)據(jù)(串口助手)。7.7單片機(jī)與計(jì)算機(jī)的串行通信任務(wù)要求:?jiǎn)纹瑱C(jī)晶振為11.0592MHz。串口方式1,波特率為9600bps。

單片機(jī)按下發(fā)送按鍵給計(jì)算機(jī)循環(huán)發(fā)送0~9,數(shù)碼管顯示;按下停止按鍵停止發(fā)送數(shù)據(jù),沒(méi)有按鍵按下時(shí),顯示“-”。

計(jì)算機(jī)接收數(shù)據(jù)(串口助手)。硬件電路設(shè)計(jì)1注意:COMPIM的RXD(輸出)和TXD(輸入)端的輸入輸出方向和實(shí)際計(jì)算機(jī)的RS232接口的RXD(輸入)和TXD(輸出)相反,在仿真連接上和實(shí)際連接不同。軟件設(shè)計(jì)2分析:?jiǎn)纹瑱C(jī)方式1,fosc=11.0592MHz,9800Mbps,按鍵循環(huán)發(fā)送0~9,數(shù)碼管顯示voiduart_init(){SCON=0x40;PCON=0x00;

TMOD=0x20;

TH1=0xfd;TL1=0xfd;;

TR1=1;}

voidEx_init(){IT0=1;

EX0=1;

IT1=1;EX1=1;EA=1;}發(fā)送按鍵采用INT0,中斷函數(shù)設(shè)標(biāo)志位flag=1(發(fā)送)停止按鍵采用INT1,中斷函數(shù)設(shè)標(biāo)志位flag=2(停止)voidkey1_int()interrupt0{

flag=1;//設(shè)標(biāo)志位發(fā)送

IE0=0;//清INT0中斷標(biāo)志位}voidkey2_int()interrupt2{

flag=2;//設(shè)按鍵停止發(fā)送標(biāo)志

IE1=0;//清INT1中斷標(biāo)志位}

voidkey_send(){

uart_init();

SBUF=sendbuf[index];

while(TI==0);

TI=0;

P2=seg[sendbuf[index]];index++;

if(index>=10)index=0;

delay(1000);}voidkey_stop(){

TR1=0;//flag=0;或TI=0都可以

} 7.7單片機(jī)與計(jì)算機(jī)的串行通信軟件設(shè)計(jì)2分析:?jiǎn)纹瑱C(jī)方式1,fosc=11.0592MHz,9800Mbps,按鍵循環(huán)發(fā)送0~9,數(shù)碼管顯示#include<reg52.h>#defineucharunsignedchar#defineuintunsignedintvoidEx_init(); //外部中斷初始化voiduart_init();//串口初始化voiddelay(uintxms);//延時(shí)函數(shù)voidkey_send();//按鍵發(fā)送函數(shù)voidkey_stop();//按鍵停止發(fā)送函數(shù)ucharcodeseg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};ucharcodesendbuf[]={0,1,2,3,4,5,6,7,8,9};ucharflag=0,index=0;//發(fā)送數(shù)據(jù)索引voidmain(){

Ex_init();//中斷初始化

while(1)

{ switch(flag)

{

case1:key_send();break;

case2:key_stop();break

default:P2=0xbf;break;

}}}7.7單片機(jī)與計(jì)算機(jī)的串行通信三、計(jì)算機(jī)向單片機(jī)發(fā)送數(shù)據(jù)仿真實(shí)例任務(wù)要求:?jiǎn)纹瑱C(jī)晶振為11.0592MHz。串口方式1,波特率為9600bps。

計(jì)算機(jī)向單片機(jī)發(fā)送數(shù)據(jù)1、2、3、4。

單片機(jī)接收到數(shù)據(jù)顯示在數(shù)碼管(共陽(yáng))上,收到1點(diǎn)亮1個(gè)LED,

收到2點(diǎn)亮2個(gè)LED,依次類推。7.7單片機(jī)與計(jì)算機(jī)的串行通信三、計(jì)算機(jī)向單片機(jī)發(fā)送數(shù)據(jù)仿真實(shí)例任務(wù)要求:?jiǎn)纹瑱C(jī)晶振為11.0592MHz。串口方式1,波特率為9600bps。

計(jì)算機(jī)向單片機(jī)發(fā)送數(shù)據(jù)1、2、3、4。

單片機(jī)接收到數(shù)據(jù)顯示在數(shù)碼管(共陽(yáng))上,收到1點(diǎn)亮1個(gè)LED,

收到2點(diǎn)亮2個(gè)LED,依次類推。7.7單片機(jī)與計(jì)算機(jī)的串行通信軟件設(shè)計(jì)2分析:?jiǎn)纹瑱C(jī)方式1,fosc=11.0592MHz,9800Mbps,接收1、2、3、4,數(shù)碼管顯示#include<reg52.h>#defineucharunsignedchar #defineuintunsignedintvoiduart_init();//串口初始化voiddelay(uintxms);//延時(shí)函數(shù)ucharcodeseg[]={0xc0,0xf9,0xa4,0xb0,

0x99,0x92,0x82,0xf8,0x80,0x90};voidmain(){ uchartemp=0;uart_init();//串口初始化

while(1){

while(RI==0};

RI=0;

temp=SBUF;

P2=seg[temp];switch(temp)

{case1:P1=0xfe;break;

case2:P1=0xfc;break;

case3:P1=0xf8;break;

case4:P1=0xf0;break;

default:P1=0xff;break;

}}}voiduart_init(){

SCON=0x50; PCON=0x00;

TMOD=0x20;//T1定時(shí)方式2 TH1=0xfd; TL1=0xfd;//9600b/s TR1=1;}

7.7單片機(jī)與計(jì)算機(jī)的串行通信單片機(jī)與計(jì)算機(jī)的遠(yuǎn)距離有線通信?邏輯1:+(2~6)V

邏輯0:-(2~6)V傳輸距離1200米半雙工方式485電平轉(zhuǎn)換芯片RS-485標(biāo)準(zhǔn):7.7單片機(jī)與計(jì)算機(jī)的串行通信單片機(jī)與手機(jī)的無(wú)線通信?ATK-HC05藍(lán)牙模塊藍(lán)牙無(wú)線通信手機(jī)單片機(jī)藍(lán)牙音箱藍(lán)牙耳機(jī)7.7單片機(jī)與計(jì)算機(jī)的串行通信單片機(jī)與手機(jī)的無(wú)線通信?ESP8266WIFI模塊WIFI無(wú)線通信手機(jī)單片機(jī)序號(hào)名稱說(shuō)明1UTXD發(fā)送引腳(與單片機(jī)RXD連接)2CH_PD3.3V(或接一個(gè)電阻4.7K)3RST復(fù)位4VCC電源(3.3V~5.0V)5GND地6GPIO2懸空7GPIO0懸空8TURXDD接收引腳(與單片機(jī)TXD連接)智能家用報(bào)警器廚房燃?xì)鈝ifi探測(cè)天然氣WIFI定時(shí)插座7.7單片機(jī)與計(jì)算機(jī)的串行通信WIFI無(wú)線通信WiFi互聯(lián)網(wǎng)工作原理:1、WiFi控制端軟件將數(shù)據(jù)發(fā)送到云端服務(wù)器上;2、服務(wù)器軟件處理數(shù)據(jù)后,發(fā)送給對(duì)應(yīng)地址設(shè)備3、數(shù)據(jù)經(jīng)服務(wù)器-互聯(lián)網(wǎng)=路由器=發(fā)送給串口WiFi模塊,模塊內(nèi)部將數(shù)據(jù)由TCP協(xié)議轉(zhuǎn)換為串口協(xié)議經(jīng)模塊串口端發(fā)送給MCU本章小結(jié)

A/D、D/A轉(zhuǎn)換接口設(shè)計(jì)08

介紹典型的并行A/D、D/A轉(zhuǎn)換芯片與AT89S52單片機(jī)的硬件接口設(shè)計(jì)以及程序設(shè)計(jì)。08A/D、D/A轉(zhuǎn)換接口設(shè)計(jì)01單片機(jī)與A/D轉(zhuǎn)換器的接口設(shè)計(jì)02單片機(jī)與D/A轉(zhuǎn)換器的接口設(shè)計(jì)8.1單片機(jī)與A/D轉(zhuǎn)換器的接口設(shè)計(jì)8.1.1模數(shù)轉(zhuǎn)換基本知識(shí)8.1單片機(jī)與A/D轉(zhuǎn)換器的接口設(shè)計(jì)8.1單片機(jī)與A/D轉(zhuǎn)換器的接口設(shè)計(jì)8.1.1模數(shù)轉(zhuǎn)換基本知識(shí)模擬量和數(shù)字量轉(zhuǎn)換原理1(a)△=(1/8)V(a)(b)(b)△/2=(1/15)V8.1單片機(jī)與A/D轉(zhuǎn)換器的接口設(shè)計(jì)8.1.1模數(shù)轉(zhuǎn)換基本知識(shí)A/D轉(zhuǎn)換類型2積分型優(yōu)點(diǎn):轉(zhuǎn)換精度高,抗干擾性能好,價(jià)格便宜。缺點(diǎn):轉(zhuǎn)換速度較慢,主要用于速度要求不高的場(chǎng)合。

逐次比較型優(yōu)點(diǎn):速度較快,精度較高,轉(zhuǎn)換時(shí)間在幾μs到幾百μs之間。

型優(yōu)點(diǎn):具有積分式和逐次比較式ADC的雙重優(yōu)點(diǎn),

線性度好,轉(zhuǎn)換速度和分辨率高。按轉(zhuǎn)換原理分類

8.1單片機(jī)與A/D轉(zhuǎn)換器的接口設(shè)計(jì)8.1.1模數(shù)轉(zhuǎn)換基本知識(shí)A/D轉(zhuǎn)換類型2按轉(zhuǎn)換精度分類

低精度:8位以下中等精度:9~12位高精度:13~16位超高精度:16為以上按轉(zhuǎn)換速度分類

低速:>1ms中速:1ms~10us高速:10us~1us超高速:<1us分辨率:用數(shù)字量的位數(shù)表示。8位、12位、16位轉(zhuǎn)換時(shí)間:完成一次轉(zhuǎn)換所需要的時(shí)間量程:所能轉(zhuǎn)換的輸入電壓范圍轉(zhuǎn)換誤差:實(shí)際輸出的數(shù)字量與理論輸出數(shù)字量之間的差別A/D轉(zhuǎn)換器主要性能指標(biāo)基于ADC0804的數(shù)字電壓表仿真實(shí)例8.1.2介紹模數(shù)轉(zhuǎn)換器ADC0804的使用。一、設(shè)計(jì)方案二、ADC0804芯片簡(jiǎn)介三、硬件電路設(shè)計(jì)四、軟件設(shè)計(jì)五、仿真任務(wù)要求:采用單片機(jī)設(shè)計(jì)0~5V數(shù)字電壓表,數(shù)碼管實(shí)時(shí)顯示,保留2位小數(shù)。一、設(shè)計(jì)方案分析:?jiǎn)纹瑱C(jī)采用AT89S520~5V連續(xù)可變的電壓是一個(gè)模擬信號(hào),所以,要先經(jīng)模數(shù)轉(zhuǎn)換器轉(zhuǎn)換為數(shù)字量再送入單片機(jī)。任務(wù)要求:采用單片機(jī)設(shè)計(jì)0~5V數(shù)字電壓表,數(shù)碼管實(shí)時(shí)顯示,保留2位小數(shù)。圖8-3數(shù)字電壓表設(shè)計(jì)方案逐次比較型A/D轉(zhuǎn)換器在精度、速度和價(jià)格上比較適中,在單片機(jī)系統(tǒng)設(shè)計(jì)中應(yīng)用較為廣泛。本例中采用ADC0804實(shí)現(xiàn)0~5V模擬電壓的轉(zhuǎn)換。選用4位共陽(yáng)數(shù)碼管顯示。二、ADC0804芯片簡(jiǎn)介(1)模擬輸入電壓范圍:0V~5V(2)分辨率:8位(0~255)

(3)

轉(zhuǎn)換時(shí)間:100us(4)參考電壓:2.5V(5)工作電壓:5V(6)逐次比較型模數(shù)轉(zhuǎn)換二、ADC0804芯片簡(jiǎn)介啟動(dòng)轉(zhuǎn)換時(shí)序/*****啟動(dòng)A/D轉(zhuǎn)換函數(shù)*****/voidstart(){

ADC_CS=0;

ADC_WR=1;_nop_();//延時(shí)

ADC_WR=0;//啟動(dòng)AD轉(zhuǎn)換

nop_();ADC_WR=1; }ADC_CSADC_WR二、ADC0804芯片簡(jiǎn)介讀取數(shù)據(jù)時(shí)序/*****讀取A/D轉(zhuǎn)換函數(shù)*****/unsignedcharreadADC(){

P1=0xff;

ADC_CS=0;ADC_RD=1;_nop_();ADC_RD=0;_nop_();

addat=P1;//讀取AD轉(zhuǎn)換值

ADC_RD=1;

returnaddat; }ADC_CSADC_RDP1三

、硬件電路設(shè)計(jì)任務(wù)要求:采用單片機(jī)設(shè)計(jì)0~5V數(shù)字電壓表,數(shù)碼管實(shí)時(shí)顯示,保留2位小數(shù)。四、

軟件設(shè)計(jì)任務(wù)要求:采用單片機(jī)設(shè)計(jì)0~5V數(shù)字電壓表,數(shù)碼管實(shí)時(shí)顯示,保留2位小數(shù)。(1)ADC0804啟動(dòng)模擬電壓采集:調(diào)用start()函數(shù)。(2)讀取ADC0804轉(zhuǎn)換結(jié)果:調(diào)用readADC()函數(shù)。

轉(zhuǎn)換時(shí)間:100us

方法3:

等待100us后讀取結(jié)果方法1:INTR引腳與單片機(jī)一個(gè)IO口線相連,查詢?yōu)榈碗娖?,讀取結(jié)果方法2:INTR引腳與單片機(jī)的外部中斷引腳相連,該引腳由高變低觸發(fā)中斷,在中斷服務(wù)程序中讀取結(jié)果四、

軟件設(shè)計(jì)任務(wù)要求:采用單片機(jī)設(shè)計(jì)0~5V數(shù)字電壓表,數(shù)碼管實(shí)時(shí)顯示,保留2位小數(shù)。(3)模數(shù)轉(zhuǎn)換的數(shù)字量需要轉(zhuǎn)換為電壓,然后再送數(shù)碼管顯示。標(biāo)度變換:將對(duì)應(yīng)的數(shù)字量大小轉(zhuǎn)換成有量綱的被測(cè)工程量數(shù)值。0V5V待求電壓(顯示的采集電壓)0255addat(轉(zhuǎn)換后的數(shù)字量)模擬電壓=數(shù)字量*最大電壓/255四、

軟件設(shè)計(jì)任務(wù)要求:采用單片機(jī)設(shè)計(jì)0~5V數(shù)字電壓表,數(shù)碼管實(shí)時(shí)顯示,保留2位小數(shù)。(4)0~5V模擬電壓,保留2位小數(shù),顯示在數(shù)碼管上。所以需要把模擬電

壓進(jìn)行百、十、個(gè)位分離。bai=dat*Vref/255;//標(biāo)度變換

shi=dat*10*Vref/255%10;//小數(shù)后1位

ge=dat*100*Vref/255%10;//小數(shù)后第2位模擬電壓=數(shù)字量*最大電壓/2552.50=128*5/255C語(yǔ)言中:128*5/255=2整數(shù)部分128*5*10/255%10=5取電壓小數(shù)后1位128*5*100/255%10=0取電壓小數(shù)后第2位四、

軟件設(shè)計(jì)任務(wù)要求:采用單片機(jī)設(shè)計(jì)0~5V數(shù)字電壓表,數(shù)碼管實(shí)時(shí)顯示,保留2位小數(shù)。(5)4位共陽(yáng)數(shù)碼管動(dòng)態(tài)顯示voiddisplay(uchardat){ucharbai,shi,ge;bai=dat*Vref/255;//標(biāo)度變換

shi=dat*10*Vref/255%10;//小數(shù)后1位

ge=dat*100*Vref/255%10;//小數(shù)后2位

w0=1;P0=table[ge];//顯示個(gè)位

delayms(1);P0=0xff;w0=0;w1=1;P0=table[shi];//顯示十位

delayms(1);P0=0xff;w1=0;w2=1;P0=0x7f;//顯示小數(shù)點(diǎn)

delayms(1);P0=0xff;w2=0;w3=1;P0=table[bai];//顯示百位

delayms(1);P0=0xff;w3=0;}/***毫秒延時(shí)子函數(shù)***/voiddelayms(uintz){

uintx,y;

for(x=z;x>0;x--)

for(y=111;y>0;y--);}ucharcodetable[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,

0xC6,0xA1,0x86,0x8E};//共陽(yáng)段碼任務(wù)要求:采用單片機(jī)設(shè)計(jì)0~5V數(shù)字電壓表,數(shù)碼管實(shí)時(shí)顯示,保留2位小數(shù)。#include<reg52.h>#include<intrins.h>#defineucharunsignedchar#defineuintunsignedintsbitADC_CS=P2^4;//ADC0804片選端sbitADC_RD=P2^5;//ADC0804讀信號(hào)sbitADC_WR=P2^6;//ADC0804啟動(dòng)信號(hào)sbitw0=P2^0;//個(gè)位sbitw1=P2^1;//十位sbitw2=P2^2;//小數(shù)點(diǎn)sbitw3=P2^3;//百位voiddelayms(uintz);//延時(shí)函數(shù)voidstart();//啟動(dòng)一次AD轉(zhuǎn)換ucharreadADC();//讀取AD轉(zhuǎn)換結(jié)果voiddisplay(uchardat);//數(shù)碼管顯示ucharcodetable[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92, 0x82,0xF8,0x80,0x90};//共陽(yáng)段碼uchari=0,addat,Vref=5;voidmain(){while(1){

start();//啟動(dòng)A/D轉(zhuǎn)換

display(addat);//顯示,也是延時(shí)

readADC();//讀取A/D轉(zhuǎn)換

}}五、仿真1在KeilC中編寫、編譯代碼,生成hex文件。任務(wù)要求:采用單片機(jī)設(shè)計(jì)0~5V數(shù)字電壓表,數(shù)碼管實(shí)時(shí)顯示,保留2位小數(shù)。五、仿真2在Preteus中繪制電路圖,加載hex文件運(yùn)行。任務(wù)要求:采用單片機(jī)設(shè)計(jì)0~5V數(shù)字電壓表,數(shù)碼管實(shí)時(shí)顯示,保留2位小數(shù)。8.1單片機(jī)與A/D轉(zhuǎn)換器的接口設(shè)計(jì)二、基于ADC0804的數(shù)字電壓表仿真實(shí)例任務(wù)要求:設(shè)計(jì)0~5V數(shù)字電壓表,通過(guò)數(shù)碼管實(shí)時(shí)顯示,保留2位小數(shù)。ADC0804芯片簡(jiǎn)介(1)高阻抗?fàn)顟B(tài)輸出(2)分辨率:8位(0~255)(3)存取時(shí)間:135ms(4)轉(zhuǎn)換時(shí)間:100ms(5)總誤差:-1~+1LSB(6)工作溫度:ADC0804C為0度~70度;ADC0804L為-40度~85度(7)模擬輸入電壓范圍:0V~5V(8)參考電壓:2.5V(9)工作電壓:5V(10)輸出為三態(tài)結(jié)構(gòu)(11)逐次比較型模數(shù)轉(zhuǎn)換8.1單片機(jī)與A/D轉(zhuǎn)換器的接口設(shè)計(jì)軟件濾波#definea10ucharvalue;ucharfilter(){

ucharnew_value;

new_value=readADC();

if((new_value-value>a)||(value-new_value>a)returnvalue;returnnew_value;}1.限幅濾波法將本次采樣值與上次采樣值進(jìn)行比較,若它們的差值超出允許范圍,則認(rèn)為本次采樣值受到了干擾,應(yīng)予易除。8.1單片機(jī)與A/D轉(zhuǎn)換器的接口設(shè)計(jì)軟件濾波#defineN11ucharfilter(){

ucharvalue_buf[N],temp;ucharcount,i,j;for(count=0;count<N;count++;)

{

value_buf[count]=readADC();delay();

}2.中值濾波法對(duì)被測(cè)參數(shù)連續(xù)采樣N次(N應(yīng)為奇數(shù));將這些采樣值進(jìn)行排序(增序或降序);選取中間值為本次采樣值。for(j=0;j<N-1;j++)//排序(增序)

{for(i=0;i<N-j;i++){if(value_buf[i]>value_buf[i+1]){

temp=value_buf[i];

value_buf[i]=value_buf[i+1];

value_buf[i+1]=temp;

}

}}returnvalue_buf[(N-1)/2];//返回中值}8.1單片機(jī)與A/D轉(zhuǎn)換器的接口設(shè)計(jì)軟件濾波#defineN12ucharfilter(){uintsum=0;for(count=0;count<N;count++){sum+=readADC();

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論