- 1
- 0
- 约3.62千字
- 约 35页
- 2019-10-26 发布于湖北
- 举报
单片机及C51编程技术;;汇编语言的基本知识;汇编程序伪指令;功能:将一个数据或特定的汇编符号赋予规定 的字符名称。;⒋ 数据地址赋值伪指令 DATA;格式:字符名称 BIT 位地址;汇编语言基本概念;⑷ 调试;汇编程序设计流程;简单程序(顺序结构);CONT: MOV A,R0 ;读低8位
CPL A ;取反
ADD A,#1 ;加1
MOV R2,A ;存低8位
MOV A,R1 ;读高8位
CPL A ;取反
ADDC A,#80H ;加进位及符号位
MOV R3,A ;存高8位
RET ;;分支程序;正确运用转移指令;① S0单独按下,
红灯亮,其余灯灭;
② S1单独按下,
绿灯亮,其余灯灭;
③ 其余情况,
黄灯亮。;解:程序如下
SGNL:ANL P1,;红绿黄灯灭
ORL P1,;置P1.0、P1.1输入态, P1.5~P1.7状态不变
SL0: JNB P1.0,SL1 ;P1.0=0,S0未按下,转判SL1
JNB P1.1,RED ;P1.0=1,S0按下;且P1.1=0,S1未按下,转红灯亮
YELW:SETB P1.4 ;黄灯亮
CLR P1.2 ;红灯灭
CLR P1.3 ;绿灯灭
SJMP SL0 ;转循环
SL1: JNB P1.1,YELW ;P1.0=0,S0未按下;P1.1=0,S1未按下,转黄灯亮
GREN:SETB P1.3 ;绿灯亮
CLR P1.2 ;红灯灭
CLR P1.4 ;黄灯灭
SJMP SL0 ;转循环
RED: SETB P1.2 ;红灯亮
CLR P1.3 ;绿灯灭
CLR P1.4 ;黄灯灭
SJMP SL0 ;转循环 ;循环程序;循环程序流程图;【例】设Xi均为单字节数,并按顺序存放在以50H为首地址的内RAM存储单元中,数据长度(个数)N存在R2中,试编程求和S=X1+X2+‥‥+XN,并将S(双字节)存放在R3R4中,(设S<65536)。;【例】编写延时10ms子程序,fosc=12MHz。
解:fosc=12MHz,一个机器周期为1?s。
DY10ms:MOV R6,#20 ; 置外循环次数
DLP1: MOV R7,#250 ; 置内循环次数
DLP2: DJNZ R7,DLP2 ; 2机周×250 =500机周
DJNZ R6,DLP1 ; 500机周×20= 10000机周
RET ;
说明:MOV Rn指令为1个机器周期;
DJNZ指令为2个机器周期;
RET指令为2个机器周期;
{[(2机周×250)+1+2]×20+1+2}×1?s/机周=10063?s≈10ms;2014-9-6; 设80C51单片机的P1口作为输出口,经驱动电路74LS240(8反相三态缓冲/驱动器)接8只发光二极管,如下图所示。当输出位为“1”时,发光二极管点亮,输出位为“0”时为暗。试编程实现:???个灯闪烁点亮10次,再转移到下一个灯闪烁点亮10次,循环不止。 ;FLASH:MOV A,#01H ;置灯亮初值
FSH0: MOV R2,#0AH ;置闪烁次数
FLOP: MOV P1,A ;点亮
LCALL DY1s ;延时1s
MOV P1,#00H ;熄灭
LCALL DY1s ;延时1s
DJNZ R2,FLOP ;闪烁10次
RL A ;左移一位
SJMP FSH0 ;循环
RET ; 【课堂练习题】
根据上图电路,设计灯亮移位程序,要求8只发光二极管每次点亮一个,点亮时间为250ms,顺序是从下到上一个一个地循环点亮。设fosc=6MHz。;查表程序;查表指令;解:编程如下:
TEST: MOV DPTR,#TAB ;置平方表首址
MOV A,30H ;读数据序号
MOVC A, @A+DPTR;读对应平方数据
MOV 31H,A ;存平方数据
RET ;
TAB: DB 0,1,4,
原创力文档

文档评论(0)