DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 190|回复: 0
打印 上一主题 下一主题

一个对初学者编程有规范作用的编程实例

[复制链接]
跳转到指定楼层
楼主
发表于 2011-4-23 11:10:11 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
一个对初学者编程有规范作用的编程实例
;************;
;小灯控制程序;;************;
;
;************;
;中断入口程序;
;************;
;
ORG 0000H ;程序执行开始地址
LJMP START ;跳至START执行
ORG 0003H ;外中断0中断入口地址
RETI ;中断返回(不开中断)
ORG 000BH ;定时器T0中断入口地址
RETI ;中断返回(不开中断)
ORG 0013H ;外中断1中断入口地址
RETI ;中断返回(不开中断)
ORG 001BH ;定时器T1中断入口地址
RETI ;中断返回(不开中断)
ORG 0023H ;串行口中断入口地址
RETI ;中断返回(不开中断)
;
;************;
; 初始化程序 ;
;************;
;
CLEAR: MOV 20H,#00H ;20H单元内存清0(闪烁标志清0)
SETB 00H ;20H.0位置1(上电时自动执行闪烁功能1)
RET ;子程序返回
;
;************;
; 主 程 序 ;
;************;
;
START:ACALL CLEAR ;调用初始化子程序
MAIN: LCALL KEYWORK ;调用键扫描子程序
JB 00H,FUN0 ;20H.0位为1时执行FUN0
JB 01H,FUN1 ;20H.1位为1时执行FUN1
JB 02H,FUN2 ;20H.2位为1时执行FUN2
JB 03H,MAIN ;备用
AJMP MAIN ;返回主程序MAIN
;
;************;
; 功能程序 ;
;************;
;第1种闪烁功能程序
FUN0: MOV A,#0FEH ;累加器赋初值
FUN00:MOV P1,A ;累加器值送至P1口
LCALL DL05S ;延时
JNB ACC.7,MAIN ;累加器最高位为0时转MAIN
RL A ;累加器A中数据循环左移1位
AJMP FUN00 ;转FUN00循环
;
;第2种闪烁功能程序
FUN1:MOV A,#0FEH ;累加器赋初值
FUN11:MOV P1,A ;累加器值送至P1口
LCALL DL05S ;延时
JZ MAIN ;A为0转MAIN
RL A ;累加器A中数据循环左移1位
ANL A,P1 ;A同P1口值相与
AJMP FUN11 ;转FUN11循环
;
; 第3种闪烁功能程序
FUN2:MOV A,#0AAH ;累加器赋初值
MOV P1,A ;累加器值送至P1口
LCALL DL05S ;延时
CPL A ;A中各位取反
MOV P1,A ;累加器值送至P1口
LCALL DL05S ;延时
AJMP MAIN ;转MAIN
;************;
; 扫键程序 ;
;************;
;
KEYWORK:MOV P3,#0FFH ;置P3口为输入状态
JNB P3.0,KEY0 ;读P3.0口,若为0转KEY0
JNB P3.1,KEY1 ;读P3.1口,若为0转KEY1
JNB P3.2,KEY2 ;读P3.2口,若为0转KEY2
JNB P3.3,KEY3 ;读P3.3口,若为0转KEY3
RET ;子程序返回
;
;闪烁功能0键处理程序
KEY0CALL DL10MS ;延时10毫秒消抖
JB P3.0,OUT0 3.0为1,子程序返回(干扰)
SETB 00H ;20H.0位置1(执行闪烁功能1标志)
CLR 01H ;20H.1位清0
CLR 02H ;20H.2位清0
CLR 03H ;20H.3位清0
OUT0:RET ;子程序返回
;
; 闪烁功能1键处理程序
KEY1CALL DL10MS
JB P3.1,OUT1
SETB 01H ;20H.1位置1(执行闪烁功能2标志)
CLR 00H
CLR 02H
CLR 03H
OUT1:RET
;
;闪烁功能2键处理程序
KEY2CALL DL10MS
JB P3.2,OUT2
SETB 02H ;20H.2位置1(执行闪烁功能3标志)
CLR 01H
CLR 00H
CLR 03H
OUT2:RET
;
;闪烁功能(备用)键处理程序
KEY3CALL DL10MS
JB P3.3,OUT3
SETB 03H ;20H.3位置1(执行备用闪烁功能标志)
CLR 01H
CLR 02H
CLR 00H
OUT3:RET
;
;************;
; 延时程序 ;
;************;
;0.5毫秒延时子程序,执行一次时间为513微秒
DL512:MOV R2,#0FFH
LOOP1: DJNZ R2,LOOP1
RET
;
;10毫秒延时子程序(调用20次0.5毫秒延时子程序)
DL10MS:MOV R3,#14H
LOOP2: LCALL DL512
DJNZ R3,LOOP2
RET
;
;延时子程序,改变R4寄存器初值可改变闪烁的快慢(时间为15×25毫秒)
DL05S:MOV R4,#0FH
LOOP3: LCALL DL25MS
DJNZ R4,LOOP3
RET
;
;25毫秒延时子程序,用调用扫键子程序延时,可快速读出功能按键值
DL25MS:MOV R5,#0FFH
LOOP4CALL KEYWORK
DJNZ R5,LOOP4
RET
END ;程序结束
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2026-4-25 05:39 , 耗时 0.095949 秒, 19 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

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