单片机子程序(汇编)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.T0/T1产生方波:
知识点:中断,定时/计数器
TCON寄存器:
TMOD寄存器:
①用计时器T0使P1.0口输出1Hz (%50占空比) 的方波;
②通过P1.0口使发光二级管闪烁(0.5s)。
ORG 0000H
LJMP START
ORG 000BH ;T0
LJMP SJDL ;伪指令
ORG 0030H
START: MOV TMOD,#11H ;把T0、T1都置成16位定时器MOV TL0,#176 ;65536-15536=50000μs
MOV TH0,#60 ;设置计数器,定时50ms
SETB TR0 ;启动定时器T0
SETB EA ;打开总开关
SETB ET0 ; 打开分开关
MOV R7,#10 ; 设置延时(10*50ms=0.5秒)
MOV B,#0FFH;
XX1: NOP
NOP ;死循环/ 主程序
NOP
LJMP XX1
SJDL: MOV TL0,#176 ;
MOV TH0,#60 ;重置计数器
DJNZ R7,SS1
CPL P1.0 ; 取反
MOV R7,#10
SS1: RETI ;返回主程序
③用计时器T1使P1.6口输出1Hz (%30占空比) 的方波
ORG 0000H
LJMP START
ORG 001BH ;(T1)
LJMP SJDL
ORG 0030
START: MOV TMOD,#11H ;00010001,T1、T0都为方式一,定时器模式MOV TH1,#60 ;或者(#3CH)
MOV TL1,#176 ;0B0H 定时50ms
SETB TR1 ;启动定时器T1
SETB EA ;
SETB ET1 ;
MOV R7,#6 ;
LOOP: NOP
NOP
LJMP LOOP
SJDL: MOV TL1,#176 ;重置计数器
MOV TH1,#60 ;
DJNZ R7,XX1 ;减一不为0则转移
CPL P1.6 ;取反
MOV R7,#6 ;设置延时(6*50ms=0.3秒)
JB P1.6,XX1 ;若P1.6为高(1)则跳
MOV R7,#14 ;设置延时(14*50ms=0.7秒)
XX1: RETI
④用计时器T0使P1.0口输出10Hz (%50占空比) 的方波;
ORG 0000H
LJMP START
ORG 000BH ;T0
LJMP SJDL
ORG 0030H
START: MOV TMOD,#11H
MOV TL0,#176 ;65536-15536=50000μs
MOV TH0,#60 ;设置计数器,定时50ms
SETB TR0
SETB EA
SETB ET0
XX1:LJMP XX1
SJDL: MOV TL0,#176 ;
MOV TH0,#60 ;
CPL P1.0
ERTI
⑤波特率的计算方法:
假若现在单片机外接的晶振为11.0592MHz时,以T/C2作波特率发生器,根据波特率公式:
波特率=Fosc/2x16x(65536-t)
9600=11.0592MHz/2x16x(65536-t)
t=65500=0xFFD
2.内存,置数‘’
a)将20H ~ 7FH 置01H
MOV R0,#20H ;
MOV R7,#96 ;次数
XX1: MOV @R0,#01H
INC R0 ;
DJNZ R7,XX1
② ;区域指数,30H到39H置为1到10
ORG 0000H
LJMP START
START: MOV R1,#30H
MOV A,#01H
MOV R2,#10
XX1: MOV @R1,A
INC R1
INC A
DJNZ R2,XX1
END
3.排序
a)排序0,1,2,3...9 ---> 9,8,7,6 0
ORG 0000H
LJMP START
ORG 0030H
START: MOV R1,#90H
MOV A,#01H
MOV R2,#10
SETNUM: MOV @R1,A ;置数
INC R1
INC A
DJNZ R2,SETNUM
SHORT: MOV R0,#90H ;首地址
MOV R2,#9 ;字节数
MOV A,R0
MOV R1,A ;R1存放首地址,为了保存原始数据
MOV A,R2
MOV R4,A ;R4中存放字节数,为了保存原始数据
CLR F0 ;判断是否交换
MOV A,@R1 ;取出第一个数,给A,A作为中间量,此时A=1 LOOP: MOV R5,A ;将第一个数赋值给R5 ,此时R5=1 INC R1
CLR C ;清零进位位
MOV A,@R1 ;将第二个数也赋值给A,A还是作为中间量,此时A=2
SUBB A,R5 ;A=A-R5,R5值不变,此时A=1,C=0,R5=1
JC LOOP1 ;A SETB F0 ;设置交换位 MOV A,R5 ; 此时A=1,R5=1 XCH A,@R1 ; 此时A=2,@R1=1 DEC R1 ; 此时@R1=1 XCH A,@R1 ; 此时A=1,@R1=2 INC R1 ; 此时@R1=1 LOOP1: MOV A,@R1 ;将第二位数给中间位A,准备跳转到LOOP进行下一次排序DJNZ R4,LOOP ;最高交换9次 JB F0,SHORT ;如果还有交换发生,就从头开始,如果没有交换发生,则说明