4、编程与应用
4.1、编程实现c=a*a+b*b。设a、b均小于10,a存在31H单元,b存在32H单元,把c存入33H单元。
答: MOV A,31H  
   ;以下求a的平方值在A中
   
 MOV B,31H
   
 MUL AB
   
 MOV 33H,A    
 ;暂时将a的平方值保存在33H单元
   
 MOV A,32H    
 ;以下求b的平方值在A中
   
 MOV B,32H
   
 MUL AB
   
 ADD A,33H   
  ;累加b的平方值与暂存在33H单元中的a的平方值
   
 MOV 33H,A    
 ;将最后累加结果存入33H单元
 
4.2、将两个半字节数,合并成一字节数。将片内RAM
50H、51H地址中的内容各自低4位合并后,结果存入片内RAM 52H地址中。
答: MOV
A,51H    
 ;取51H单元的值到累加器A
   
 ANL A,#0FH 
  ;只保留低4位的值(高4位清零)
   
 SWAP
A  
   ;将保留的低4位的值交换到高4位,源高4位的0000交换到低4位
   
 MOV 52H,A 
  ;暂存到52H单元
   
 MOV
A,50H  
 ;取50H单元的值到累加器A
   
 ANL A,#0FH   ;只保留低4位的值(高4位清零)
   
 ORL 52H,A 
  ;将A的低4位合并到52H单元保存值的低4位
 
4.3、设有D1、K1连接如附图。
①试编程实现如下控制:D1初始点亮,此后开关每按下一次,D1改变状态一次。
②试编程实现如下控制:D1初始点亮,此后开关闭合时,每隔250毫秒D1改变状态一次,开关打开时D1维持最后状态不改变(设晶振频率=3MHz)。
 
①答: CLR P1.0   
 ;初始点亮D1
    SETB P1.7 
  ;确保P1.7端口可以输入开关状态
  L0: JNB P1.7,$
   ;等待开关释放
    JB P1.7,$  
  ;等待开关闭合
    CPL P1.0 
   ;翻转D1状态
    SJMP L0 
    ;循环检测与控制
②答: CLR A 
   
 ;用累加器累计定时器溢出次数
    MOV TMOD,#02H 
;定时器0方式2
    MOV TH0,#(256-250) ;基本定时周期1ms=250*4us(基本计时脉冲周期=4us@3MHz)
    MOV TL0,TH0 
 ;首次计数初值装入TL0,重装入计数初值装入TH0
 
  CLR TF0   
  ;清定时器0溢出标志
 
  SETB TR0 
   ;启动定时器0运行
  L0: JBC
TF0,L1   
;定时器0溢出则清TF0并转去累计溢出次数及进一步处理
  
 JMP
L0   
  ;累计定时器0溢出次数
  
 CJNE
A,#250,L0  ;溢出次数未达250次说明250ms未到则继续累计
  
 CLR
A     
 ;250ms已到则清零累加器准备进行下一个250ms的累计
  
 JB
P1.7,L0   ;250ms已到但开关未闭合则不执行动作
  
 CPL
P1.0   
 ;250ms已到且开关闭合则翻转D1状态
  
 JMP
L0     
;循环检测与控制
							
		 
						
		加载中,请稍候......