离线作业答案 发表于 2020-2-14 08:39:02

《单片机C》山东大学20春作业参考答案

《单片机原理及应用》模拟卷3 分析程序的执行结果,将结果填写到空格中。
       
1、    MOV        40H,#80H
        MOV        R0,#40H
        MOV        A,@R0                        ;(A=      )
          MOV        B,#20H                         
        DIV        AB                                        ;(A=       B=      )
        MOV        @R0,A          ;最终结果存于内存单元      中。
   2、          MOV        A,#2AH
         RR    A
         MOVB,A
       MUL        AB                                        ;(A=       B=      )
                                  (OV=      CY=      )
   3、            MOVA,#0B2H                                   
                MOV        R1,#055H                               
                ANL   A,R1         ;(A=       )
                ORL   A,R1         ;(A=       )
       XRL   A,R1         ;(A=       )
       SWAP   A                              ;(A=       )
               
         
       
   
4、   MOV   25H,#39H
      CLR      2AH      ;(25H)=(         B)
      CPL      2CH      ;(25H)=(         B)
      SETB   2EH      ;(25H)=(         B)
      MOV   C,28H   ;( PSW中C的内容=    )程序设计
MCS51内部RAM 40H~60H单元存放着有符号16进制数,将其中能被2整除的数,存放到0090H单元开始的外部RAM中。[使用汇编语言编写]
某一故障检测系统,当出现故障时,线路出现下降沿;没有故障时,线路为高电平。出现故障时,相应的指示灯变亮。故障消失后,指示灯熄灭。试用MSC1211为单片机实现该故障检测功能,画出电路原理图,并写出相应程序。
设有甲、乙两台单片机,以工作方式3进行串行通讯,设晶振为11.0592MHz,波特率为9600,甲机将内存单元中的120个数据作补偶校验后发送给乙机,乙机对接收到的数据进行奇偶校验,若校验正确,则从机发送00H给甲机,甲机继续发送数据,校验不正确,则发送0FFH给甲机,甲机重新发送原数据,编写乙机的接收程序。(应在适当的地方加程序注释)
解:ORG        0000H
AJMP        MAIN
ORG        0023H
LJMP        SE2_INT
MAIN:
        MOV SP,#60H
        MOV TMOD #20H
        MOV TH1,#0FDH ;设置波特率为9600bps
        MOV TL1,#0FDH
        MOV SCON,#90H ;串行口工作方式3,允许接收
        MOV DPTR,#2000H;接收数据区
        MOV R1,#120
        SETB TR1
        SETB EA
        SETB ES
SJMP $ ;等待接收中断
SE2_INT:
JB        RI,LOOPA
CLR        T1
LJMP        ENDR
LOOPA:CLR RI
        MOV A,SBUF
        MOV C,P        ;奇偶校验
        JC LOOP1        ;如8位数是奇,则转LOOP1再检测RB8位
        ORL C,RB8        ; 如8位数为偶,再检测RB8位,RB8=1,则9位数据为奇,补偶
        JC LOOP2        ;错,转LOOP2
        LJMP LOOP3 ;补偶正确,转LOOP3
LOOP1:           ANL C, RB8        ;8位数为奇,再检测RB8位
        JC LOOP3        ;RB8=1,补偶正确,转LOOP3
LOOP2:           MOV A ,#0FFH ;检测不正确发送FF给甲机
MOV SBUF,A
JMP ENDR
LOOP3:        MOVX @DPTR ,A
                        MOV        A,#00H
                        MOV        SBUF,A
                        INCDPTR
              DJNZ R1, ENDR
        CLR ES ;停止接收
ENDR:           RETI变量k从20变到200,变化步长为20。对于每一个值,使用整形数算术运算计算8*k,k*k*k和(40*k/150)^3。这三个值通过MSC1211的D/A转换后同步输出(均使用电压输出模式)。试编写程序实现。
解:#include 〈Reg1211.h〉
          dataunsignedinti,j;
               void   main (void)
      {
         PDCON &=0x37 ;        //同时开启ADC和DAC模块
         ADCON0 =0x30 ;        //内部参考电压2.5V
         DACSEL =6;                //选择将要访问DAC加载寄存器LOADCON
         DACL = 0XFC ;                //设置DAC1、2、3通道同步更新模式
         DACSEL = 4;                //选择DAC0、1控制寄存器
         DACL =0x24;                //DAC        IDAC 关闭,内部参考电压
         DACH =0x24;                //DAC1IDAC 关闭,内部参考电压
         DACSEL=5;                //选择 DAC2、3控制寄存器
          DACL =0x24 ;                //DAC2        IDAC 关闭,内部参考电压
          DACH=0x24;                //DAC3        IDAC 关闭,内部参考电压
          while (1)
          {
             DACSEL = 0;                //选择DAC1数据寄存器
             DAC = 0x8000;//送DAC1要转换的数据
             for (j=0 ; j <100 ; j++ ) ;// 延时
             DAC =0 ;
             for (i=20 ; i<200 ; i+=20 ) ;            
{
                  DACSEL = 1;
                  DAC = 8*k ;
                  DACSEL =2 ;
                  DAC = k*k*k ;
                  DECSEL = 3;
                  j = 40*k/150 ;
                  j = j^3 ;
                  DACSEL = 6 ;
                  DACL = 0XFC ;
                }
          }      
}
            
            
奥鹏无忧答案网
页: [1]
查看完整版本: 《单片机C》山东大学20春作业参考答案