<藍橋杯>兩種編程方式(I/O和MM)
一、MM編程
1.MM編程實際是存盤器映射編程,直接操作暫存器,這種編程是操作外部擴展RAM(隨機存取存盤器)的一種編程方式,可通過配置跳線J13,
2.51單片機內核有16根地址線,可尋址2^16位,P2和P0作為16位Address,P0又作為8位Data,因此可以使用XBYTE[Address] = Data 來描述進行的操作,
3. P2口是地址線的高8位,由競賽平臺的硬體電路圖我們知道,當P2.7 = 1,P2.6 = 0,P2.5 = 0時;可將與LED指示燈模塊連接的74HC573“打通”,此時可以通過P0埠控制LED燈的狀態,其LED燈的地址為0x8000,相應地址線如圖1-1所示,
圖1-1
4.計算地址
根據元件連接的方向(結合圖1-2),可以看出是P2埠的高三位控制,例如要控制埠Y5,則讓P27 = 1,P26 = 0,P25 = 1;則在P2埠為1010 0000化為十六進制0xA0,因為單片機內核有16根地址線,P2和P0作為16位Address,所以在XBYTE[Address] = Data中,Address =0xA0000 
圖1-2
代碼實作:關閉蜂鳴器繼電器
void cls_buzz(void) //關閉蜂鳴器,繼電器函式
{
XBYTE[0xA000] = 0x00;
}
5.存盤型別與存盤區關系
data —> 可尋址片內ram
bdata —> 位尋址的片內ram
idata —> 可尋址片內ram,允許訪問全部內部ram
pdata —> 分頁尋址片外ram (MOVX @R0) (256 BYTE/頁)
xdata —> 可尋址片外ram (64k 地址范圍FFFFH)
code —> 程式存盤區 (64k 地址范圍),對應MOVC @DPTR
二、I/O編程
1.輸出功能是單片機數字控制的最基礎功能, I/O是input/output的縮寫,即輸入輸出埠, 每個設備都會有一個專用的I/O地址,用來處理自己的輸入輸出資訊,I/O編程就是平時見到常見的編程,
2.以關閉蜂鳴器為例(結合圖1-2)
代碼實作:
void cls_buzz(void)
{
P2 = (P2&0x1F|0xA0); //將P27-P25清零,在定位Y5C
P0 = 0x00; //關閉蜂鳴器,繼電器
P2 &= 0x1F;
}
//蜂鳴器上端為VCC(供電),下端為N_buzz埠;
說明在N_buzz給一個低電平,蜂鳴器開始響;
蜂鳴器上對應的埠Nbuzz在元器件ULN2003中Nbuzz對應(ULN叫做達林頓管,里面是非門,例如輸入0,就輸出1);
要關閉蜂鳴器就要給N_buzz一個高電平,此時找到74HC573鎖存器,LE為控制埠,P0為輸入埠,要讓Nbuzz為1
Y5C就要輸入0,Y5C對應下面的或非門,Y5C要為0,輸入端Y5就要為1
在74HC138譯碼器中P25、P26、P27埠控制Y5.
//電路邏輯結構:138譯碼器–或非門–573暫存器–達林頓管ULN2003–蜂鳴器
//P2 = (P2&0x1F|0xA0);將P27-P25清零,在定位Y5C,用0x1F清零的原因:高三位P25、P26、P27要為零,即0001 1111
//P0 = 0x00;P0埠清零
//P2 &= 0x1F;//P27~P25清零
//P0總共有8個埠,分別對應8位二進制數字0x1F轉為二進制為0001 1111而0xA0對應的二進制1010 0000
在P2埠中P25 P26 P27為高三位,即 0001 1111,經過代碼或變為
1010 0000
1011 1111,取高三位101,即為對應的埠P25 P26 P27
經過138譯碼器(結合圖138譯碼器真值表,H高電平,L低電平,X任意值),輸出的Y5為1,蜂鳴器關閉
這里對應Y5的埠,為101,轉化為十進制為5;同理如果為100,即為Y4埠

圖1-3
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/279251.html
標籤:其他
