加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

51单片机练习题(“编程与应用”解答)

(2013-11-02 16:33:02)
分类: 单片机
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     循环检测与控制

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有