3.山东大学单片机-答案_第1页
3.山东大学单片机-答案_第2页
3.山东大学单片机-答案_第3页
3.山东大学单片机-答案_第4页
3.山东大学单片机-答案_第5页
免费预览已结束,剩余7页可下载查看

下载本文档

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

文档简介

1、单片机原理 -答案、问答题1、利用 MSC1211 或 8051 设计应答方式下的多机通讯程序。通讯参数:晶振 为11.0592MHz , 9600, n , 8, 1。通讯过程如下:主机首先发送从机地址,从 机收到地址后进行比较, 如果地址相符,则将从机地址回发给主机作为应答信号。 主机收到从机的地址应答信号后,将内存单元中的 120 个数据发送给从机,并 进行数据块校验(将各个数据进行异或),若校验正确,则从机发送 00H 给主机, 否则发送OFFH给主机,主机重新发送数据。(应在适当的地方加程序注释)ORG0000HLJMPMAINT;跳至主程序入口地址ORG0023H;串行口中断服务程

2、序入口LJMPINTSTMAINT :MOVSCON , #90H;置工作方式 2,并允许接收解: 主机程序如下:;置 T1 工作方式 2MOVTMOD , #20HTH1, #0FDHTL1, DPTR,#ADDR MOVR0,MOVR1,R2,#NAMEMOVMOVMOV#0FDH;设置数据块首址 ADDR 的地址指针 #120#00H;设置发送字节数;设置校验和的初值SETBTB8;置位 TB8 位,作为发送地址桢信息特征SETBTR1SETBEA; CPU开中断SETBES ;允许串行口中断MOVA , R2 ;发送地址桢信息MOVSBUF, ASJMP$;中断服务程序INTST:MO

3、VA , TB8 ;判断是发送地址还是数据,CJNEA , 01H , LOOP0CLRTI ;地址桢信息发送完后清发送中断LOOP0 :JBRI, LOOP1 ;检查是否是接受中断?若MOVRI=1 则转入接受乙机发送应答信息若为数据则转 LOOP0CLR Tl ;因RI=O,表明是甲机发送中断数据的中断请求。CPU响应中断,在中断服务程序中应清中断标志MOVA,TB8;CJNE继续发送数据A, #01H ,LOO3;若为发送数据中断则转 LOOP3LJMPENDT;甲机发送一数据完毕跳至中断返回程序LOOP1:CLRRI ;清接受中断标志MOVA, TB8 ;判断是发送地址还是数据,若为数

4、据则转LOOP2CJNEA, #01H , LOOP4 ;若TB8为0则接受的为乙机数据校验应答MOVA, SBUF;取乙机的应答数据CJNE 确,则转A,R2,LOOP2;若乙机应答信息不是从机地址,则地址传送不正LOOP2程序重新发送地址信息,否则清TB8,发送数据CLRTB8LOOP3:MOVXA, DPTR ;取下一个数MOVSBUF, A ;启动串行口,发送新的数据XRLA,R1MOVR1,AINCDPTR ;修改地址指针DECR0;修改发送字节数记数值CJNER0, #00H , ENDT;判别 120 个字节数据都发送完没有。如果没有发送完则跳至中断返回程序。继续发送MOVA,

5、R1MOVSBUF, A ;数据全部发送完毕则发送校验和LJMPENDTLOOP4:MOVA,SBUF;取乙机的应答数据A , #00H , LOOP5;若数据发送不正确, 则转 LOOP5 重新CJNE 发送 CLR LOOP5 : MOVMOVESMOVLJMPLOOP2 : MOVMOV;全部发送完毕,DPTR, #ADDRR0,R1,LOOP2A,R2SBUF, A#120 ;#00H ;禁止串行口中断;设置数据块首址 设置发送字节数 设置校验和的初值ADDR 的地址指针RETIENDT: RETI END 从机程序如下: ORG LJMP0000H MAINR;发送地址桢信息ORGL

6、JMP0023HINTSR跳至主程序入口地址 串行口中断服务程序入口MAINR :MOVMOVTMOD , #20HMOVTH1,#0FDHMOVTL1,#0FDHSCON , #0B0H;置工作方式 2,;置 T1 工作方式并允许接收2MOV DPTR, #ADDR ;设置数据块接收首址为 ADDRMOVR0, #120;设置接收字节数MOV R2, #NAMEMOVR1, #00H ;设置校验和的初值SETB RB8 ;置位 RB8 位,作为接受地址信息特征SETB TR1SETB EA; CPU 开中断SETBSJMPES $;允许串行口中断;中断服务程序INTSR:MOVA,RB8 ;

7、判断是接收地址还是数据,若为数据则转LOOP0CJNEA,01H , LOOP0CLRRI ;地址桢信息接受完后清接收中断MOV A ,SBUFXRL A ,R2JZ LOOP ;若地址相符则转 LOOP ,否则中断返回 LJMP ENDRLOOP :CLRSM2CLRRB8MOVA , R2MOVSBUF,A ;想主机发送从机地址LJMPENDRLOOP0:JBRI,LOOP1 ;检查是否是接受中断?若 RI=1 则转入接受甲机发送的数据CLRTI;因RI=O,表明是乙机发送中断数据的中断请求。CPU 响应中断在中断服务程序中应清中断标志LJMPENDR ;甲机发送一数据完毕跳至中断返回程序

8、LOOP1 :CLRRI ;清接受中断标志DECROJZLOOP2 ;数据未接收完则中断返回,若接收完则转LOOP2 ,校验MOVA , SBUF;取甲机发送的数据MOVXDPTR,AXRLA,R1MOVR1,ALOOP2 :MOVA,SBUF:取甲机发送的校验和XRLA, R1JZRIGHTLJMPWRONGRIGHT:MOVA, #OOHMOVSBUF, ALJMPENDRWRONG:MOVA, #OFFHMOVSBUF, AMOVDPTR,#ADDR;设置数据块接收首址为ADDRMoVRO, #120;设置接收字节数LJMP ENDRENDR: RETlEND2、某一故障检测系统,当出现

9、故障 1时,线路1上出现上升沿;当出现故障2时,线路2上出现下降沿。没有故障时,线路 1为低电平,线路2为高电平。出现故障时,相应的指示灯变亮。故障消失后,指示灯熄灭。试用MSC1211为单片机实现该故障检测功能,画出电路原理图,并写出相应程序。答:某故障检测系统,当出现故障I时.线路I上出现上升沿1当出现故障 2时.线路2 土出现下降沿*没灯故障时.线WH为慨电平,线路2为高 眶平“ HI现故肾时.郴应的捱示灯空也战障洞尖芾,指示灯灭.试用 MSCuH为单片机Hl*故障IS测功能出*9St井写出相应卡超冷:随1卜国所小:叙障I从PJ2输入*利用INTO,叙障2从P33綸入利HJlNTlJt用

10、U作为故琢I的指示灯L2作为故障2的指示灯,程序清单:ORG OoOOl IJMPMINORG 0003UJMPGU1ORG ()013 H AJMpGU2ORG IO(X)HMAIN: MOV TCON,#OSHMOV IE85HHERE: SETB PLOSETB Pl lGUI:CLR PLO JB P32GU1 RETIGU2: CLRPLIJB P3SGU2RETlEND3、用MSC1211的To定时/计数器,设计程序,实现在P1.0输出周期为200ms的占空比为1:1的方波,输出500个方波后停止输出。LJMPMAINORG000BH;T0 口中断服务程序入口地址LJMPINT_T

11、0MOVTMOD,#00H;T0工作于方式0定时MOVTL0, #0CHMOVTH0,#1EH;设定秒中断周期为1msMOVA,200 ;设定输出周期为 200 msMOVR2, 1000;输出500个方波SETBTR0SETBET0SETBEASETBP1.0SJMP$MOVTL0, #0CHMOVTH0,#1EH;T0重装时间常数CPLP1.0P1.0位取反DECR20000HMAlN :INT T0:答: ORGJZ ENDP ;若 R2 为 0 ,则结束程序,否则返主程序继续输出RETl ;返主程序ENDP : END4、变量 k 从 0 变到 300 ,变化步长为 20 。对于每一个

12、值,使用整形数算术运算 计算40*k , k*k*k和(50*k120+60)3。这三个值通过 MSC1211的D/A 转换后同步输出(均使用电压输出模式) 。试编写程序实现。 ( 5 分)include<Reg1211.h>data unsigned int k,j,i;void main(void)PDCON&=0X48;ADCON0=0X30;DACSEL=6;DACSEL=4;DACL=0X24;DACSEL=5;DACH=0x24;while(1)DACSEL=0;DAC=0x8000;for(j=0;j<100;j+)DAC=0;for(k=0;k<

13、301;k+=20)DACSEL=1;DAC=40*k;DACSEL=2;DAC=k*k*k;DACSEL=3;i=50*k/1200+60;DAC=i*i*i;DACSEL=6;DACL=0Xfc;二、程序设计5、用MSC1211的T1定时/计数器,定时0.1S中断,使P1 口的8个发光二极管每隔 1S 循环点亮。设系统主频为 6MHZ 。解: ORG 0000HLJMPMAIN;转主程序ORG001BH;T1中断服务程序入口地址LJMPTI-ISRORG0100HMAIN : MOVSP, #60H;设置堆栈指针MOVP1,#01H;设置P1.1发光MOVTMOD,#10H;T1初始化MO

14、VTL1,#B0HMOVTH1,#3CHSETBTR1;启动T0计数SETBET1;允许T0中断SETBEA;CPU开中断SJMP$;等待T1_ISR:MoV TL1,#BoHMOVTH1,#3CHMOVA,P1;P1 口循环左移RLAMOVP1,AEXIT:RETIEND6某一故障检测系统,当出现故障时,线路出现下降沿;没有故障时,线路为 高电平。出现故障时,相应的指示灯变亮。故障消失后,指示灯熄灭。试用 MSC1211为单片机实现该故障检测功能,画出电路原理图,并写出相应程序。答:参考答案:清除后,P1.3 口置1, 二极管灭ORG0000HLJMPORG0043LJMPMIANHINT_

15、2MIAN:SETBEX2 ;使能外部中断 2SETBEA;CPU开中断SETBP1.3;P1.3置位,使二极管灭SJMP$INT_2:CLRIE2; 清外部中断2 的中断标志CPLP1.3;P1.3 取返,使二极管点亮MOVA, P1DELAY1:ANLA, 10H ;检测 .P1.4口,为高电平时故障未排除,转JNZDELAY1CPLP1.3;故障排除,P1.3置位,使二极管灭RETI电路说明:当出现故障 1 时,线路 1 上出现上升沿,并将 P1.3 口置 0,二极管亮,当故障DELAYI等待7、设有甲、乙两台单片机,以工作方式 3进行串行通讯,设晶振为 11.0592MHz , 波特率

16、为 9600 ,甲机将内存单元中的 120 个数据作补偶校验后发送给乙机,乙 机对接收到的数据进行奇偶校验,若校验正确,则从机发送 00H 给甲机,甲机 继续发送数据,校验不正确,则发送 0FFH 给甲机,甲机重新发送原数据,编写 乙机的接收程序。(应在适当的地方加程序注释) 答: ORG 0000HAJMP MAINORG 0023HLJMP SE2_INTMAIN:MOV SP,#60HMOV TMOD #20HMOV TH1,#0FDH ; 设置波特率为 9600bpsMOV TL1,#0FDHMOV SCON,#90H ; 串行口工作方式 3 ,允许接收MOV DPTR,#2000H;

17、 接收数据区MOV R1,#120SETB TR1SETB EASETB ESSJMP $ ;等待接收中断SE2_INT:JB Rl, LOOPACLR T1LJMPENDRLOOPA :CLR RIMOV A,SBUFMOV C,P;奇偶校验JC LOOP1;如8位数是奇,则转 LOOP1再检测RB8位ORL C,RB8 ;如8位数为偶,再检测 RB8位,RB8=1,则9位数据为奇,补偶JC LOOP2错转 LOOP2LJMP LOOP3 ;补偶正确,转 LOOP3LooP1:ANL C, RB8;8位数为奇,再检测RB8位JC LOOP3; RB8=1,补偶正确,转 LOOP3LOOP2:MOV A ,#0FFH ;检测不正确发送FF给甲机MOV SBUF,AJMP ENDRLOOP3 :MOVX DPTR ,AMOVA,#00HMOVSBUF,AINC DPTRDJNZ

温馨提示

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

评论

0/150

提交评论