独闷闷网

 找回密码
 立即注册
搜索

51单片机汇编

查看数: 7379 | 评论数: 12 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2014-8-19 21:44

正文摘要:

看到网上很多原创帖我很羡慕,嫉妒是不会,恨更不可能啦。只是很渴望有一天我也能在论坛发帖子来帮助别人。虽然没有没有鸿哥、朱老师等等的水平那么高,也没有文采,但是我还是把自己写的程序贴出来让高手们指教指教 ...

回复

重庆-风雪 发表于 2015-3-31 21:32:12
感谢分享
又一个暑假 发表于 2015-3-31 16:24:41
  1. ;------------------------------------------------------------
  2. ;给大家分享个程序,网上看到的
  3. ORG 0040H
  4. AJMP MAIN
  5. MAIN:
  6. MOV P1,#0FFH
  7. MOV P2,#0FFH   ;初始化端口
  8. LOOP:
  9. CALL SREAD_KEY   ;读单按键--子程序
  10. MOV R0,KEY_NUM  

  11. CJNE R0,#00000010B,MAIN1 ;比较键值不等跳
  12.      CPL LED1_6.0   ;取反P2.0
  13. MAIN1:
  14. CJNE R0,#00000011B,MAIN2 ;比较键值不等跳
  15. CPL LED1_6.1   ;取反P2.1
  16. MAIN2:
  17. CJNE R0,#00000100B,MAIN3 ;比较键值不等跳
  18.      CPL LED1_6.2   ;取反P2.2
  19. MAIN3:
  20. CJNE R0,#00000101B,MAIN4 ;比较键值不等跳
  21. CPL LED1_6.3   ;取反P2.3
  22. MAIN4:
  23. CJNE R0,#00000110B,MAIN5 ;比较键值不等跳
  24. CPL LED1_6.4   ;取反P2.4
  25. MAIN5:
  26. CJNE R0,#00000111B,MAIN_EXIT ;比较键值不等跳
  27. CPL LED1_6.5   ;取反P2.5
  28. MAIN_EXIT:
  29. JMP LOOP
  30. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  31. ;读单按键--子程序
  32. ;子程序执行后返回值KEY_NUM即键值
  33. ;-----------------------------说明----------------------------
  34. ;短击:键按下时间<500MS
  35. ;长击:键按下时间>500MS
  36. ;两次按键间隔时间<700MS
  37. ;键值定义:
  38. ;KEY_NUM="00000000":  无键按下
  39. ;KEY_NUM="00000001":  无意义
  40. ;KEY_NUM="00000010":  单次短击
  41. ;KEY_NUM="00000011":  单次长击
  42. ;KEY_NUM="00000100":  短击+短击
  43. ;KEY_NUM="00000101":  短击+长击
  44. ;KEY_NUM="00000110":  长击+短击
  45. ;KEY_NUM="00000111":  长击+长击
  46. ;KEY_NUM="00001000":  短击+短击+短击
  47. ;KEY_NUM="00001001":  短击+短击+长击
  48. ;KEY_NUM="00001011":  短击+长击+长击
  49. ;KEY_NUM="00001111":  长击+长击+长击
  50. ;以编码从左看起第一个1看作为分界线,左边为0、而右边的0和1表示为:
  51. ;0短击1长击。
  52. ;以上组合已足够用了!
  53. ;*************************************************************
  54. ; KEY EQU P1.0
  55. ; KEY_NUM EQU 20H
  56. ;*************************************************************
  57. SREAD_KEY:
  58. MOV KEY_NUM,#00H ;键值清0
  59. JB KEY,SKEY_EXIT ;键未按下跳
  60. CALL DL10MS  ;延时去抖动
  61. JB KEY,SKEY_EXIT ;键未按下跳
  62. MOV KEY_NUM,#1  ;置键值为#00000001B
  63. SKEY_A:
  64. MOV R0,#00H  ;清计数器
  65. CLR C   ;清CY
  66. SKEY_B:
  67. CALL DL10MS
  68. INC R0
  69. MOV A,#50
  70. SUBB A,R0
  71. JC SKEY_C  ;当键按下>500MS跳
  72. JNB KEY,SKEY_B  ;键未释放跳
  73. CALL DL10MS  ;延时去抖动
  74. JNB KEY,SKEY_B  ;键未释放跳
  75. CLR C   ;CY置0
  76. JMP SKEY_D
  77. SKEY_C:
  78. JNB KEY,$  ;键未释放停
  79. CALL DL10MS  ;延时去抖动
  80. JNB KEY,$  ;键未释放停
  81. SETB C   ;CY置1
  82. SKEY_D:   
  83. MOV A,KEY_NUM
  84. RLC A   ;键值左移一位,C->键值低位
  85. MOV KEY_NUM,A
  86. JB KEY_NUM.2,SKEY_EXIT ;判断按键检测是否完成,完成跳
  87. ;说明:KEY_NUM.1时只判断单次按键两种组合,KEY_NUM.2时可判断两次按键4种组合+单次按键的2种组合=6种,以此类推。
  88. MOV R0,#00H  ;清计数器
  89. CLR C   ;CY置0
  90. SKEY_E:
  91. CALL DL10MS
  92. INC R0
  93. MOV A,#70
  94. SUBB A,R0
  95. JC SKEY_EXIT  ;当未按下>700MS跳出
  96. JB KEY,SKEY_E  ;键释放跳
  97. CALL DL10MS  ;延时去抖动
  98. JB KEY,SKEY_E  ;键释放跳
  99. JMP SKEY_A  ;当未按下<700MS再次检测
  100. SKEY_EXIT:
  101. RET
  102. ;************************************************************   
  103. ;延时10mS   
  104. ;************************************************************   
  105. DL10ms:
  106. MOV R5,#14H  ;20              ;10.262ms=20*511+2*20+1=20.261   
  107. TIME10MS_1:
  108. MOV R6,#0FFH  ;255    ;511us=255*2+1   
  109. DJNZ R6,$   
  110. DJNZ R5,TIME10MS_1   
  111. RET   
  112. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  113. END
复制代码
yao1318 发表于 2014-8-25 07:46:21
看来你可能是被台系的MCU的关系吧,我的一个工友也是这样。
又一个暑假 发表于 2014-8-24 23:48:16
yao1318 发表于 2014-8-24 22:08
我刚学的时候就是看汇编的书很难看得进,后来看到大部份人都是用C语言和它有移植方便等优点就决定学C语言了 ...

我之前都是用C,现在想学汇编就利用51来学方便点,
yao1318 发表于 2014-8-24 22:08:39
我刚学的时候就是看汇编的书很难看得进,后来看到大部份人都是用C语言和它有移植方便等优点就决定学C语言了,所以现在对汇编还是门外汉。
又一个暑假 发表于 2014-8-24 14:32:19
不是盖的 发表于 2014-8-24 13:06
给点小建议,51汇编规范点写法,运行主函数之前先清理一下RAM的内存单元和配置一下堆栈指针,在C编程是这是 ...

多谢你的指导,以后请多多指教
不是盖的 发表于 2014-8-24 13:06:45
给点小建议,51汇编规范点写法,运行主函数之前先清理一下RAM的内存单元和配置一下堆栈指针,在C编程是这是启动代码做的事,帖主可参照51启动代码
jianhong_wu 发表于 2014-8-19 23:39:10
感谢分享。努力加油。感谢你为论坛的付出。
又一个暑假 发表于 2014-8-19 22:01:46

我也是新手,一起努力!
xuan--lei 发表于 2014-8-19 21:57:55
汇编看看都难啊

QQ|Archiver|手机版|独闷闷网 ( 粤ICP备12007667号-2 )

GMT+8, 2024-11-29 18:26 , Processed in 0.172107 second(s), 21 queries .

快速回复 返回顶部 返回列表