RT
深圳学林电子有限公司 单片机跟我学教程 版权所有
前言:单片机是一门实践性非常强的学科,为此我们突破传统思路,全面围绕单片机试验,从简单的流水灯开始, 逐步的带领大家从这些简单的几行或者10几行的程序,来熟悉和理解单片机的指令。 学指令 制作单片机教程之通过实验学指令...未经许可不得转载!
通过实验学指令之1把所有端口的同时置高置低,不通过实验学指令之2p1口3路流水灯理解2进制数断闪烁
与端口的关系
通过实验学指令之3单片机的加法:把52h+0fch 结通过实验学指令之4单片机的乘法:把ff*03h 结果果送p1口
通过实验学指令之5单片机的二进制加法 通过实验学指令之7学习单片机的逻辑运算 通过实验学指令之9循环移位指令的流水灯 通过实验学指令之11位操作指令的学习
送p1
通过实验学指令之6单片机的两位计数器
通过实验学指令之8进一步学习单片机的逻辑运算 通过实验学指令之10理解熟悉散转结构的程序 通过实验学指令之12比较指令的学习与cy位
通过实验学指令之13该程序的功能是小喇叭1khz通过实验学指令之14按p3.510次p1口led按照2信号
进制加1
通过实验学指令之15使用定时器实现长时间的延通过实验学指令之16中断的响应,p3.3的小喇叭时。
通过实验学指令之17p3.2的键盘数码管显示0
1khz输出
通过实验学指令之18中断的响应,两级中断嵌套 通过实验学指令之20p1口的led闪烁10次后停止子程序的嵌套
通过实验学指令之19顺序程序的
结构
(XL1000单片机
综合实验箱,全开放资源, USB通信。特别适合新手的开发箱!每套仅998元,TEL13714407535)
特别说明: 以下程序主要使用了流水灯, 按键, 喇叭, 数码管等资源,不仅适用于本公司各个试验套件。 初学者也可自制试验器材等。
RT
;该程序的功能是把所有端口的同时置高置低,不断闪烁。
;*************************************************************************** ;* (程序转载请著明出处 ,未声明可适应本站腾龙/isp开发套件/倚天版开发套件 *
,。 * ;* 制作(深圳学林电子有限公司)
;* tel:13714407535 石学军 制作(深圳学林电子有限公司)。 * ;*************************************************************************** ; 知识要点:理解单片机的运行过程, 理解延时程序, ORG 0000H;程序开始 LJMP MAIN; ORG 030H;
MAIN:MOV P0,#00H;把p0,p1,p2,p3全部置低电平 MOV P1,#00H; MOV P2,#00H; MOV P3,#00H;
ACALL DEL; 延时
MOV P0,#0FFH; 把p0,p1,p2,p3全部置高电平 MOV P1,#0FFH; MOV P2,#0FFH; MOV P3,#0FFH; ACALL DEL; 延时
AJMP MAIN; 重新开始
ORG 0200H; 从200h开始存放 DEL:MOV R5,#04H; 延时子程序 F3:MOV R6,#0FFH; F2:MOV R7,#0FFH; F1:
DJNZ R7,F1; DJNZ R6,F2; DJNZ R5,F3;
RET; 子程序结束 END
RT
程序在倚天版运行的状态1,全部不亮
程序在倚天版运行的状态2,全部亮 ;该程序的功能是p1口3路流水灯
;*************************************************************************** ;* (程序转载请著明出处 ,未声明可适应本站腾龙/isp开发套件/倚天版开发套件 * ;* 制作(深圳学林电子有限公司),。 *
;* tel:13714407535 石学军 制作(深圳学林电子有限公司)。 *
;*************************************************************************** ; 知识要点:理解2进制数与端口的关系 ORG 0000H;程序开始 LJMP MAIN; ORG 030H;
MAIN:MOV P1,#0DBH;11011011--零为亮 ACALL DEL;延时
MOV P1,#06DH;01101101 ACALL DEL;延时
MOV P1,#0B6H;10110110 ACALL DEL;延时 AJMP MAIN;
DEL: MOV R7,#0FFH;延时子程序 DEL1:MOV R6,#0FFH; DEL2: DJNZ R6,DEL2; DJNZ R7,DEL1; RET; END
RT
程序在倚天版运行的状态1,跑马灯的瞬间11011011(靠近
数码管的一边为高位,1为灭0为灭)
程序在倚天版运行的状态2,跑马灯的瞬间10110110(靠近数码管的一边为高位,1为灭0为灭)
RT
;该程序的功能是单片机的加法:把52h+0fch 结果送p1口
;*************************************************************************** ;* (程序转载请著明出处 ,未声明可适应本站腾龙/isp开发套件/倚天版开发套件 *
,。 * ;* 制作(深圳学林电子有限公司)
;* tel:13714407535 石学军 制作(深圳学林电子有限公司)。 *
;*************************************************************************** ;知识要点:理解2进制数的加法
;运行结果为p1.7到p1.0为亮灭亮亮灭灭灭亮就是二进制01001110 ;注意是从高向低排列,同时该数已经超过256, 所以进位cy=1 ORG 0000H;程序开始 LJMP MAIN; ORG 030H;
MAIN:ACALL DEL;
MOV A,#052H;寄存器a送52h MOV R0,#0FCH;寄存器r0送0fch ADD A,R0;相加 NOP;空操作
MOV P1,A;结果送p1口
DEL:MOV R7,#0FFH;;延时子程序 DEL1:MOV R6,#0FFH; DEL2:MOV R5,#01FH; DEL3:
DJNZ R5,DEL3; DJNZ R6,DEL2; DJNZ R7,DEL1;
RET;延时子程序返回 END
程序在倚天版运行的状态,运行结果为p1.7到p1.0为亮灭亮亮灭灭灭亮就是二进制01001110 (靠近数码管的一边为高位,1为灭0为灭)
RT
该程序的功能是单片机的乘法:把ff*03h 结果送p1口先送高8位再送低8位
;*************************************************************************** ;* (程序转载请著明出处 ,未声明可适应本站腾龙/isp开发套件/倚天版开发套件 *
,。 * ;* 制作(深圳学林电子有限公司)
;* tel:13714407535 石学军 制作(深圳学林电子有限公司)。 *
;*************************************************************************** ;知识要点:理解2进制数的乘法
;运行结果先输出00000010 ,然后输出11111101,就是1011111101换算后等于10进制765,就是两数相乘的结果
;注意是从高向低排列,同时该数已经超过256, 所以进位cy=1 ORG 0000H;程序开始 LJMP MAIN; ORG 030H;
MAIN:ACALL DEL;
MOV A,#0FFH;寄存器a送0ff MOV B,#03H;寄存器b送03h MUL AB; 相乘
MOV P1,b ;高8位输出结果是00000010 acall del
MOV P1,a;低8位输出结果是11111101 DEL:MOV R7,#0FFH;延时子程序 DEL1:MOV R6,#0FFH; DEL2:MOV R5,#01FH;
DEL3: DJNZ R5,DEL3; DJNZ R6,DEL2; DJNZ R7,DEL1; RET; END
RT
程序在倚天版运行的状态11111101
程序在倚天版运行的状态00000010 ;;该程序的功能是单片机的二进制加法
;*************************************************************************** ;* (程序转载请著明出处 ,未声明可适应本站腾龙/isp开发套件/倚天版开发套件 * ;* 制作(深圳学林电子有限公司),。 *
;* tel:13714407535 石学军 制作(深圳学林电子有限公司)。 *
;*************************************************************************** ;知识要点:理解2进制数的加法
;运行结果先输出00000000 (全亮),然后输出00000001,然后0000010,直到11111111 ;从P1口的8个灯看二进制的0,1,2,3......
ORG 0000H;程序开始 LJMP MAIN; ORG 030H;
MAIN:MOV A,#00H;先送0 PLAY:MOV P1,A;输出 ACALL DEL;延时 INC A;加1
AJMP PLAY;再输出
DEL:MOV R7,#0FFH;延时子程序 DEL1:MOV R6,#0FFH; DEL2:MOV R5,#01FH; DEL3: DJNZ R5,DEL3; DJNZ R6,DEL2; DJNZ R7,DEL1; RET; END
RT
程序在倚天版运行的状态00000000
程序在倚天版运行的状态00000010
RT
;8该程序的功能是进一步学习单片机的逻辑运算 ;
;*************************************************************************** ;* (程序转载请著明出处 ,未声明可适应本站腾龙/isp开发套件/倚天版开发套件 *
,。 * ;* 制作(深圳学林电子有限公司)
;* tel:13714407535 石学军 制作(深圳学林电子有限公司)。 *
;*************************************************************************** ;知识要点:理解熟悉单片机的逻辑运算
;运行结果:P1口输出结果为01100000,注意1为灭0为亮,从1.7到1.0排列
;ANL 0FH就是把数据与00001111相与那么遇1得原来的数遇0则为0,结果是前面的4位变0, 后面的4位保留
ORG 0000H;程序开始 LJMP MAIN; ORG 030H;
MAIN:MOV A,#59H;A中送59H这个数 01011001
ANL A,#0FH;59H和00001111相与就是保留后4位结果为1001 SWAP A;A中的高低字节交换结果为10010000
ANL P1,#0FH;P1口的内容与A相与就是清除高4位注意P1本来为11111111即FF此时变为00001111
ORL P1,A;P1的内容与相或 10010000和00001111相或结果为01100000 ACALL DEL;调用延时以便观察 AJMP MAIN;重新开始
DEL: MOV R7,#0FFH;延时子程序 DEL1:MOV R6,#0FFH; DEL2:MOV R5,#01FH; DEL3: DJNZ R5,DEL3; DJNZ R6,DEL2; DJNZ R7,DEL1;
RET; END
RT
运行结果:P1口输出结果为01100000,注意1为灭0为亮,从1.7到1.0排列 ;9该程序的功能是用循环移位指令的流水灯
;*************************************************************************** ;* (程序转载请著明出处 ,未声明可适应本站腾龙/isp开发套件/倚天版开发套件 * ;* 制作(深圳学林电子有限公司),。 *
;* tel:13714407535 石学军 制作(深圳学林电子有限公司)。 *
;*************************************************************************** ;知识要点:理解熟悉移位指令 ;运行结果:P1口8个灯循环点亮 ORG 0000H;程序开始 LJMP MAIN; ORG 030H;
MAIN:MOV R0,#08H;把8送入R0中,
MOV A,#0FEH;把FE送入A中,即11111110 PLAY:RR A;右移动1位 MOV P1,A;输出显示 ACALL DEL;延时
DJNZ R0,PLAY;一共移动8次 AJMP MAIN;重新开始 DEL: MOV R7,#0FH;延时子程序 DEL1:MOV R6,#0FFH; DEL2:MOV R5,#01FH; DEL3: DJNZ R5,DEL3; DJNZ R6,DEL2; DJNZ R7,DEL1;
RET; END
运行结果流水灯的瞬间(注意由于照相机的延时,看到的两个灯亮实际为一个灯亮)
RT
运行结果流水灯的瞬间(注意由于照相机的延时,看到的两个灯亮实际为一个灯亮) ;10该程序的功能是用按键计数器
;*************************************************************************** ;* (程序转载请著明出处 ,未声明可适应本站腾龙/isp开发套件/倚天版开发套件 * ;* 制作(深圳学林电子有限公司),。 *
;* tel:13714407535 石学军 制作(深圳学林电子有限公司)。 *
;*************************************************************************** ;知识要点:理解熟悉散转结构的程序
;运行结果:按P3.2或3.3(低4位的任意一个键盘)第一位数码管加1直到9循环 ; 开始显示0把P3送OFH,判断有没有按键,没有则反复循环,有按R0加1,如到10 ;那么则清除, 最后根据R0的值散转. ORG 0000H;
LJMP MAIN;程序开始 ORG 030H;
MAIN: MOV P0,#028H;数码管显示0 clr p2.1 ;打开第一个数码管 MOV R0,#00H;r0送0fh ST: MOV P3,#0FH;p3 送0fh MOV A,P3;
CJNE A,#0FH,F1;如果p3口的值等于0f,那么按键没有按, ACALL DEL;
AJMP ST;继续检测 F1: ACALL DEL;
CJNE A,#0FH,F2;再次判断有没有按 AJMP ST;继续检测 F2: INC R0;r0加1
CJNE R0,#0AH,F3;如果r0等于10转道f3;OAH就是10, 到这里转移重新 MOV R0,#00H;
RT
F3: MOV DPTR,#JPTAB;取地址 MOV A,R0;
CLR C;清除进位 RLC A;a的内容右移
JNC NADD;判断有没有进位, 有向下无到NDDA INC DPH;有进位DPH加1
NADD: JMP @A+DPTR;根据A的内跳转到PR1,PR2.... JPTAB: NOP; NOP;
AJMP PR1; AJMP PR2; AJMP PR3; AJMP PR4; AJMP PR5; AJMP PR6; AJMP PR7; AJMP PR8; AJMP PR9;
DEL: MOV R7,#04H;延时子程序 DEL1: MOV R6,#0FFH; DEL2: MOV R5,#01FH; DEL3: DJNZ R5,DEL3; DJNZ R6,DEL2; DJNZ R7,DEL1; RET;
PR1: MOV P0,#7eH;显示1 ACALL DEL; AJMP ST;
PR2: MOV P0,#0a2H;显示2 ACALL DEL; AJMP ST;
PR3: MOV P0,#62H;显示3 ACALL DEL; AJMP ST;
PR4: MOV P0,#74H;显示4 ACALL DEL; AJMP ST;
PR5: MOV P0,#61H;显示5 ACALL DEL; AJMP ST;
PR6: MOV P0,#21H; ACALL DEL; AJMP ST;
PR7: MOV P0,#7aH;
RT
ACALL DEL; AJMP ST;
PR8: MOV P0,#20H; ACALL DEL; AJMP ST;
PR9: MOV P0,#60H;
ACALL DEL; AJMP ST;
END
程序在倚天版运行的状态按键显示数字2
程序在倚天版运行的状态按键显示数字4 ;11该程序的功能是用按键控制灯
;***************************************************************************
RT
;* (程序转载请著明出处 ,未声明可适应本站腾龙/isp开发套件/倚天版开发套件 * ;* 制作(深圳学林电子有限公司),。 *
;* tel:13714407535 石学军 制作(深圳学林电子有限公司)。 *
;***************************************************************************http://
;知识要点:位操作指令的学习
;运行结果:按P3.2那么p1.0的灯亮
; p3.2接一个按键到地,p1.0 led. 程序把p3.2的状态送给p1.0
;位地址有多种表达方式,如直接地址p2.2 字节地址21h.5 寄存器acc.7位定义如rs0 伪指令定义如fi bit psw.1
ORG 0000H;程序开始 LJMP MAIN; ORG 030H; MAIN:
MOV C,P3.2; 把p3.2的状态送入c MOV P1.0,C;把c的状态送p1.0 ACALL DEL;调用延时 AJMP MAIN;反复循环 DEL: MOV R7,#0FFH;延时程序 DEL1: MOV R6,#0FFH; DEL2: DJNZ R6,DEL2; DJNZ R7,DEL1;
RET; END
程序在倚天版运行的状态按键数码管p10亮
RT
;12该程序的功能是比较两个数的大小
;*************************************************************************** ;* (程序转载请著明出处 ,未声明可适应本站腾龙/isp开发套件/倚天版开发套件 * ;* 制作(深圳学林电子有限公司),。 *
;* tel:13714407535 石学军 制作(深圳学林电子有限公司)。 *
;*************************************************************************** ;知识要点:比较指令的学习与cy位
; 开始初始化为ff. 大于fe,那么显示1. 如果用导线把p1.1,\...p1.7
;短路到地,p1将小于fe, 显示0 ,如果把p1.0短路到地p1=fe则继续检测无显示. ;该程序示例了比较指令. 同时有助于理解数的概念. ORG 0000H;程序开始 LJMP MAIN; ORG 030H;
MAIN: MOV P0,#0FFH;初始化p0 MOV r0,#0FeH;r0送立即数 clr p2.1;打开第一个数码管 MOV A,r0;r0送到a
CJNE A,P1,L1;pi与r0比较如相等则顺序如果不等则跳到l1.如大cy=1否则为0 ACALL DEL;调用延时以便观察 AJMP MAIN;重新开始
L1: JC L2;cy 如果为1则跳到l2否则顺序 mov p0,#28h;如果为0显示0 ACALL DEL;
AJMP MAIN;继续检测 L2: mov p0,#7eh;如果为1显示1 ACALL DEL;
AJMP MAIN;继续检测
DEL: MOV R7,#0FFH; 延时程序 DEL1: MOV R6,#0FFH; DEL2: DJNZ R6,DEL2; DJNZ R7,DEL1; RET; END
RT
程序在倚天版运
行的状态:开始初始化为ff. 大于fe,显示1.
程序在倚天版运行的状态:用导线把p10-p17任意一个接地数码管显示0
;13该程序的功能是小喇叭1khz信号
;*************************************************************************** ;* (程序转载请著明出处 ,未声明可适应本站腾龙/isp开发套件/倚天版开发套件 * ;* 制作(深圳学林电子有限公司),。 *
;* tel:13714407535 石学军 制作(深圳学林电子有限公司)。 *
;*************************************************************************** ;知识要点:定时器的应用学习定时器的应用
;1如果输出1khz 那么1个周期是500us交替出现.晶体12m, 每周期1us ;t1为方式0则m1m0=00h,使用定时器c/t=0 gate=0
;方式0为13位定时器,总时间为2的13次方微秒.=8192微秒,减去500微秒=7692