单片机实验指导(程序部分)_第1页
单片机实验指导(程序部分)_第2页
单片机实验指导(程序部分)_第3页
单片机实验指导(程序部分)_第4页
单片机实验指导(程序部分)_第5页
已阅读5页,还剩114页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

;文件名:PortforMCU51

;功能:I/O口输入、输出实验

;接线:用导线连接八位逻辑电平输出模块的K0到CPU模块的RXD(P3.0口):

;用8位数据线连接八位逻辑电平显示模块的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

;功能:扩展输入、输出实验

;接线:用8位数据线连接八位逻辑电平输出模块的JD1E到扩展输入模块的JD2C;

;八位逻辑电平显示模块的JD2B到扩展输B出模块的JDIC;

;用导线连接扩展输入模块的CS_244到CPU模块的8000H;

;扩展输出模块的CS.273接到8I00H。

.〃***»***********************************»**************************

ADDRJnEQU8000H

ADDR_outEQU8100H

ORG0000H

LJMPSTART

ORG0I00H

START:

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

movxa,@DPTR;输入数据,读开关状态

Output:

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

movx@DPTR,a;输出数据

ACALLDelay

SjmpSTART

Delay:

mov电#10

DelayLoop1:

movr7.#0

DelayLoop2:

NOP

NOP

djnzr7,DelayLoop2

djnzr6,DelayLoop1

ret

END

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

;文件名:SRAMforMCU51

;功能:扩展存储器读写实验

;接线:用导线连接SRAM模块的CS.RAM到地:

;P1.0接到八位逻辑电平显示模块的LOo

.〃***»***********************************»******

ADDREQUOOOOH

ORGOOOOH

UMPSTART

ORGOIOOH

START:

MOVSH#60H

MOVDPTR,#ADDR;置外部RAM读写地址

MOVA,#55H;测试的数据一

MOVB.A

MOVX@DPTR,A;写外部RAM

MOVXA,@DPTR;读外部RAM

XRLA,B;比较读叵的数据

JNZERROR

MOVA,#0AAH;测试的数据二

MOVB,A

MOVX@DPTR,A

MOVXA,@DPTR

XRLA.B

JZPASS;测试通过

ERROR:SETBPI.0;测试失败,点亮LED

SJMP$

PASS:CPLP1.0:LED状态(亮/灭)转换

MOVR1,#OOH;延时

DELAY:MOVR2,#OOH

DJNZR2,$

DJNZRI,DELAY

UMPSTART;循环测试

END

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

仪件名:FlashforMCU5I

;功能:FlashMcmory读写实验

;接线:用导线连接闪存模块的CS_FLASH到地;

;八位逻辑电平显示模块的JD4B接到CPU模块的JD8。

J/***»*************木********木********京***********点*

ADDREQUOOOOH;字节写入位置

DATAIEQU055H;测试数据1

DATA2EQUOAAH;测试数据2

ORGOOOOH

UMPSTART

ORGOIOOH

START:

MOVSP,#60H

LCALLCHIP.RESET;芯片复位

LCALLCHIP_ERASE;芯片擦除

LCALLDELAY

MOVDPTR,#5555H;字节写入操作数据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;向设定的位置写入DATA1

MOVX@DPTR,A

LCALLDELAY

MOVDPTR,#ADDR

MOVXA,@DPTR;读数据1

MOVPl,A

NOP;在此设断点,观察PI口数据

MOVDPTR,#5555H;字节写入操作数据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;向设定的位置写入DATA2

MOVX(a)DPTR,A

LCALLDELAY

MOVDPTR.#ADDR+1

MOVXA,@DPTR;读数据2

MOVPl,A

NOP;在此设断点,观察Pl口数据

SJMP$;结束

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

CHIP_RESET:;芯片复位

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;擦除不成功,复位

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

;功能:定时/计数器实验

;接线:导线连接CPU模块P10到八位逻辑电平显示模块的L0.

・〃***»*************今**今**左***************»*本*****4:*

Tickequ10000;lOOOOxIOOus=Is

TIOOusequ156;lOOus时间常数(6M)

ClOOusequ30h;lOOus记数单元

LEDBufbit20h

org0

IjmpStart

orgOOObh

TOInt:

pushPSW

mova,CI00us+l

jnzGoon

decClOOus

Goon:

decClOOus+1

mova,ClOOus

orla,C100us+l

jnzExit;lOOus记数器不为0,返回

movClOOus,#27H:#high(Tick;

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

epiLEDBuf;lOOus记数器为0,重置记数器

;取反LED

Exit:

popPSW

reti

Start:

movTMOD,#02h;方式2,定时器

movTHO,#tlOOus

movTLO.#tlOOus

movIE,#IOOOOOIOb;EA=LITO=1

setbTRO;开始定时

clrLEDBuf

clrP1.0

movClOOus.#27H;#high(Tick)

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

Loop:

movc,LEDBuf

movP1.0,c

IjmpLoop

end

・〃**专,*余**拿**余**拿**余**余**余**余**余**拿**余*****今**拿**拿**今**拿**京

;文件名:8253forMCU51

;功能:8253定时/计数器实验

;接线:用导线连接CPU模块的8000到8253模决的CS_8253;

;频率发生器模块的153.6kHz接8253模块的CLK0:

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

;OUT2接L0灯。

・〃***》*******************拿**拿**专**塞******》*******今**才**今*********

TIM_CTLEQU8OO3H;8253状态/命令口地址

TIMEROEQU8000H

TIMERIEQU8001H

TIMER2EQU8002H

MODE03EQU001I0110B

MODE12EQU01110I00B

MODE22EQU10I10100B

ORGOOOOH

LJMPSTART

ORG0030H

START:

MOVDPTR,#TIM_CTL;定时器0工作在方式3

MOVA,#MODE03

MOVX(g)DPTR,A

MOVDPTR,#TIMERO

MOVA,#00H

MOVX@DPTR,A

MOVA.#01H

MOVX@DPTR,A;计数初值为0100H,100分频

MOVDPTR,#TIM_CTL;定时器1工作在方式2

MOVA,#MODE12

MOVX@DPTR,A

MOVDPTR,#TIMERI

MOVA,#I8H

MOVX@DPTR.A

MOVA,#00H

MOVX@DPTR,A;计数初值为0018H,24分频

MOVDPTR,#TIM_CTL;定时器2工作在方式2

MOVA.#MODE22

MOVX@DPTR,A

MOVDPTR,#TIMER2

MOVA,#0AH

MOVX@DPTR,A

MOVA,#00H

MOVX@DPTR.A;计数初值为OOOAH,10分频

SJMP$

END

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

;文件名:EXimlorMCU51

;功能:外部中断实验

;接线:导线连接单次脉冲模块的输出端到CPU噗块的P32,

;CPU模块的P10接八位逻辑电平显示模块的L0灯。

,/***»***********************************»*********

LEDBITP1.0

LEDBufBIT20H

org0

IjmpStart

org3

InterruplO:

pushPSW;保护现场

epiLEDBuf;取反LED

movc,LEDBuf

movLED,c

popPSW;恢复现场

reti

Start:

clrLEDBuf

clrLED

movTCON,#01h;外部中断0下降沿触发

movIE,#8lh;打开外部中断允许位(EXO)及总中断允许位(EA)

OK:IjmpOK

end

J/***»**Hc*4c*****************************东»*暮**********************

;〃*文件名:I64I65串转并,并转串实验程序

;功能:把开关量通过74**165串行输入到内存,并通过74**164串行输出到数

;码管上显示。

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

;Pl.3、PI.4接静态数码显示的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

;功能:串行静态显示

;接线:用导线对应连接静态数码管显示模块的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输入输出实验

;接线:用8位数据线连接八位逻辑电平输出模块的JD1E到8255模块的JD3C(PA1-1);

;八位逻辑电平显示模块的JD4B到8255模块的JD4c(PB口)或JD5C(PC口);

;用导线连接8255模块的CS.8255到地。

・〃**门***********************************»***************

D8255AEQU8000H;8255PA口地址

D8255BEQU800IH;8255PB口地址

D8255CEQU8002H;8255PC口地址

D8255EQU8003H;8255状态/命令口地址

ORGOOOOH

UMPSTART

ORG0I00H

START:

MOVDPTR.#D8255

MOVA.#82H;置8255状态

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

MOVA,#90H;置8255状态

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

MOVX@DPTR,A

LOOP

MOVDPTR,#D8255A

MOVXA,@DPTR;读开关状态

MOVDPTR,#D8255B

MOVX@DPTR,A;点亮对应的LED

MOVDPTR,#D8255C

MOVX@DPTR,A;点亮对应的LED

SJMPLOOP

END

;文件名:8255KDforMCU51

;功能:8255控制犍盘显示实验

;接线:连接8279键盘显示模块的JD3E到8255模块的JD3C(PA口);

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

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

;用导线连接8255模块的CS.8255到地。

・〃********今*****************************今**塞**今************

D8255AEQU8000H;8255PA口地址

D8255BEQU800IH;8255PB口地址

D8255CEQU8002H;8255PC口地址

D8255EQU8003H;8255状态/命令口地址

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;没有则继续读键

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;计算梃码

SHIFT:RRCA

JNCTORET

INCRI

DJNZRO.SHIFT

SJMPNOKEY;无键按下

TORET:MOVKEYVAL.Rl

RET

NOKEY:MOVKEYVAL,#OFFH;返回无键标志

RET

Display:

MOVR7,#8;8个数码管

MOVR5,#0

MOVR0.#LEDBUF

DLOOP:

MOVA,R5

RLA

RLA

RLA

ANLA,#I1111O11B

INCR5

MOVDPTR,#D8255C

MOVX@DPTR,A;点亮对应的LED

MOVA,@R0

MOVDPTR,#LEDSEG

MOVCA,@A+DPTR

INCRO

MOVDPTR,#D8255B

MOVX@DPTR,A;显示数据

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状态/命令匚地址

D8279EQU08700H;8279数据口地址

LEDMODEQU10H;右端输入八位字符显示;外部译码键扫描方式,双键互锁

LEDFEQEQU38H;扫描速率

LEDCLSEQU0DIH滴除

LEDWROEQU80H;设定的将要写入的显示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;保存现场

PUSHDPL

PUSHACC

LCALLDELAY;延时

MOVDPTR,#Z8279

MOVA,#LEDMOD;置8279工作方式

MOVX@DPTR,A

MOVA,#LEDFEQ;置键盘扫描速率

MOVX@DPTR,A

MOVA,#LEDCLS;清除LED显示

MOVX@DPTR,A

LCALLDELAY;延时

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;恢复现场

POPDPL

POPDPH

RET

;显示字符子程序

瀚入:R4,位置R5,值

DISLED:PUSHDPH;保存现场

PUSHDPL

PUSHACC

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

ADDA.R4;加位置偏移量

MOVDPTR,#Z8279

MOVX@DPTR,A;设定显示位置

MOVDPTR.#LEDSEG;置显示常数表起始位置

MOVA,R5

MOVCA,@A+DPTR渣表

MOVDPTR,#D8279

MOVX@DPTR,A;显示数据

POPACC;恢复现场

POPDPL

POPDPH

RET

DELAY:;延时子程序

PUSH0;保存现场

PUSH1

MOV0,#0H

DELAY1:MOV1,#OH

DJNZ1,$

DJNZ0,DELAY1

POP1;恢复现场

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

;功能:音频驱动实验一一生日快乐歌!

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

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

;用导线连接语音接口模块的VOICE到8255模块的PCOo

・〃**拿》*专*****余**************今**今*************************

D8255AEQU8000H;8255PA口地址

D8255BEQU8001H;8255PB口地址

D8255CEQU8002H;8255PC口地址

D8255EQU8003H;8255状态/命令口地址

R8EQU60H

ORG0000H

LJMPSTART

ORGOBH;TIMER0中断起始地址

JMPTIMO;跳至TIMERO中断子程序

ORG0100H

START:

MOVTMOD.#00(XX)001B;设TIMERO在MODE1

MOVIE,#1000001OB;中断使能

MOVR8,#0

MOVDPTR,#D8255

MOVA,#80H;置8255状态,PC口输出

MOVX@DPTR,A

STARTO:MOV30H,#00;取筒谱码指针

NEXT:MOVA,30H;简谱码指针我入A

MOVDPTR,#TABLESTABLE取简谱码

MOVCA,@A+DPTR

MOVR2,A;取到的简谱码暂存于R2

JZENDO;是否取到00(结束码)?

ANLA,#0FH;不是,则取低4位(节拍码)

MOVR5.A;将节拍码存入R5

MOVA,R2;将取到的简谱码再载入A

SWAPA;高低4位交换

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

JNZSING;取到的音符码是否为0?

CLRTRO;是:则不发音

JMPDI;跳至DI

SING:DECA;取到的音符码减1(不含0)

MOV22H.A;存入(22H)

RLA;乘2

MOVDPTR,#TABLE1取相对的高位字节计数值

MOVCA.@A+DPTR

MOVTH0,A;取到的高位字节存入TH0

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

MOVA,22H;再载入取到的音符码

RLA谏2

INCA;加1

MOVCA,@A+DPTR取相对的低位字节计数值

MOVTLO,A;取到的低位字节存入TL0

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

SETBTRO;启动TIMER0

DI:CALLDELAY;基本单位时间1/4拍187亳秒

INC30H;取简谱码指针加1

JMPNEXT;取下一个码

ENDO:CLRTRO;停止TIMER0

JMPSTARTO;重且循环

TIMO:PUSHACC;将A的值暂存于堆栈

PUSHPSW;将PSW的值暂存于堆栈

MOVTL0.20H;重设计数值

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;决定节拍

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点阵显示实验

;接线:B2模块的JT1B短路帽接至右端:

;用导线对应连接双色点阵显示模块的DN、SCLK、RCLK到

;CPU模块的PIO、PU、P12o

;文字滚动向左

DinBITPI.0

CLKBITPl.l

R_CLKBITPl.2

ORGOOOOH

JMPMAIN

ORGOOOBH

UMPINTS_TO;定时中断

ORG01OOH

MAIN:

CLREA

MOVR2,#0

MOVRI,#32;32个字符

MOVR0,#40H

MOVDPTR,#TAB

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

MOVA,R2

MOVCA,@A+DPTR

MOV@R0,A

INCR2

INCRO

DJNZRi,MOVEDATA

MOVTMOD,#01H;定时器0工作方式为1

MOVTLO,#OAFH;置计数初值

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

MOVR7,#5;软件计数器.循环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;行码右移一位转下一行

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;软件计数,次数不到返回

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等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论