单片机子程序(汇编)教程
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 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
内存,置数‘’
将 20H ~ 7FH 置01H
MOV R0,#20H
原创力文档

文档评论(0)