您好,欢迎访问三七文档
1编程将片内RAM30H单元开始的15B的数据传送到片外RAM3000H开始的单元中去。解:STRAT:MOVR0,#30HMOVR7,#0FHMOVDPTR,#3000HLOOP:MOVA,@R0MOVX@DPTR,AINCR0INCDPTRDJNZR7,LOOPRET2片内RAM30H开始的单元中有10B的二进制数,请编程求它们之和(和<256).解ADDIO:MOVR0,30HMOVR7,#9MOVA,@R0LOOP:INCR0ADDA,@R0DJNZR7,LOOPMOV30H,ARET5片内RAM40H开始的单元内有10B二进制数,编程找出其中最大值并存于50H单元中.解START:MOVR0,#40H;数据块首地址送R0MOVR7,#09H;比较次数送R7MOVA,@R0;取数送ALOOP:INCR0MOV30H,@R0;取数送30HCJNEA,30H,NEHT;(A)与(30H)相比NEXT:JNCBIE1(A)≥(30H)转BIR1MOVA,30H;(A)<(30H),大数送ABIE1:DJNZR7,LOOP;比较次数减1,不为0,继续比较MOV50H,A;比较结束,大数送50HRET6编一子程序,从串行接口接受一个字符.解:START:MOVTMOD,#20H;定时器T1工作于模式2MOVTH1,#0E8H;设置波特率为1200b/sMOVTL1,#0E8HSETBTR1;启动T1MOVSCON,#50H;串行接口工作于方式1,充许接收L1:JNBRI,L1;等待接收数据,末接收到数据,继续等待CLRRI;接收到数据,清RIMOVA,SBUF;接收到数据送ARET9编制一个循环闪烁灯的程序。有8个发光二极管,每次其中某个灯闪烁点亮10次后,转到下一个闪烁10次,循环不止。画出电路图。解本程序的硬件连接如图所示。当P1.0输出高电平时,LED灯亮,否则不亮。其程序如下:MOVA,#01H;灯亮初值SHIFT:LCAILFLASH;调闪亮10次子程序RRA;右移一位SJMPSHIFT;循环FLASH:MOVR2,#0AH闪烁10次计数FLASH1;MOVP1,A;点亮LCALLDELAY;延时P1.08013P1.7D0Q074LS240D7Q75VMOVP1,#00H;熄灭LCALLDELAY;延时DJNZR2,FLASH1;循环RET1.编定一个软件延时1S和1min的子程序.设fosc=6Hz,则一个机器周期1μs。解:(1)1S=2US*5*1000005*100000=250*200*10(2)ORG1000HTIME:MOVR7,#10T3:MOVR6,#200T2:MOVR6,#250T1:DJNZR5,T1DJNZR6,T2DJNZR7,T3RET(2)1min=60,调用上面1s子程序60次ORG0030HMOVR0,#60LOOP:LCALLTIMEDJNZR0,LOOPRET2.请编制串行通信的数据发送程序,发送片内RAM50H~5FH的16B数据,串行接口设定为方式2,采用偶校验方式。设晶振频率为6MHz。解:查询方式发送程序如下MOVSCON,#8OHMOVPCON,#80HMOVR0,#50HMOVR7,#16HLOOP:MOVA,@R0MOVC,PMOVTB8,CMOVSBUF,AJNBT1,$CLRT1INCR0DJNZR7,LOOPRET4.应用单片机内部定时器T0工作在方式1下,从P1.0输出周期为2ms的方波脉冲信号,已知单片机的晶振频率为6MHZ。请(1)计算时间常数X,应用公式X=216-t(f/12)(2)写出程序清单解:X=216-t(F/12)=216-1*10-3*6*106/12=OFEOCHORG3000HSTART:MOVTMOD,#01HMOVTL0,#OCHMOVTHO,#OFEHSETBTR0LOOP:JBCTFO,DONESJMPLOOPDONE:MOVTL0,#OCHMOVTHO,#OFEHCPLP1.0SJMPLOOP6、用89C51的P1口,监测某一按键开关,使每按键一次,输出一个正脉冲(脉宽随意)。编出汇编语言程序。解:ORG0100HABC:SETBP1.0SETBP1.7JBPI.7,$JNBP1.7,$CLRP1.0MOVR2,#0DAY:NOPNOPDJNZR2,DAYSJMPABC7、设计一个4位数码显示电路,并用汇编语言编程使8从右到左显示一遍。解:ORG0100HMOVA,#08HMOVR2,#01HMOVDPTR,#TABMOVCA,@A+DPTRMOVP1,ANEXT:MOVA,R2MOVP3,AACALLDAYJBACC.4,LPDRLAMOVR2,AAJMPNEXTLPD:RETTAB:DBEND11.设计89C51和ADC0809的接口,采集2通道10个数据,存入内部RAM的50H~59H单元,画出电路图,编出:(2)查询方式;解:IN2的地址为7FFAH,P1.0查询转换结束信号,查询程序如下:ORG0100HMOVR7,#0AHMOVR0,#50HMOVDPTR,#7FFAHNEXT:MOVX@DPTR,AJBP1.0,$MOVXA,@DPTRMOV@R0,AINCR0DJNZNEXTSJMP$12、扫描子程序:KEY1:ACALLKS1;调用判断有无键按下子程序JNZLK1;有键按下,转LK1AJMPKEY1;无键按下,返回LK1:ACALLT12MS;调延时12ms子程序ACALLKS1;查有无键按下JNZLK2;若有,则为键确实按下,转逐列扫描AJMPKEY1;无键按下,返回LK2:MOVR4,#00H;首列号R4MOVR2,#FEH;首列扫描字R2LK4:MOVA,R2;列扫描字P1口MOVP1,A;使第一列线为0MOVA,P1;读入行状态JBACC.0,LONE;第0行无键按下,转查第一行MOVA,#00H;第0行有键按下,该行首键号#00HAAJMPLKP;转求键号LONE:JBACC.1,NEXT;第一行无键按下,转查下一列MOVA,#02;第一行有键按下,该行首键号#02ALKP:ADDA,R4;键号=首行号+列号PUSHACC;键号进栈保护LK3:ACALLKS1;等待键释放JNZLK3;未释放,等待POPAC;键释放,键号ARET;键扫描结束NEXT:INCR4;列号加1,指向下一列MOVA,R2;列扫描字AJNBACC.1,KND;判断2列全扫描完?扫描完,转KNDRLA;没扫描完,扫描字左移一位,形成下一列扫描字MOVR2,A;扫描字R2AJMPLK4;扫描下一列AJMPKEY1;全扫描完,返回MOVA,#FCH;全扫描字11111100BAMOVP1,A;全扫描字所有行MOVA,P1;读取列值CPLA;取正逻辑,高电平表示有键按下ANLA,#0C0H;屏蔽低6位,取高2位RET;出口状态(A)!=0,有键按下2、如图所示,要求按下S1~S4中的任意一个键,则对应的(S1-D3、S2-D4、S3-D5、S4-D6)发光二极管亮,松开键对应的发光二极管灭。解答:ORG0000HLJMPMAINORG0030HMAIN:MOVP3,#0FFHLOOP:MOVA,P3MOVP1,ALJMPLOOPEND1、试编程采用软件延时的方法来延时5分钟。(系统时钟为6MHZ)(10分)ORG1000HMOVR3,#05HLP3:MOVR2,#78HLP2:MOVR1,#0FAHLP1:MOVR0,#0FAHLP:NOPNOPDJNZR0,LPDJNZR1,LP1DJNZR2,LP2DJNZR3,LP3END3、使用74ls164的并行输出端接8个发光二极管,利用它的串入并出的功能,把发光二极管从左到右轮流点亮一个灯,并反复循环。(即流水灯效果)ORG0000HLJMPMAINORG0030HMAIN:MOVSCON#00HCLRESMOVA#80HDELR:CLRP1.0MOVSBUF,AJNBTI,$SETBP1.0LCALLDELAYCLRTIRRASJMPDELRDELAY:MOVR7,#10D1:MOVR6,#50D2:MOVR5,#200DJNZR5,$DJNZR6,D2DJNZR7,D1RETEND
本文标题:1-编程将片内RAM30H单元开始的15B的数据传送到片外RAM3000H开始的单元中去
链接地址:https://www.777doc.com/doc-5737873 .html