找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 6552|回復(fù): 2
收起左側(cè)

MCS-51單片機(jī)實(shí)驗(yàn)指導(dǎo)書

[復(fù)制鏈接]
ID:115111 發(fā)表于 2016-5-16 03:10 | 顯示全部樓層 |閱讀模式
MCS-51單片機(jī)實(shí)驗(yàn)指導(dǎo)書

word格式的全書打包下載:http://www.torrancerestoration.com/bbs/dpj-50225-1.html

編者:朱飛鵬 趙勇

目錄
.              實(shí)驗(yàn)一  IO口的輸出應(yīng)用
一              實(shí)驗(yàn)?zāi)康?/font>
二              實(shí)驗(yàn)內(nèi)容
三              實(shí)驗(yàn)器材
四              實(shí)驗(yàn)步驟
五              附注
六              附注例程
.              實(shí)驗(yàn)二  IO口的輸入應(yīng)用
一              實(shí)驗(yàn)?zāi)康?/font>
二              實(shí)驗(yàn)內(nèi)容
三              實(shí)驗(yàn)器材
四              實(shí)驗(yàn)步驟
五              附注
六              實(shí)驗(yàn)附注例程
.              實(shí)驗(yàn)三  定時(shí)器中斷實(shí)驗(yàn)(PERIODIC INTERRUPT TIMER)
一              實(shí)驗(yàn)?zāi)康?/font>
二              實(shí)驗(yàn)內(nèi)容
三              實(shí)驗(yàn)器材
四              實(shí)驗(yàn)步驟
五              附注實(shí)驗(yàn)例程:
.              實(shí)驗(yàn)四  外部中斷的應(yīng)用
一  實(shí)驗(yàn)?zāi)康?/font>
二              實(shí)驗(yàn)內(nèi)容
三              實(shí)驗(yàn)器材
三              實(shí)驗(yàn)步驟
四              附注
五              實(shí)驗(yàn)附注例程
.              實(shí)驗(yàn)五  單片機(jī)串口的應(yīng)用
一              實(shí)驗(yàn)?zāi)康?/font>
二              實(shí)驗(yàn)內(nèi)容
三              實(shí)驗(yàn)器材
四              實(shí)驗(yàn)步驟
五              附注
六              附注例程



1
         
.             實(shí)驗(yàn)一  IO口的輸出應(yīng)用1   實(shí)驗(yàn)?zāi)康?/strong>
通過(guò)此次實(shí)驗(yàn)學(xué)習(xí)普通IO口作為輸出口的應(yīng)用。
2   實(shí)驗(yàn)內(nèi)容
我們通過(guò)普通IO口驅(qū)動(dòng)一個(gè)LED燈閃爍。(采用灌電流方式)
3   實(shí)驗(yàn)器材
STC89C52RC單片機(jī)、LED燈或?qū)嶒?yàn)箱。
4   實(shí)驗(yàn)步驟
  • Keil開(kāi)發(fā)環(huán)境下建立一個(gè)工程。
  • 程序的編寫。
  • 程序下載調(diào)試(可先進(jìn)行仿真)。
5   附注
采用灌電流的方式原因:因?yàn)閱纹瑱C(jī)輸出的電流比較小,當(dāng)然可以驅(qū)動(dòng)發(fā)光二極管,但是在很多時(shí)候,例如:我們驅(qū)動(dòng)數(shù)碼管的時(shí)候,會(huì)因?yàn)檩敵鲭娏鞅容^小,所以發(fā)光二極管不夠亮,所以當(dāng)我們采用灌電流的方式的時(shí)候可以避免這一點(diǎn)。
為了防止電流過(guò)大燒壞二極管,一般應(yīng)接200Ω左右的限流電阻。
6   附注例程
#include

#define unint unsigned int
#define unchar unsigned char

sbit Led = P1^0;              //位定義

void delay(unint k)                               //延時(shí)函數(shù)
{
              unint i;
              for(k;k>0;k--)
                            for(i=0;i<121;i++);
}

void main()
{
              while(1)              //死循環(huán)
              {
                            Led = 0;                                          //灌電流方式,低電平點(diǎn)亮
                            delay(1000);
                            Led = 1;
                            delay(1000);
              }
}

匯編源代碼:
                            LED                            EQU                            P1.0                 ;宏定義

                            ORG              0000H                                             ;起始地址
                            JMP                            MAIN

                            ORG              0100H                                             ;主程序起始地址
MAIN:              CLR                            LED                                                           ;點(diǎn)亮二極管
                            LCALL              DELAY                                             ;延時(shí)
                            SETB              LED                                                           ;息滅二極管
                            LCALL              DELAY
                            SJMP              MAIN                                             ;相當(dāng)于C語(yǔ)言中的死循環(huán)

DELAY:              MOV              R6,#200                                             ;延時(shí)函數(shù)
DEL1:              MOV              R7,#221
                            NOP
DEL2:              DJNZ              R7,DEL2
                            DJNZ              R6,DEL1
                            RET

                            END

附實(shí)驗(yàn)仿真圖:
2.001.jpg


1
         
.             實(shí)驗(yàn)二  IO口的輸入應(yīng)用1   實(shí)驗(yàn)?zāi)康?/strong>
通過(guò)此次實(shí)驗(yàn)學(xué)習(xí)普通IO口作為輸入口的應(yīng)用,并結(jié)合輸入輸出方式熟練掌握IO口的應(yīng)用
2   實(shí)驗(yàn)內(nèi)容
采用按鍵控制一個(gè)LED燈的亮滅。
3   實(shí)驗(yàn)器材
STC89C52RC 單片機(jī)、LED燈,獨(dú)立按鍵或?qū)嶒?yàn)箱。
4   實(shí)驗(yàn)步驟
  • Keil開(kāi)發(fā)環(huán)境下建立一個(gè)工程。
  • 程序的編寫,采用查詢方式判斷鍵是否按下,并確定是否點(diǎn)亮二極管。
  • 程序下載調(diào)試(可先進(jìn)行仿真)。
5   附注
按鍵控制LED燈的亮滅,我們可以采用外部中斷的方式(實(shí)驗(yàn)四會(huì)講),獨(dú)立按鍵的接法希望大家注意,直接接地,在沒(méi)有按鍵的情況下IO口為高電平(注:因?yàn)楸緦?shí)驗(yàn)中按鍵接P1口,內(nèi)部集成上拉電阻。若使用P0口作為通用IO口使用時(shí)必須外接500Ω左右的上拉電阻。見(jiàn)實(shí)驗(yàn)四附圖2),當(dāng)有按鍵按下時(shí)IO口為低電平。
6   實(shí)驗(yàn)附注例程
#include

#define unint unsigned int
#define unchar unsigned char

sbit Led = P1^0;
sbit Key = P1^1;                              //位定義

void main()
{
              while(1)                                          //死循環(huán)
              {
                            if(!Key)                            //判斷是否按下按鍵,按下為0
                                          Led = 0;              //點(diǎn)亮燈
                            else
                                          Led = 1;
              }
}


匯編代碼:
                            LED                                          EQU                            P1.0
                            KEY                            EQU                            P1.1

                            ORG              0000
                            JMP                            MAIN

                            ORG              0100
MAIN:              JB                            KEY,LIGHT   ;判斷鍵是否按下
                            CLR                            LED
                            SJMP              MAIN
LIGHT:              SETB              LED
                            SJMP              MAIN

                            END

附實(shí)驗(yàn)仿真電路:

2.002.jpg
注:若使用實(shí)驗(yàn)箱,開(kāi)關(guān)接P1.1即可。


1
         
.             實(shí)驗(yàn)三  定時(shí)器中斷實(shí)驗(yàn)(Periodic Interrupt Timer)1   實(shí)驗(yàn)?zāi)康?/strong>
掌握定時(shí)器相關(guān)寄存器的配置,以及定時(shí)時(shí)間的計(jì)算等
2   實(shí)驗(yàn)內(nèi)容
定期器中斷及查詢方式控制P1.0口輸出方波,用實(shí)驗(yàn)箱上的示波器觀察波形,不同定時(shí)值對(duì)其影響。
3   實(shí)驗(yàn)器材
STC89C51RC或?qū)嶒?yàn)箱。
4   實(shí)驗(yàn)步驟
  • Keil開(kāi)發(fā)環(huán)境下建立一個(gè)工程。
  • 程序的編寫,
a.定時(shí)常數(shù)的確定
     定時(shí)器/計(jì)數(shù)器的輸入脈沖周期與機(jī)器周期一樣, 為振蕩頻率的1/12。本實(shí)驗(yàn)中時(shí)鐘頻率為6.0 MHZ,現(xiàn)要采用中斷方法來(lái)實(shí)現(xiàn)0.5秒延時(shí),要在定時(shí)器1中設(shè)置一個(gè)時(shí)間常數(shù),使其每隔0.1秒產(chǎn)生一次中斷,CPU響應(yīng)中斷后將R0中計(jì)數(shù)值減一,令R0=05H,即可實(shí)現(xiàn)0.5秒延時(shí)。
    時(shí)間常數(shù)可按下述方法確定:
    機(jī)器周期=12÷晶振頻率=12/(6×106)=2us
    設(shè)計(jì)數(shù)初值為X,則(2e+16-X)×2×106=0.1,可求得X=15535
    化為十六進(jìn)制則X=3CAFH,故初始值為TH1=3CH,TL1=AFH
b.初始化程序
     包括定時(shí)器初始化和中斷系統(tǒng)初始化,主要是對(duì)IE、TCON、TMOD的相應(yīng)位進(jìn)行正確的設(shè)置,并將時(shí)間常數(shù)送入定時(shí)器中。由于只有定時(shí)器中斷,IP便不必設(shè)置。
c.設(shè)計(jì)中斷服務(wù)程序和主程序
     中斷服務(wù)程序除了要完成計(jì)數(shù)減一工作外,還要將時(shí)間常數(shù)重新送入定時(shí)器中,為下一次中斷做準(zhǔn)備。
3              程序下載調(diào)試
4              附注:定時(shí)器常用方式1和方式2(在實(shí)驗(yàn)五  單片機(jī)串口的應(yīng)用中用到),方式2 為自動(dòng)重裝計(jì)數(shù)初值的8位定時(shí)器,主要用于串行通信中波特率的產(chǎn)生和短時(shí)精確定時(shí)(因?yàn)椴槐剀浖匮b初值所以更精確)。
5   附注實(shí)驗(yàn)例程:
#include

#define unchar unsigned char
#define unint unsigned int

sbit fangbo = P1^0;

void main()
{
              TMOD = 0x01;                            //定時(shí)器0工作方式1
              TH0 = 0x3c;
              TL0 = 0xb0;                                                        //裝入定時(shí)器初值定時(shí)50ms
              ET0 = 1;                                          //定時(shí)器0中斷允許
              EA = 1;                                          //總中斷允許
              TR0 = 1;                                          //定時(shí)器0開(kāi)始計(jì)時(shí)
              while(1);                                          //等待
}

void time0() interrupt 1                                            //定時(shí)器0中斷服務(wù)函數(shù)
{
              TH0 = 0x3c;
              TL0 = 0xb0;                                                                                                    //重裝計(jì)數(shù)器值
              fangbo=~fangbo;                                                                        //P1.0取反,產(chǎn)生方波
}
對(duì)應(yīng)匯編代碼:
                                          FANGBO                            EQU                            P1.0

                                          ORG                                          0000H
                                          LJMP                                          MAIN
                                          ORG                                          000BH
                                          LJMP                                          TIME

                                          ORG                                          0010H
MAIN:                            MOV                                          TMOD,#01H
                                          MOV                                          TH0,#03CH
                                          MOV                                          TL0,#0B0H
                                          SETB                                          ET0
                                          SETB                                          EA
                                          SETB                                          TR0
                                          SJMP                                          $                                          ;等待

TIME:                            MOV                                          TH0,#03CH
                                          MOV                                          TL0,#0B0H
                                          CPL                                                        FANGBO
                                          RETI

                                          END
查詢方式C代碼:
#include

#define unchar unsigned char
#define unint unsigned int

sbit fangbo = P1^0;

void main()
{
              TMOD = 0x01;                            //定時(shí)器0工作方式1
              TH0 = 0x3c;
              TL0 = 0xb0;                                                        //裝入定時(shí)器初值定時(shí)50ms
              ET0 = 1;                                          //定時(shí)器0中斷允許
              EA =0;                                                        //總中斷允許
              TR0 = 1;                                          //定時(shí)器0開(kāi)始計(jì)時(shí)
              while(1)                               //死循環(huán)
              {
                            while(!TF0);              //查詢中斷標(biāo)志并等待
                            TF0 = 0;                            //清除標(biāo)志
                            TH0 = 0x3c;
                            TL0 = 0xb0;                            //重裝初值
                            fangbo=~fangbo;                                                                        //P1.0取反,產(chǎn)生方波
              }
}
對(duì)應(yīng)匯編代碼:
                                          FANGBO                            EQU                            P1.0

                                          ORG                                          0000H
                                          LJMP                                          MAIN

                                          ORG                                          0010H
MAIN:                            MOV                                          TMOD,#01H
                                          MOV                                          TH0,#03CH
                                          MOV                                          TL0,#0B0H
                                          SETB                                          ET0
                                          SETB                                          TR0
TIME:                            JNB                                                        TF0,$
                                          MOV                                          TH0,#03CH
                                          MOV                                          TL0,#0B0H
                                          CLR                                                        TF0
                                          CPL                                                        FANGBO
                                          SJMP                                          TIME

                                          END
附實(shí)驗(yàn)仿真電路:
2.003.jpg
注:實(shí)驗(yàn)箱中有模擬示波器,可通過(guò)電腦觀察波形。




.             實(shí)驗(yàn)四  外部中斷的應(yīng)用一  實(shí)驗(yàn)?zāi)康?/strong>
通過(guò)此次實(shí)驗(yàn)學(xué)習(xí)51單片機(jī)外部中斷的使用,并結(jié)合輸入輸出方式熟練掌握外部中斷的應(yīng)用
二              實(shí)驗(yàn)內(nèi)容
采用按鍵以中斷方式控制一個(gè)LED燈的亮滅。
三              實(shí)驗(yàn)器材
STC89C52RC 單片機(jī)、LED燈,獨(dú)立按鍵或?qū)嶒?yàn)箱。
三              實(shí)驗(yàn)步驟
  • Keil開(kāi)發(fā)環(huán)境下建立一個(gè)工程。
  • 程序的編寫,采用中斷方式判斷鍵是否按下,并確定是否點(diǎn)亮二極管。
  • 程序下載調(diào)試(可先進(jìn)行仿真)。
四              附注
中斷方式可以提高CPU的效率,當(dāng)發(fā)生中斷事件時(shí)處理器可快速響應(yīng)中斷,沒(méi)有中斷事件時(shí)處理器正常工作,不必時(shí)刻查詢中斷事件的發(fā)生與否,提高代碼效率。
本例中,若采用電平觸發(fā)方式,則Key為低電平時(shí)Led亮,否則Led息滅;若采用邊沿觸發(fā)方式,則Key的每個(gè)下降沿,即Key由高變?yōu)榈蜁r(shí),Led的狀態(tài)改變一次。
五              實(shí)驗(yàn)附注例程
#include

#define unchar unsigned char
#define unint unsigned int

sbit Led = P1^0;
sbit Key = P3^2;                            //外部中斷0引角

void main()
{
              IT0 = 0;  //外部中斷0采用電平觸發(fā)方式;邊沿觸發(fā)為1下降沿有效
              EA = 1;   //中斷允許
              EX0 = 1;  //開(kāi)外部中斷0
              while(1);
}

void int0() interrupt 0
{
              Led = 0;                              //Led 亮
              while(Key == 0);  //等待鍵釋放
              Led = 1;                              // Led 滅
}
/*
void int0() interrupt 0                               //邊沿觸發(fā)方式中斷函數(shù)。每次Key下降沿改變Led狀態(tài)
{
              Led = ~Led;       //改變Led狀態(tài)
}
*/
對(duì)應(yīng)匯編代碼:
                                          KEY                                          EQU                            P3.2
                                          LED                                                        EQU                            P1.0

                                          ORG                                          0000H
                                          LJMP                                          MAIN
                                          ORG                                          0003H
                                          LJMP                                          INIT

                                          ORG                                          0010
MAIN:                            CLR                                                        IT0                               ;電平觸發(fā)方式,邊沿觸發(fā)為SETB              IT0
                                          SETB                                          EA
                                          SETB                                          EX0
                                          SJMP                                          $
INIT:                            CLR                                                        LED
                                          JNB                                                        KEY,$
                                          SETB                                          LED
                                          RETI
;INIT:                            CPL                                                        LED                                          ;邊沿觸發(fā)方式中斷程序

                                          END
附實(shí)驗(yàn)仿真電路:
2.004.jpg
附圖1
2.005.jpg
附圖2  P0口上拉電阻






.             實(shí)驗(yàn)五  單片機(jī)串口的應(yīng)用1   實(shí)驗(yàn)?zāi)康?/strong>
通過(guò)此次實(shí)驗(yàn)學(xué)習(xí)單片機(jī)串口的應(yīng)用,掌握串口相關(guān)寄存器的配置,并學(xué)會(huì)用串口做簡(jiǎn)單的雙機(jī)通信。
2   實(shí)驗(yàn)內(nèi)容
通過(guò)串口實(shí)現(xiàn)雙機(jī)通信,用Key控制發(fā)光二極管。
3   實(shí)驗(yàn)器材
STC89C52RC單片機(jī)、LED燈或?qū)嶒?yàn)箱。
4   實(shí)驗(yàn)步驟
  • Keil開(kāi)發(fā)環(huán)境下建立一個(gè)工程。
  • 程序的編寫。
  • 程序下載調(diào)試(可先進(jìn)行仿真)。
5   附注
51單片機(jī)串行口的SBUF有兩個(gè):接收SBUF和發(fā)送SBUF,二者在物理結(jié)構(gòu)上是獨(dú)立的,單片機(jī)用它們來(lái)接收和發(fā)送數(shù)據(jù)。串行通訊的波特率隨串行口工作方式選擇的不同而不同,它除了與系統(tǒng)的振蕩頻率f,電源控制寄存器PCON的SMOD位有關(guān)外,還與定時(shí)器T1的設(shè)置有關(guān)。
     1、在工作方式0時(shí),波特率固定不變,僅與系統(tǒng)振蕩頻率有關(guān),其大小為f/12。
     2、在工作方式2時(shí),波特率也只固定為兩種情況:
        當(dāng)SMOD=1時(shí), 波特率=f/32
        當(dāng)SMOD=0時(shí), 波特率=f/64
     3、在工作方式1和3時(shí),波特率是可變的:
        當(dāng)SMOD=1時(shí), 波特率=定時(shí)器T1的溢出率/16
        當(dāng)SMOD=0時(shí), 波特率=定時(shí)器T1的溢出率/32
        其中,定時(shí)器T1的溢出率=f/(12*(256-N)),N為T1的定時(shí)時(shí)間常數(shù)。
    在實(shí)際應(yīng)用中,往往是給定通訊波特率,而后去確定時(shí)間常數(shù)。例如:f=6.144MHZ,波特率等于1200,SMOD=0時(shí),則1200=6144000/(12*32*(256-N)),計(jì)算得N=F2H。
     本例程中設(shè)置串行口工作于方式1,SMOD=0,波特率為1200。
6    附注例程
中斷方式C代碼:
#include

#define unchar unsigned char
#define unint unsigned int

sbit Key = P1^1;
sbit Led = P1^0;

void uartsend(unchar dat);

void Uartsend(unchar k)                                                                        //串口發(fā)送子函數(shù)
{
              SBUF = k;                                                                         //發(fā)送數(shù)據(jù)
              while(!TI);                                                                         //待待發(fā)送結(jié)束
}                                                                                   

void main()
{
              unchar tmp;
              TMOD = 0x20;                            //定時(shí)器1工作方式2
              TH1 = 0xfa;
              TL1 = 0xfa;                                          //裝入定時(shí)器初值11.0592M晶振,波特率4800
              PCON = 0;                                          //波特率不倍增
              ET1 = 0;                                                        //定時(shí)器1中斷允許
              EA = 1;                                                        //總中斷允許
              ES = 1;                                                        //串口中斷允許
              TR1 = 1;                                                        //定時(shí)器0開(kāi)始計(jì)時(shí)
              SCON = 0x50;                            //串口工作方工1,準(zhǔn)備接收
              while(1)                                                        //死循環(huán)
              {
                            if(Key)                                          //判斷是否有鍵按下
                            {
                                          Uartsend(0xaa);                              //用串口發(fā)送0xaa
                                          while(Key);                                            //等待鍵釋放
                            }
                            else
                            {
                                          Uartsend(0x55);                                          
                                          while(!Key);
                            }
              }
}

void uart() interrupt 4
{
              unchar temp;
              if(RI)                                                                                    //判斷是否為接收中斷
              {
                            temp = SBUF;                                                          //讀數(shù)據(jù)
                            switch(temp)                                                          //判斷數(shù)據(jù)
                            {
                                          case 0x55:Led = 1;break;
                                          case 0xaa:Led = 0;break;
                                          default:break;
                            }
                            RI = 0;                                                                      //清除中斷標(biāo)志
              }            
              TI = 0;                                                                                    //清除中斷標(biāo)志                                                                     
}

對(duì)應(yīng)匯編代碼:
                                          KEY                            EQU                            P1.1
                                          LED                                          EQU                            P1.0

                                          ORG                            0000H
                                          LJMP                            MAIN
                                          ORG                            0023H
                                          LJMP                            UART

                                          ORG                            0100H
MAIN:                            MOV                            TMOD,#020H
                                          MOV                            TH1,#0FAH
                                          MOV                            TL1,#0FAH
                                          MOV                            PCON,#00H
                                          CLR                                          ET1
                                          SETB                            EA
                                          SETB                            ES
                                          SETB                            TR1
                                          MOV                            SCON,#050H
KEYLED:              JNB                                          KEY,OFFL
                                          MOV                            SBUF,#0AAH
KEY0:                            JB                                          KEY,$
OFFL:                            MOV                            SBUF,#055H
KEY1:                            JNB                                          KEY,$
                                          SJMP                            KEYLED

UART:                            JNB                                          RI,RRET
                                          CLR                                          RI
                                          MOV                            R7,SBUF
                                          CJNE                            R7,#0AAH,OFFLED
                                          CLR                                          LED
                                          SJMP                            RRET
OFFLED:              SETB                            LED
RRET:                            CLR                                          TI
                                          RETI

                                          END
查詢方式C代碼:
#include

#define unchar unsigned char
#define unint unsigned int

sbit Key = P1^1;
sbit Led = P1^0;

void uartsend(unchar dat)                               //串口發(fā)送子函數(shù)
{
              SBUF = dat;                                                                         //發(fā)送數(shù)據(jù)
              while(!TI);                                                                         //待待發(fā)送結(jié)束
              TI = 0;                                                                                       //清除中斷標(biāo)志
}

void uartrec()                                                                      //串口接收數(shù)據(jù)子函數(shù)
{
              unchar temp;
              if(RI)
              {
                            temp = SBUF;                              //讀數(shù)據(jù)
                            switch(temp)                              //判斷數(shù)據(jù)
                            {
                                          case 0x55:Led = 1;break;
                                          case 0xaa:Led = 0;break;
                                          default:break;
                            }
                            RI = 0;                                                                      //清除中斷標(biāo)志
              }            
}                                                                                   

void main()
{
              TMOD = 0x20;                            //定時(shí)器1工作方式2
              TH1 = 0xfa;
              TL1 = 0xfa;                                          //裝入定時(shí)器初值11.0592M晶振,波特率4800
              PCON = 0;                                          //波特率不倍增
              ET1 = 0;                                          //定時(shí)器0中斷允許
              EA = 0;                                                        //總中斷關(guān)閉
              ES = 1;                                                        //串口中斷允許
              TR1 = 1;                                          //定時(shí)器0開(kāi)始計(jì)時(shí)
              SCON = 0x50;                            //串口工作方工1,準(zhǔn)備接收
              while(1)
              {
                            if(Key)                                                                         //判斷鍵是否按下
                            {
                                          uartsend(0xaa);
                                          while(Key)uartrec();                //等鍵釋放并接收數(shù)據(jù)
                            }
                            uartsend(0x55);
                            while(!Key)uartrec();
              }
}
對(duì)應(yīng)匯編代碼:
                                          KEY                            EQU                            P1.1
                                          LED                                          EQU                            P1.0

                                          ORG                            0000H
                                          LJMP                            MAIN

                                          ORG                            0100H
MAIN:                            MOV                            TMOD,#020H
                                          MOV                            TH1,#0FAH
                                          MOV                            TL1,#0FAH
                                          MOV                            PCON,#00H
                                          CLR                                          ET1
                                          CLR                                          EA
                                          SETB                            ES
                                          SETB                            TR1
                                          MOV                            SCON,#050H
KEYLED:              JNB                                          KEY,OFFL
                                          MOV                            SBUF,#0AAH
                                          JNB                                          TI,$
                                          CLR                                          TI
                                          SJMP                            KEY1
OFFL:                            MOV                            SBUF,#055H
                                          JNB                                          TI,$
                                          CLR                                          TI
KEY0:                            JB                                          KEY,KEYLED
                                          LCALL                            UARTRI
                                          SJMP                            KEY0
KEY1:                            JNB                                          KEY,OFFL
                                          LCALL                            UARTRI
                                          SJMP                            KEY1
UARTRI:                            JNB                                          RI,RETT
                                          CLR                                          RI
                                          MOV                            R7,SBUF
                                          CJNE                            R7,#0AAH,OFFLED
                                          CLR                                          LED
RETT:                            RET
OFFLED:              SETB                            LED
                                          SJMP                            RETT
                                          END
附實(shí)驗(yàn)仿真電路:
2.006.jpg                            
注:MCU1的TX接MCU2的RX,MCU1的RX接MCU2的TX。



相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

ID:63317 發(fā)表于 2016-5-17 12:08 | 顯示全部樓層
謝謝分享資料
回復(fù)

使用道具 舉報(bào)

ID:121636 發(fā)表于 2016-5-18 10:09 | 顯示全部樓層
按鍵控制LED燈的亮滅,我們可以采用外部中斷的方式(實(shí)驗(yàn)四會(huì)講),獨(dú)立按鍵的接法希望大家注意,直接接地,在沒(méi)有按鍵的情況下IO口為高電平(注:因?yàn)楸緦?shí)驗(yàn)中按鍵接P1口,內(nèi)部集成上拉電阻。若使用P0口作為通用IO口使用時(shí)必須外接500Ω左右的上拉電阻。見(jiàn)實(shí)驗(yàn)四附圖2),當(dāng)有按鍵按下時(shí)IO口為低電平。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表