NOP ;1 RET ;2
建议:不要把100改成十六进制数64H.非常容易造成附加错误。 更不能把49写成49H
第二种方法——粗略计算
(1+2+(1+2)*20+20*250*2)*2μs =20126μs≈20ms 误差不足1%
DEL20ms: MOV R7,#20 ;1*2μs=2μs
DELAY1:MOV R6,#250 ;1*20*2μs=40μs
DELAY2:DJNZ R6,DELAY2 ;2*20*250*2μs=20ms
DJNZ R7,DELAY1 ;2*20*2μs=80μs RET ;2*2μs=4μs
四、 单片机第六章作业讲评
补充题:
1.设单片机主频为12MHz,利用定时器T0(定时方式1)编程实现在P1.0上输出频率为500Hz方波脉冲, (用中断方式实现)。
解:频率为500Hz方波脉冲,周期为2000μs,每半个周期P1.0电平翻转一次即每1000μs P1.0电平翻转一次
采用方式1:
16
TC=M-T/T计数=2-1000μs /1μs =65536-1000=664536=0FC18H
16
=2-1024+24=10000H-400H+18H=0FC18H
程序:
ORG 0000H AJMP MAIN
ORG 000BH AJMP TTT0
MAIN: MOV TMOD, #01H MOV TH0, #0FCH MOV TL0, #18H
MOV IE, #82H SETB TR0
SJMP $ (如果没这条指令会怎样?) TTT0: MOV TH0, #0FCH
MOV TL0, #18H CPL P1.0
RETI END
2.设单片机主频为12MHz,利用定时器T1(定时方式1)编程实现在P1.1上输出频率为250Hz方波脉冲, (用中断方式实现)。
解:频率为250Hz方波脉冲,周期为4000μs,每半个周期P1.3电平翻转一次即每2000μs P1.1电平翻转一次
采用方式1:
16
TC=M-T/T计数=2-2000μs /1μs =65536-2000=63536=0F830H
16
=2-2048+48=10000H-800H+30H=0F830H
程序:
ORG 0000H AJMP MAIN
ORG 001BH AJMP TTT1
MAIN: MOV TMOD, #10H TTT1: MOV TH1, #0F8H MOV TH1, #0F8H MOV TL1, #30H
MOV TL1, #30H CPL P1.1;(PH )? MOV IE, #88H RETI SETB TR1 (reti) SJMP $ END
3.设单片机主频为6MHz,利用定时器T0(定时方式2)编程实现在P1.2上输出频率为5KHz方波脉冲, (用中断方式实现)。
解:频率为5KHz方波脉冲,周期为200μs,每半个周期P1.2电平翻转一次即每100μs P1.2电平翻转一次
采用方式2,因为主频6MHz,所以计数器每加1用时2μs。
8
TC=M-T/T计数=2-100μs /2μs=206 程序:
ORG 0000H AJMP MAIN
ORG 000BH AJMP TTT0
MAIN: MOV TMOD, #02H TTT0: CPL P1.2; MOV TH0, #206 RETI MOV TL0, #206 MOV IE, #82H
SETB TR0 SJMP $ END
4.设单片机主频为6MHz,利用定时器T1(定时方式2)编程实现在P1.3上输出频率为500Hz方波脉冲, (用中断方式实现)。
解法1:频率为500Hz方波脉冲,周期为2000μs,每半个周期P1.3电平翻转一次即每1000μs P1.3电平翻转一次
采用方式2, 因为主频6MHz,所以计数器每加1用时2μs。定时500μs,即2次中断完成一次反转。
8
TC=M-T/T计数=2-500μs /2μs=256-250=6 程序:
ORG 0000H AJMP MAIN
ORG 001BH AJMP TTT1
MAIN: MOV TMOD, #20H TTT1: DJNZ 50H,NEXT MOV TH1, #6 CPL P1.3; MOV TL1, #6 MOV 50H,#2 MOV IE, #88H NEXT: RETI(RET1) MOV 50H,#2 SETB TR1 SJMP $ END
五、 单片机第七章作业讲评
例2:单片机8751通过8255可编程接口芯片控制打印机的工作,8255的PA口连接打印机数据线,PA口、PC口为输出方式,PB口输入方式,A组工作于模式1,B组工作于模式0,P2.2做8255的片选信号,8255以中断的方式向单片机INT0索要数据,画出逻辑框图。写出8255四个口(PA口、PB口、PC口、命令/状态口)地址。打印信息共30个字节在内存RAM 40H开始的单元中,编程实现打印功能。 答:逻辑电路画在
D0 Q0 A0 PA D0~D7 右侧。 P0 D7 Q1 字符 A1
ALE G 打印机
ACK 8751 74LS 373 8255 PC6 D0~D7 PC7 OBF 8 WR WR RD PB RD
P2.2 CS PC
INT0 PC3
口、PB口、PC口、命令/状态口)的地址分别是: 0000H、0001H、0002H、0003H;(0FBFCH、0FBFDH、0FBFEH、0FBFFH; 不用的地址线以“1”计) 将8255的PA口、PC口为输出方式,PB口输入方式,A组工作于模式1,B组工作于模式0方式的命令字是0A2H,编程段如下:
ORG 0000H SJMP MAIN ORG 0003H SJMP INT000
MAIN:MOV DPTR,#0003H(0FBFFH,不用的地址线以“1”计) INT000:INC R1
MOV A,#0A2H MOV A,@R1
MOVX @DPTR,A MOVX @DPTR,A MOV A,#0DH;令PC6=1(允许PA口输出中断) DJNZ R2,DONE MOVX @DPTR,A CLR EX0 MOV IE,#81H ;允许INT0中断 DONE: RETI MOV R1,#40H MOV R2,#29
MOV DPTR,#0000H(0FBFCH,不用的地址线以“1”计);PA口地址 MOV A,@R1
MOVX @DPTR,A ;给打印机送出第一个字符 SJMP $ ;等待中断 END
四个口(PA
例3.单片机8751通过8255可编程接口芯片控制数字输入机的工作,8255的PB口连接数字输入机的数据线,将8255的PB口、PC口为输入方式,PA口输出方式, A组工作于模式0,B组工作于模式1,PB口做数字输入口,地址线A7做片选信号。画出逻辑框图。写出8255四个口(PA口、PB口、PC口、命令/状态口)地址。将40个字节信息由数字输入机经8255以中断的方式(以INT1作为中断申请口)传送到内存RAM 30H开始的单元中,编程实现之。
P0 D0 Q0 D7 Q1 G Q7 A0 PB A1 CS ALE 8751 WR 74LS 373 8255 PC2 D0~D7 PC1 WR RD RD PA RST INT1 RST PC PC0
D0~D7 数字输入机
STB
IBF
答:其逻辑框图如上所示。
四个口(PA、PB、PC、命令/状态口)的地址分别是: 00H、01H、02H、03H;(7CH、7DH、7EH、7FH; 不用的地址线以“1”计) 将8255的PA口为输出方式,PB口、PC口输入方式, A组工作于模式0,B组工作于模式1。命令字是8FH,编程段如下:
ORG 0000H SJMP MAIN ORG 0013H SJMP INT111
MAIN:MOV R0,#03H(7FH,不用的地址线以“1”计) ; INT111:MOVX A,@R0
MOV A,#8FH MOV @R1,A MOVX @R0,A INC R1
MOV A,#05H; 令PC2=1(允许PB口输入中断) DJNZ R2,DONE MOVX @R0,A CLR EX1 MOV IE,#84H ;允许INT1中断 DONE: RETI MOV R1,#30H MOV R2,#40
MOV R0,#01H(7CH,不用的地址线以“1”计) ,PB口地址 SJMP $ ;等待中断 END