单片机例程
这里有二十个MCS-51单片机的简单程序,对初学者有很大的帮助。
一、把所有端口的同时置高置低,不断闪烁
; 知识要点:理解单片机的运行过程, 理解延时程序,
ORG 0000H;程序开始,ORG是伪指令,它指出下一个指令(LJMP MAIN;)的存放地址是0000H。 LJMP MAIN;LJMP是长跳指令,跳转的目的地址是(MAIN)。
ORG 030H; ORG是伪指令,它指出下一个指令(MAIN MOV P0,#00H)的存放地址是030H MAIN:MOV P0,#00H;把p0全部置低电平,这里的#00H是一16进制的数据,它等于0000 0000B
MOV P1,#00H; 把p1全部置低电平.
MOV P2,#00H; 把p2全部置低电平
MOV P3,#00H; 把p3全部置低电平
ACALL DEL; 绝对调用子程序“DEL”,子程序是延时程序,时间到后继续执行后面程序。 MOV P0,#0FFH; 把p0全部置高电平,这里的#0FFH是一16进制的数据,它等于0 11111111B MOV P1,#0FFH; 把p1全部置高电平
MOV P2,#0FFH; 把p2全部置高电平
MOV P3,#0FFH; 把p3全部置高电平
ACALL DEL; 又是绝对调用子程序“DEL”,子程序是延时程序,时间到后继续执行后面
程序。
AJMP MAIN; AJMP是绝对跳指令,跳转的目的地址是(MAIN)。也就是重新开始程序
(MAIN)。
ORG 0200H; 指出下一个延时子程序的存放开始地址是0200H。
DEL:MOV R5,#04H; 延时子程序,给R5赋初值04H
F3:MOV R6,#0FFH; 给R5赋初值0FFH
F2:MOV R7,#0FFH; 给R5赋初值0FFH
F1:DJNZ R7,F1; DJNZ是减1不为0跳转指令,每一个扫描周期R7减1,直到R7=0,才执行
下一个程序。
DJNZ R6,F2; 每一个扫描周期R6减1,跳转到F2所指的程序,及R7减1,直到R7=0,又开
始R6减1,直到R6=0,才执行下一个程序。
DJNZ R5,F3; 每一个扫描周期R5减1,跳转到F3所指的程序,及R6减1,又开始
R6-1->R7-1>R7=0> R6=0>R5-1,如此周期循环,直到R5=0,才执行下一个程序,
也就是计时到,子程序结束。
RET; 子程序结束
END
二、流水灯
; 知识要点:理解2进制数与端口的关系
ORG 0000H;程序开始
LJMP MAIN;
ORG 030H;
MAIN:MOV P1,#0DBH;11011011--零为亮
ACALL DEL;延时
MOV P1,#06DH;01101101
ACALL DEL;延时


