单片机子程序(汇编)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 ;如果还有交换发生,就从头开始,如果没有交换发生,则说明

相关文档
最新文档