单片机子程序汇编Word格式文档下载.docx
- 文档编号:15922426
- 上传时间:2022-11-17
- 格式:DOCX
- 页数:15
- 大小:496.50KB
单片机子程序汇编Word格式文档下载.docx
《单片机子程序汇编Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《单片机子程序汇编Word格式文档下载.docx(15页珍藏版)》请在冰豆网上搜索。
MOVB,#0FFH;
XX1:
NOP
NOP;
死循环/主程序
LJMPXX1
SJDL:
重置计数器
DJNZR7,SS1
CPLP1.0;
取反
MOVR7,#10
SS1:
RETI;
返回主程序
3用计时器T1使P1.6口输出1Hz(%30占空比)的方波
ORG0000H
ORG001BH;
(T1)
LJMPSJDL
ORG0030
00010001,T1、T0都为方式一,定时器模式
MOVTH1,#60;
或者(#3CH)
MOVTL1,#176;
0B0H定时50ms
SETBTR1;
启动定时器T1
SETBET1;
MOVR7,#6;
LOOP:
LJMPLOOP
DJNZR7,XX1;
减一不为0则转移
CPLP1.6;
取反
设置延时(6*50ms=0.3秒)
JBP1.6,XX1;
若P1.6为高
(1)则跳
MOVR7,#14;
设置延时(14*50ms=0.7秒)
RETI
4用计时器T0使P1.0口输出10Hz(%50占空比)的方波;
ORG0000H
LJMPSJDL
MOVTMOD,#11H
SETBTR0
SETBEA
SETBET0
XX1:
CPLP1.0
ERTI
⑤波特率的计算方法:
假若现在单片机外接的晶振为11.0592MHz时,以T/C2作波特率发生器,根据波特率公式:
波特率=Fosc/2x16x(65536-t)
9600=11.0592MHz/2x16x(65536-t)
t=65500=0xFFD
2.内存,置数‘’
a)将20H~7FH置01H
MOVR0,#20H;
MOVR7,#96;
次数
MOV@R0,#01H
INCR0;
DJNZR7,XX1
②;
区域指数,30H到39H置为1到10
START:
MOVR1,#30H
MOVA,#01H
MOVR2,#10
MOV@R1,A
INCR1
INCA
DJNZR2,XX1
END
3.排序
a)排序0,1,2,3...9--->
9,8,7,6...0
MOVR1,#90H
SETNUM:
MOV@R1,A;
置数
DJNZR2,SETNUM
SHORT:
MOVR0,#90H;
首地址
MOVR2,#9;
字节数
MOVA,R0
MOVR1,A;
R1存放首地址,为了保存原始数据
MOVA,R2
MOVR4,A;
R4中存放字节数,为了保存原始数据
CLRF0;
判断是否交换
MOVA,@R1;
取出第一个数,给A,A作为中间量,此时A=1
MOVR5,A;
将第一个数赋值给R5,此时R5=1
CLRC;
清零进位位
将第二个数也赋值给A,A还是作为中间量,此时A=2
SUBBA,R5;
A=A-R5,R5值不变,此时A=1,C=0,R5=1
JCLOOP1;
A<
R5
SETBF0;
设置交换位
MOVA,R5;
此时A=1,R5=1
XCHA,@R1;
此时A=2,@R1=1
DECR1;
此时@R1=1
此时A=1,@R1=2
INCR1;
此时@R1=1
LOOP1:
MOVA,@R1;
将第二位数给中间位A,准备跳转到LOOP进行下一次排序
DJNZR4,LOOP;
最高交换9次
JBF0,SHORT;
如果还有交换发生,就从头开始,如果没有交换发生,则说明排
序完成
RET
4.累加
(一)寻址方式;
(详细见教材P.44)
①寄存器间接寻址:
MOVA,@Ri;
i=0/1
如果Ri中的内容为40H,即从Ri中找到源操作数所在的单元的地址40H,然后把内部RAM40H地址单元中的内容传送给A。
2#Rn,立即数Rn,单元地址@Rn,间接寻址
③基址寄存器+变址寄存器间接寻址
MOVCA,@A+DPTR
如果A中内容为05H,DPTR的内容为0400H。
指令的结果是把程序存储器0405H单元的数传送给A。
本寻址方式的另外2条:
MOVCA,@A+PC
JMP@A+DPTR
(二)将30H~3FH中的数累加,和放到4041H
MOVR0,#30H;
首址赋给R0
MOVR7,#16;
0~F共16个数
MOV40H,#00H;
MOV41,#00H;
4041H清零
MOVA,@R0;
将30H单元的数赋给A
ADDA,41H;
相加结果放入A
MOV41H,A;
A传送给41H
MOVA,#00H;
把A清零
ADDCA,40H;
带进位加
MOV40H,A;
R0+1
DJNZR7,LOOP;
(三)将20H~7FH中的数累加到R3R4中(BCD加法):
MOVR0,#20H;
MOVR7,#96;
MOVR3,#00H;
MOVR4,#00H;
MOVA,@R0;
ADDA,R4;
A+R4→A
DAA;
MOVR4,A;
MOVA,#00H;
ADDCA,R3;
A+R3+Cy→A
MOVR3,A;
INCR0;
5.延时
a).;
执行循环次数
MOV7DH,#K;
1
XX3:
MOV7EH,#M;
K
XX2:
MOV7FH,#N;
KM
DJNZ7FH,XX1;
KMN
DJNZ7EH,XX2;
DJNZ7DH,XX3;
1重:
0.5ms
2重:
130ms
3重:
33ms
(KMN+2KM+2K+1)×
2T
T:
机器周期(P36)振荡频率Fosc时钟周期Tosc=1/Fosc
机器周期Tcy=12×
Tosc
b)延时50ms
DEL:
MOVR7,#210
MOVR6,#117
DJNZR6,XX2
DJNZR7,XX1
RET
6.跑马灯
MOVA,#0FEH
MOVP1,A
LCALLDEL500
JNBP3.7,XX2;
按下P3.7键,跑马灯加快
JNBP3.0,XX3;
按下P3.0键,跑马灯反向
RLA
LJMPXX1
XX3:
RRA
DEL500:
MOV7FH,#00H
DEL1:
MOV7EH,#00H
DEL2:
DJNZ7EH,DEL2
DJNZ7FH,DEL1
7.串行口通信
a)发送程序
ORG0000H;
LJMPSTART;
ORG0030H;
MOVTMOD,#21H;
设置定时器工作方式(T0计时,T1波特率发生器)
MOVTH1,#0FDH;
设置波特率9600
MOVTL1,#0FDH;
启动定时器1
MOVSCON,#50H;
设置串口工作方式,方式1
JBP3.2,XX1;
直接寻址位(P3.2)为1则转移
MOVSBUF,A;
启动发送
JNBTI,$;
TI为0则跳,等待发送完
CLRTI;
清除标志位
INCA;
累加器A增1
LCALLDEL100;
长调用子程序
LJMPXX1;
DEL100:
MOV7FH,#00H;
MOV7EH,#00H;
DJNZ7EH,$;
DJNZ7FH,DEL1;
RET;
b)接收程序
ORG0023H
LJMPJSYX
T0计时,T1波特
设置波特率9600
SETBES;
打开分开关
MOVA,#03H;
LCALLFS
JSYX:
CLRRI;
清接收标志位
MOVA,SBUF;
接收数据
MOVP1,A;
ANLA,#0FH;
A与
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 子程序 汇编
![提示](https://static.bdocx.com/images/bang_tan.gif)