單片機(jī)實(shí)驗(yàn)指導(dǎo)(程序部分)_第1頁
單片機(jī)實(shí)驗(yàn)指導(dǎo)(程序部分)_第2頁
單片機(jī)實(shí)驗(yàn)指導(dǎo)(程序部分)_第3頁
單片機(jī)實(shí)驗(yàn)指導(dǎo)(程序部分)_第4頁
單片機(jī)實(shí)驗(yàn)指導(dǎo)(程序部分)_第5頁
已閱讀5頁,還剩114頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

;文件名:PortforMCU51

;功能:I/O口輸入、輸出實(shí)驗(yàn)

;接線:用導(dǎo)線連接八位邏輯電平輸出模塊的K0到CPU模塊的RXD(P3.0口):

;用8位數(shù)據(jù)線連接八位邏輯電平顯示模塊的JD2B到CPU模塊的JD8(P1口)。

?〃***************************************?**************************

DIRBITP3.0

ORG0000H

LJMPSTART

ORG0100H

START:

OutputI:

mova,#0fEH

movr5.#8

loopl:

CLRC

movC,DIR

JCOutput2

movPI,a

rla

AcallDelay

djnzr5,loopl

SjmpOutputI

Outpul2:

mova,#07fH

movr5,#8

loop2:

CLRC

movC,DIR

JNCOutput1

movPl,a

rra

AcallDelay

djnzr5,loop2

SjmpOutput2

Delay:

movr6,#0

DelayLoopl:

movr7,#0

DelayLoop2:

NOP

NOP

djnzr7,DelayLoop2

djnzr6,DelayLoop1

end

;〃***?**************************************************************

;文件名:In_OutforMCU51

;功能:擴(kuò)展輸入、輸出實(shí)驗(yàn)

;接線:用8位數(shù)據(jù)線連接八位邏輯電平輸出模塊的JD1E到擴(kuò)展輸入模塊的JD2C;

;八位邏輯電平顯示模塊的JD2B到擴(kuò)展輸B出模塊的JDIC;

;用導(dǎo)線連接擴(kuò)展輸入模塊的CS_244到CPU模塊的8000H;

;擴(kuò)展輸出模塊的CS.273接到8I00H。

.〃***?***********************************?**************************

ADDRJnEQU8000H

ADDR_outEQU8100H

ORG0000H

LJMPSTART

ORG0I00H

START:

movDPTR,#ADDR_in;并行輸入口地址

movxa,@DPTR;輸入數(shù)據(jù),讀開關(guān)狀態(tài)

Output:

movDPTR,#ADDR_ou(;并行輸出口地址

movx@DPTR,a;輸出數(shù)據(jù)

ACALLDelay

SjmpSTART

Delay:

mov電#10

DelayLoop1:

movr7.#0

DelayLoop2:

NOP

NOP

djnzr7,DelayLoop2

djnzr6,DelayLoop1

ret

END

.〃**********************************************

;文件名:SRAMforMCU51

;功能:擴(kuò)展存儲(chǔ)器讀寫實(shí)驗(yàn)

;接線:用導(dǎo)線連接SRAM模塊的CS.RAM到地:

;P1.0接到八位邏輯電平顯示模塊的LOo

.〃***?***********************************?******

ADDREQUOOOOH

ORGOOOOH

UMPSTART

ORGOIOOH

START:

MOVSH#60H

MOVDPTR,#ADDR;置外部RAM讀寫地址

MOVA,#55H;測(cè)試的數(shù)據(jù)一

MOVB.A

MOVX@DPTR,A;寫外部RAM

MOVXA,@DPTR;讀外部RAM

XRLA,B;比較讀叵的數(shù)據(jù)

JNZERROR

MOVA,#0AAH;測(cè)試的數(shù)據(jù)二

MOVB,A

MOVX@DPTR,A

MOVXA,@DPTR

XRLA.B

JZPASS;測(cè)試通過

ERROR:SETBPI.0;測(cè)試失敗,點(diǎn)亮LED

SJMP$

PASS:CPLP1.0:LED狀態(tài)(亮/滅)轉(zhuǎn)換

MOVR1,#OOH;延時(shí)

DELAY:MOVR2,#OOH

DJNZR2,$

DJNZRI,DELAY

UMPSTART;循環(huán)測(cè)試

END

J/*************************************************

儀件名:FlashforMCU5I

;功能:FlashMcmory讀寫實(shí)驗(yàn)

;接線:用導(dǎo)線連接閃存模塊的CS_FLASH到地;

;八位邏輯電平顯示模塊的JD4B接到CPU模塊的JD8。

J/***?*************木********木********京***********點(diǎn)*

ADDREQUOOOOH;字節(jié)寫入位置

DATAIEQU055H;測(cè)試數(shù)據(jù)1

DATA2EQUOAAH;測(cè)試數(shù)據(jù)2

ORGOOOOH

UMPSTART

ORGOIOOH

START:

MOVSP,#60H

LCALLCHIP.RESET;芯片復(fù)位

LCALLCHIP_ERASE;芯片擦除

LCALLDELAY

MOVDPTR,#5555H;字節(jié)寫入操作數(shù)據(jù)1

MOVA,#OAAH

MOVX@DPTR,A;5555H/AAH

MOVDPTR,#2AAAH

MOVA,#55H

MOVX@DPTR,A;2AAAH/55H

MOVDPTR,#5555H

MOVA,#0A0H

MOVX@DPTR,A;5555H/A0H

MOVDPTR,#ADDR

MOVA,#DATA1;向設(shè)定的位置寫入DATA1

MOVX@DPTR,A

LCALLDELAY

MOVDPTR,#ADDR

MOVXA,@DPTR;讀數(shù)據(jù)1

MOVPl,A

NOP;在此設(shè)斷點(diǎn),觀察PI口數(shù)據(jù)

MOVDPTR,#5555H;字節(jié)寫入操作數(shù)據(jù)2

MOVA,#OAAH

MOVX@DPTR,A;5555H/AAH

MOVDPTR,#2AAAH

MOVA,#55H

MOVX@DPTR,A;2AAAH/55H

MOVDPTR,#5555H

MOVA,#0A0H

MOVX@DPTR,A;5555H/A0H

MOVDPTR,#ADDR+1

MOVA,#DATA2;向設(shè)定的位置寫入DATA2

MOVX(a)DPTR,A

LCALLDELAY

MOVDPTR.#ADDR+1

MOVXA,@DPTR;讀數(shù)據(jù)2

MOVPl,A

NOP;在此設(shè)斷點(diǎn),觀察Pl口數(shù)據(jù)

SJMP$;結(jié)束

,**拿**拿*****率**拿**拿**率*****拿**拿**********************

CHIP_RESET:;芯片復(fù)位

MOVDPTR,#5555H

MOVA,#OAAH

MOVX@DPTR,A;55J5H/AAH

MOVDPTR,#2AAAH

MOVA,#55H

MOVX@DPTR,A;2AAAH/55H

MOVDPTR,#5555H

MOVA,#0F0H

MOVX@DPTR,A;5555H/F0H

RET

*****************************************************

CHIP_ERASE:;片擦除

PUSHDPH

PUSHDPL

PUSHACC

CE_START:

MOVDPTR,#5555H

MOVA,#OAAH

MOVX@DPTR,A;5555H/AAH

MOVDPTR,#2AAAH

MOVA,#55H

MOVX@DPTR,A;2AAAH/55H

MOVDPTR.#5555H

MOVA,#80H

MOVX@DPTR,A;5555H/8OH

MOVDPTR,#5555H

MOVA,#0AAH

MOVX@DPTR.A;5555H/AAH

MOVDPTR,#2AAAH

MOVA.#55H

MOVX@DPTR,A;2AAAH/55H

MOVDPTR,#5555H

MOVA,#10H

MOVX@DPTR,A;5555H/10H

NOP

CE_WMT:

MOVXA,@DPTR

JBACC.7,CE_OK

JNBACC.5,CE_WAIT;等待擦除完成

MOVXA,@DPTR

JBACC.7,CE_OK

MOVA,#0F0H;擦除不成功,復(fù)位

MOVX@DPTR,A

SJMPCE_START;重試

CE_OK:

NOP

POPACC

POPDPL

POPDPH

RET

Delay:

movr6,#2O

DelayLoopI:

movr7,#0

DelayLoop2:

NOP

djnzr7,DelayLoop2

djnzr6,DelayLoop1

ret

END

.〃***?*********************************************

;文件名:TimerforMCU51

;功能:定時(shí)/計(jì)數(shù)器實(shí)驗(yàn)

;接線:導(dǎo)線連接CPU模塊P10到八位邏輯電平顯示模塊的L0.

?〃***?*************今**今**左***************?*本*****4:*

Tickequ10000;lOOOOxIOOus=Is

TIOOusequ156;lOOus時(shí)間常數(shù)(6M)

ClOOusequ30h;lOOus記數(shù)單元

LEDBufbit20h

org0

IjmpStart

orgOOObh

TOInt:

pushPSW

mova,CI00us+l

jnzGoon

decClOOus

Goon:

decClOOus+1

mova,ClOOus

orla,C100us+l

jnzExit;lOOus記數(shù)器不為0,返回

movClOOus,#27H:#high(Tick;

movCI00us+l,#10H;#low(Tick)

epiLEDBuf;lOOus記數(shù)器為0,重置記數(shù)器

;取反LED

Exit:

popPSW

reti

Start:

movTMOD,#02h;方式2,定時(shí)器

movTHO,#tlOOus

movTLO.#tlOOus

movIE,#IOOOOOIOb;EA=LITO=1

setbTRO;開始定時(shí)

clrLEDBuf

clrP1.0

movClOOus.#27H;#high(Tick)

movC100us+l,#10H;#low(Tick)

Loop:

movc,LEDBuf

movP1.0,c

IjmpLoop

end

?〃**專,*余**拿**余**拿**余**余**余**余**余**拿**余*****今**拿**拿**今**拿**京

;文件名:8253forMCU51

;功能:8253定時(shí)/計(jì)數(shù)器實(shí)驗(yàn)

;接線:用導(dǎo)線連接CPU模塊的8000到8253模決的CS_8253;

;頻率發(fā)生器模塊的153.6kHz接8253模塊的CLK0:

;8253模塊的CLK1接OUTO,CLK2接OUT1,GATE。、GATEkGATE2接+5V,

;OUT2接L0燈。

?〃***》*******************拿**拿**專**塞******》*******今**才**今*********

TIM_CTLEQU8OO3H;8253狀態(tài)/命令口地址

TIMEROEQU8000H

TIMERIEQU8001H

TIMER2EQU8002H

MODE03EQU001I0110B

MODE12EQU01110I00B

MODE22EQU10I10100B

ORGOOOOH

LJMPSTART

ORG0030H

START:

MOVDPTR,#TIM_CTL;定時(shí)器0工作在方式3

MOVA,#MODE03

MOVX(g)DPTR,A

MOVDPTR,#TIMERO

MOVA,#00H

MOVX@DPTR,A

MOVA.#01H

MOVX@DPTR,A;計(jì)數(shù)初值為0100H,100分頻

MOVDPTR,#TIM_CTL;定時(shí)器1工作在方式2

MOVA,#MODE12

MOVX@DPTR,A

MOVDPTR,#TIMERI

MOVA,#I8H

MOVX@DPTR.A

MOVA,#00H

MOVX@DPTR,A;計(jì)數(shù)初值為0018H,24分頻

MOVDPTR,#TIM_CTL;定時(shí)器2工作在方式2

MOVA.#MODE22

MOVX@DPTR,A

MOVDPTR,#TIMER2

MOVA,#0AH

MOVX@DPTR,A

MOVA,#00H

MOVX@DPTR.A;計(jì)數(shù)初值為OOOAH,10分頻

SJMP$

END

'/***?*a**4cHe**********事*****************京?*********

;文件名:EXimlorMCU51

;功能:外部中斷實(shí)驗(yàn)

;接線:導(dǎo)線連接單次脈沖模塊的輸出端到CPU噗塊的P32,

;CPU模塊的P10接八位邏輯電平顯示模塊的L0燈。

,/***?***********************************?*********

LEDBITP1.0

LEDBufBIT20H

org0

IjmpStart

org3

InterruplO:

pushPSW;保護(hù)現(xiàn)場(chǎng)

epiLEDBuf;取反LED

movc,LEDBuf

movLED,c

popPSW;恢復(fù)現(xiàn)場(chǎng)

reti

Start:

clrLEDBuf

clrLED

movTCON,#01h;外部中斷0下降沿觸發(fā)

movIE,#8lh;打開外部中斷允許位(EXO)及總中斷允許位(EA)

OK:IjmpOK

end

J/***?**Hc*4c*****************************東?*暮**********************

;〃*文件名:I64I65串轉(zhuǎn)并,并轉(zhuǎn)串實(shí)驗(yàn)程序

;功能:把開關(guān)量通過74**165串行輸入到內(nèi)存,并通過74**164串行輸出到數(shù)

;碼管上顯示。

;接線:P1.0接QHI65,PL1接CLK165,P1.2接SH_LD,

;Pl.3、PI.4接靜態(tài)數(shù)碼顯示的DIN、CLKo

//***?***********************************?************************

QH165BITPI.0

CLK165BITPl.l

SHLDBITPl.2

DATI64BITPl.3

CLK164BITPl.4

MEMORYEQU30H

ORG0000H

AJMPSTART

ORGOOBOH

START:setbCLK165

clrSH_LD

sctbSH_LD

movr7,#8

Input:rra

movc,QH165

movACC.7,c

clrCLK165

nop

setbCLK165

djnzr7,Input

movMEMORY,A

movA,MEMORY

movr6,#8

Output:

rrcA

movDAT164,C

clrCLK164

setbCLK164

djnzr6.Output

acallDELAY

sjmpSTART

DELAY:

movRO,#5

DD2:movR1.#OFFH

djnzRLS

djnzR0,DD2

RET

END

;文件名:4LEDforMCU51

;功能:串行靜態(tài)顯示

;接線:用導(dǎo)線對(duì)應(yīng)連接靜態(tài)數(shù)碼管顯示模塊的DIN、CLK到CPU模塊的PIO、P1I

?〃***?***********************************?***************

DBUFEQU30H

TEMPEQU40H

DINBITP1.0

CLKBITPl.l

ORGOOOOH

LJMPSTART

ORG0080H

START:

MOVDBUF+3,#8

MOVDBUF+2,#0

MOVDBUF+L#5

MOVDBUF,#I

;顯示“8051”

DISP:MOVRO,#DBUF

MOVRI,#TEMP

MOVR2,#4

DP10:MOVDPTR.#SEGTAB

MOVA,@R0

MOVCA,@A+DPTR

MOV@R1,A

INCRO

INCRI

DJNZR2,DPIO

MOVRO.#TEMP

MOVRI,#4

DPI2:MOVR2,#8

MOVA,@R0

DP13:RLCA

MOVDIN,C

CLRCLK

SETBCLK

DJNZR2,DPI3

INCRO

DJNZRi,DPI2

OK:SJMPOK

SEGTAB:DB3FH,06H,5BH.4FH.66H.6DII

DB7DH,07H,7FH,6FH,77H,7CH

DB39H,5EH.7BH,71H.00H.40H

END

?〃********************************今**4:***?***************

;文件名:825510forMCU5I

;功能:8255輸入輸出實(shí)驗(yàn)

;接線:用8位數(shù)據(jù)線連接八位邏輯電平輸出模塊的JD1E到8255模塊的JD3C(PA1-1);

;八位邏輯電平顯示模塊的JD4B到8255模塊的JD4c(PB口)或JD5C(PC口);

;用導(dǎo)線連接8255模塊的CS.8255到地。

?〃**門***********************************?***************

D8255AEQU8000H;8255PA口地址

D8255BEQU800IH;8255PB口地址

D8255CEQU8002H;8255PC口地址

D8255EQU8003H;8255狀態(tài)/命令口地址

ORGOOOOH

UMPSTART

ORG0I00H

START:

MOVDPTR.#D8255

MOVA.#82H;置8255狀態(tài)

;方式0,PA,PC口輸出,PB口輸入

MOVA,#90H;置8255狀態(tài)

;方式0,PBPC口輸出,PA口輸入

MOVX@DPTR,A

LOOP

MOVDPTR,#D8255A

MOVXA,@DPTR;讀開關(guān)狀態(tài)

MOVDPTR,#D8255B

MOVX@DPTR,A;點(diǎn)亮對(duì)應(yīng)的LED

MOVDPTR,#D8255C

MOVX@DPTR,A;點(diǎn)亮對(duì)應(yīng)的LED

SJMPLOOP

END

;文件名:8255KDforMCU51

;功能:8255控制犍盤顯示實(shí)驗(yàn)

;接線:連接8279鍵盤顯示模塊的JD3E到8255模塊的JD3C(PA口);

;JD2E至IJ8255模塊的JD4C(PB口);

;JD4E到8255模塊的JD5C(PCU);

;用導(dǎo)線連接8255模塊的CS.8255到地。

?〃********今*****************************今**塞**今************

D8255AEQU8000H;8255PA口地址

D8255BEQU800IH;8255PB口地址

D8255CEQU8002H;8255PC口地址

D8255EQU8003H;8255狀態(tài)/命令口地址

LEDBUFEQU50H;顯示緩存

KEYVALEQU60H;讀到的鍵碼

ORG0000H

LJMPSTART

ORG0I00H

START:MOVSP,#80H

MOVDPTR,#D8255

MOVA.#90H;方式O,PB,PC口輸出,PA口輸入

MOVX@DPTR,A

MOVLEDBUF,#IOH

MOVLEDBUF+I,#11H

MOVLEDBUF+2,#1IH

MOVLEDBUF+3,#11H

MOVLEDBUF+4,#5

MOVLEDBUF+5.#5

MOVLEDBUF+6,#2

MOVLEDBUF+7,#8

KB_DIS:

LCALLRD_KB;讀鍵盤

MOVA,#0FFH

CJNEA,KEYVAL,TOSHOW;判讀到鍵

SJMPSHOW;沒有則繼續(xù)讀鍵

TOSHOW:

MOVLEDBUEKEYVAL

SHOW:LCALLDISPLAY

SJMPKB_DIS

RD_KB:;鍵盤掃描

MOVA.#02H汨描第?行

MOVDPTR,#D8255C

MOVX@DPTR,A

MOVDPTR,#D8255A

MOVXA.@DPTR

MOVR1,#OOH

CJNEA.#OFFH,KEYCAL;判鍵是否按下

MOVA,#01H;掃描第二行

MOVDPTR,#D8255c

MOVX@DPTR,A

MOVDPTR,#D8255A

MOVXA.@DPTR

MOVRI,#08H

CJNEA.#OFFH,KEYCAL

SJMPNOKEY;無鍵按下

KEYCAL:MOVRO,#08H;計(jì)算梃碼

SHIFT:RRCA

JNCTORET

INCRI

DJNZRO.SHIFT

SJMPNOKEY;無鍵按下

TORET:MOVKEYVAL.Rl

RET

NOKEY:MOVKEYVAL,#OFFH;返回?zé)o鍵標(biāo)志

RET

Display:

MOVR7,#8;8個(gè)數(shù)碼管

MOVR5,#0

MOVR0.#LEDBUF

DLOOP:

MOVA,R5

RLA

RLA

RLA

ANLA,#I1111O11B

INCR5

MOVDPTR,#D8255C

MOVX@DPTR,A;點(diǎn)亮對(duì)應(yīng)的LED

MOVA,@R0

MOVDPTR,#LEDSEG

MOVCA,@A+DPTR

INCRO

MOVDPTR,#D8255B

MOVX@DPTR,A;顯示數(shù)據(jù)

LCALLDelay

DJNZR7.DLOOP

RET

Delay:PUSHR7

MOVR7,#200

DelayLoop:

NOP

DJNZR7.DelayLoop

POPR7

RET

LEDSEG:DB3FH,06H,5BH.4FH.66H.6DH;0,1,2,3,4,5

DB7DH,07H,7FH,6FH,77H,7CH;6,7,8,9,A,B

DB39H,5EH,79H,71H,(X)H,40H;C.D,E.E

END

;文件名:8279forMCU51

;功能:8279控制鍵盤與顯示

;接線:無須接線

?〃********今******************************才***************

Z8279EQU08701H;8279狀態(tài)/命令匚地址

D8279EQU08700H;8279數(shù)據(jù)口地址

LEDMODEQU10H;右端輸入八位字符顯示;外部譯碼鍵掃描方式,雙鍵互鎖

LEDFEQEQU38H;掃描速率

LEDCLSEQU0DIH滴除

LEDWROEQU80H;設(shè)定的將要寫入的顯示RAM地址

ORGOOOOH

AJMPSTART

ORG0040H

START:

MOVSR#60H

LCALLIN1T8279;初始化8279

WAIT:MOVDPTR,#Z8279

MOVXA,@DPTR

ANLA,#0FH

JZWAIT

MOVA,#40H

MOVX@DPTR,A

MOVDPTR,#D8279

MOVXA.@DPTR

ANLA,#3FH

MOVR4.#OOH

MOVR5,A

LCALLDISLED

SJMPWAIT

INIT8279:;8279初始化子程序

PUSHDPH;保存現(xiàn)場(chǎng)

PUSHDPL

PUSHACC

LCALLDELAY;延時(shí)

MOVDPTR,#Z8279

MOVA,#LEDMOD;置8279工作方式

MOVX@DPTR,A

MOVA,#LEDFEQ;置鍵盤掃描速率

MOVX@DPTR,A

MOVA,#LEDCLS;清除LED顯示

MOVX@DPTR,A

LCALLDELAY;延時(shí)

MOVDPTR,#Z8279

MOVA,#90H

MOVX@DPTR,A

MOVDPTR,#D8279

MOVA,#40H

MOVX@DPTR.A

MOVA,#40H

MOVX@DPTR,A

MOVA,#OH

MOVX@DPTR,A

MOVA,#OH

MOVX@DPTR,A

MOVA.#OEFH

MOVX@DPTR,A

MOVA.#27H

MOVX@DPTR,A

MOVA,#5BH

MOVX@DPTR,A

MOVA,#7FH

MOVX@DPTR.A

POPACC;恢復(fù)現(xiàn)場(chǎng)

POPDPL

POPDPH

RET

;顯示字符子程序

瀚入:R4,位置R5,值

DISLED:PUSHDPH;保存現(xiàn)場(chǎng)

PUSHDPL

PUSHACC

MOVA,#LEDWR0;置顯示起始地址

ADDA.R4;加位置偏移量

MOVDPTR,#Z8279

MOVX@DPTR,A;設(shè)定顯示位置

MOVDPTR.#LEDSEG;置顯示常數(shù)表起始位置

MOVA,R5

MOVCA,@A+DPTR渣表

MOVDPTR,#D8279

MOVX@DPTR,A;顯示數(shù)據(jù)

POPACC;恢復(fù)現(xiàn)場(chǎng)

POPDPL

POPDPH

RET

DELAY:;延時(shí)子程序

PUSH0;保存現(xiàn)場(chǎng)

PUSH1

MOV0,#0H

DELAY1:MOV1,#OH

DJNZ1,$

DJNZ0,DELAY1

POP1;恢復(fù)現(xiàn)場(chǎng)

POP0

RET

LEDSEG:DB3FH.06H,5BH.4FH.66H.6DH.7DH.07H:Q1,2,345,6,7

DB7FH,6FH,77H,7CH,39H,5EH,79H,71H;'8,9,A,B,C,D,E,F'

DB6DH,02H,08H,00H,59H,0FH.76H;'U、,'

END

;//***?****?**京*****************************尊*************

;文件名:MusicforMCU5I

;功能:音頻驅(qū)動(dòng)實(shí)驗(yàn)一一生日快樂歌!

;接線:C3模塊的JT3C短路帽接至右端、JT2c短路帽接至1、2端;

;8255模塊的CS_8255接CPU模塊的8000H;

;用導(dǎo)線連接語音接口模塊的VOICE到8255模塊的PCOo

?〃**拿》*專*****余**************今**今*************************

D8255AEQU8000H;8255PA口地址

D8255BEQU8001H;8255PB口地址

D8255CEQU8002H;8255PC口地址

D8255EQU8003H;8255狀態(tài)/命令口地址

R8EQU60H

ORG0000H

LJMPSTART

ORGOBH;TIMER0中斷起始地址

JMPTIMO;跳至TIMERO中斷子程序

ORG0100H

START:

MOVTMOD.#00(XX)001B;設(shè)TIMERO在MODE1

MOVIE,#1000001OB;中斷使能

MOVR8,#0

MOVDPTR,#D8255

MOVA,#80H;置8255狀態(tài),PC口輸出

MOVX@DPTR,A

STARTO:MOV30H,#00;取筒譜碼指針

NEXT:MOVA,30H;簡(jiǎn)譜碼指針我入A

MOVDPTR,#TABLESTABLE取簡(jiǎn)譜碼

MOVCA,@A+DPTR

MOVR2,A;取到的簡(jiǎn)譜碼暫存于R2

JZENDO;是否取到00(結(jié)束碼)?

ANLA,#0FH;不是,則取低4位(節(jié)拍碼)

MOVR5.A;將節(jié)拍碼存入R5

MOVA,R2;將取到的簡(jiǎn)譜碼再載入A

SWAPA;高低4位交換

ANLA,#0FH;取低4位(音符碼)

JNZSING;取到的音符碼是否為0?

CLRTRO;是:則不發(fā)音

JMPDI;跳至DI

SING:DECA;取到的音符碼減1(不含0)

MOV22H.A;存入(22H)

RLA;乘2

MOVDPTR,#TABLE1取相對(duì)的高位字節(jié)計(jì)數(shù)值

MOVCA.@A+DPTR

MOVTH0,A;取到的高位字節(jié)存入TH0

MOV21H.A;取到的高位字節(jié)存入(21H)

MOVA,22H;再載入取到的音符碼

RLA諫2

INCA;加1

MOVCA,@A+DPTR取相對(duì)的低位字節(jié)計(jì)數(shù)值

MOVTLO,A;取到的低位字節(jié)存入TL0

MOV20H.A;取到的低位字節(jié)存入(20H)

SETBTRO;啟動(dòng)TIMER0

DI:CALLDELAY;基本單位時(shí)間1/4拍187亳秒

INC30H;取簡(jiǎn)譜碼指針加1

JMPNEXT;取下一個(gè)碼

ENDO:CLRTRO;停止TIMER0

JMPSTARTO;重且循環(huán)

TIMO:PUSHACC;將A的值暫存于堆棧

PUSHPSW;將PSW的值暫存于堆棧

MOVTL0.20H;重設(shè)計(jì)數(shù)值

MOVTH0.21H

CPLPI.0;將P10位反相

MOVA.R8

CPLA

MOVR8.A

MOVDPTR.#D8255C

MOVX@DPTR,A

POPPSW;至堆棧取回PSW的值

POPACC;至堆棧取回A的值

RETI;返回主程序

DELAY:MOVR6,#02;18,邕秒

D2:MOVR4,#120

D3:MOVR3,#248

DJNZR3,$

DJNZR4.D3

DJNZR6,D2

DJNZR5.DELAY;決定節(jié)拍

RET

TABLEI:

DW64260,64400.64524.64580

DW64684,64777,64820,64898

DW64968,65030,65058,65110

DW65157,65178,65217

TABLE:

DB82H,01H,81H,94H,84H

DB0B4H.0A4H.04H

DB82H,01H,81H,94H,84H

DB0C4H.0B4H,O4H

;2

DB82H,01H,81H,0F4H,0D4H

DB0B4H.0A4H,94H

DB0E2H,01H,0E1H,0D4H,0B4H

DB0C4H.0B4H.04H

;3

DB82H.01H.81H.94H.84H

DB0B4H,0A4H,04H

DB82H,01H,81H,94H,84H

DB0C4H.0B4H.04H

./I

DB82H.01H.81H.0F4H.0D4H

DB0B4H,0A4H,94H

DB0E2H.01H.0E1H,0D4H.0B4H

DB0C4H,0B4H,O4H

DB00

END

w***?***********************************?***************

;文件名:LEDDZforMCU51

;功能:LED點(diǎn)陣顯示實(shí)驗(yàn)

;接線:B2模塊的JT1B短路帽接至右端:

;用導(dǎo)線對(duì)應(yīng)連接雙色點(diǎn)陣顯示模塊的DN、SCLK、RCLK到

;CPU模塊的PIO、PU、P12o

;文字滾動(dòng)向左

DinBITPI.0

CLKBITPl.l

R_CLKBITPl.2

ORGOOOOH

JMPMAIN

ORGOOOBH

UMPINTS_TO;定時(shí)中斷

ORG01OOH

MAIN:

CLREA

MOVR2,#0

MOVRI,#32;32個(gè)字符

MOVR0,#40H

MOVDPTR,#TAB

MOVEDATA:;把全部字符豆制到40H

MOVA,R2

MOVCA,@A+DPTR

MOV@R0,A

INCR2

INCRO

DJNZRi,MOVEDATA

MOVTMOD,#01H;定時(shí)器0工作方式為1

MOVTLO,#OAFH;置計(jì)數(shù)初值

MOVTH0.#080H;OFFFFH-3CAFH=50000,50mS

MOVR7,#5;軟件計(jì)數(shù)器.循環(huán)5次

SETBETO;允許TO中斷

CLRETI;禁止T1中斷

SETBEA

SETBTRO

CLRR.CLK

MOVSR#60H

MOVR3.#O8OH涕一行

AO:MOVR2,#08H

MOVR0.#40H

LOOP

;MOVDPTR.#TAB;字符首地址

MOVRI,#4

MOVA.R3

RRA;行碼右移一位轉(zhuǎn)下一行

MOVR3,A

LCALL,OUTDATA

Al:MOVA,@R0

LCALL,OUTDATA

INCRO

DJNZRI,Al

SETBR_CLK;顯示一行

CLRR_CLK

DJNZR2.LOOP;下一行

LJMPAO

LJMPMAIN

OUTDATA:

MOVR6.#8

OUTI:RRCA

MOVDIN.C

CLRCLK

SETBCLK

NOP

NOP

DJNZR6,OUT1

RET

INTS_TO:

CLREA

PUSH0E0H

PUSH00H

PUSH01H

PUSH02H

DJNZR7.BACK;軟件計(jì)數(shù),次數(shù)不到返回

MOVR7,#5

MOVR0,#40H

MOVRI,#8

SHIFTI:

MOVR2.#4

CLRC

PUSHOOH

MOVA,RO

ADDA.#3

MOVRO,A

MOVA.@R0

POPOOH

RLCA

SHIFT2:

MOVA,@R0

RLCA

MOV@R0,A

INCRO

DJNZR2.SHIFT2

DJNZRl.SHIFTI

BACK:

POP02H

POPOIH

POPOOH

POPOEOH

MOVTMOD,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論