ORG 1000H
MAIN: SETB IT0 SETB EX0 SETB EA
LOOP: AJMP LOOP
ORG 1050H ;中断程序入口 EXTER:MOV R2,#0FFH MOV A, #01H FLASH:RR A MOV R7, #0FFH;定时 LOOP1:MOV R6, #0FFH LOOP2:NOP NOP DJNZ R6, LOOP2 DJNZ R7, LOOP1 MOV P1, A DJNZ R2,FLASH RETI END
5-11. 思路:根据要求,四个故障相当四个中断源,可利用中断查询方法,将四个中断源归结为一个中断请求,同时四个故障信号引到P1口的四个输入端,然后在中断程序中查询P1口,确定是哪一个故障申请的中断。电路如下图所示。一旦发生故障,单片机必须响应中断,因此,该中断必须设置成最高级中断。在中断程序中可以显示故障信息。
扩展4个外中断源电路如下图所示。
P1.3P1.2P1.1OCOVUVOHP1.0?Y1INT1C51 主程序和中断服务程序如下: ORG 0000
AJMP ZCX1
11
NOP
ORG 0013H
AJMP INT1 NOP
ORG 0100H
ZCX1:MOV SP,#30H
MOV IP,#04H
CLR IT1 SETB EA SETB EX1
ZCX2:其他处理程序 AJMP ZCX2 ORG 0200H
INT1: PUSH PSW PUSH ACC
MOV A,P1 ANL A,#0FH
JNB ACC0,X1
ACALL XY1 X1: JNB ACC1,X2 ACALL XY2 X2JNB:ACC2,X3
ACALL XY3 X3: JNB CC3,X4
ACALL XY4 X4: POP ACC POP PSW RETI
XY1: OC处理子程序(略) RET 5-12~5-17略。
第6章 单片机串行通信及接口
6-1~6-3略。
6-4. 串行口的方式控制字SCON=50H,允许接收,T1工作方式控制字TMOD=20H;若晶振频率fOSC=11.0592 MHz,串行口工作于方式1,波特率为4800 bps,查表6-2
12
可得T1计数初值为TH1=TL1=0FAH,此时SMOD=0,所以PCON=00H。 6-5. 设计双机通信系统如下:设甲、乙两进行通信、波特率为2400,晶振均为11.0592MHz。甲机将片外RAM的3400H~34FFH的数据块通过串行口传送给乙机,发送数据前将数据块长度发给乙机,当数据发送完向乙机发送一个累加校验和。乙机接收将数据放在片外RAM的4400~44FFH单元中,同时进行累加和校验,如果和甲机发送的累加和一致,发数据“00H”表示接收正确,如果不一致,发数据“FFH”,甲方再重发。 解:(1)T1计数初值:两机晶振为11.0592MHz,波特率为2400,T1工作在定时器方式2,查表6-2可得TH1=TL1=0F4H,PCON寄存器的SMOD位为0。
(2)约定R7作为数据长度计数器,计数256个字节。采用减1计数,初值取0,R6作为累加和寄存器。 甲机发送程序:
TRT:MOV TMOD,#20H
MOV TH1,#0F4H MOV TL1,#0F4H SETB TR1
MOV SCON,#50H RPT:MOV DPTR,#3400H
MOV R7,#00H MOV R6,#00H MOV SBUF,R7 LOOP1:JBC TI,L00P2
AJMP LOOP1
LOOP2:MOVX A,@DPTR
MOV SBUF,A ADD A,R6 MOV R6,A INC DPTR
LOOP4:JBC TI,LOOP3
AJMP LOOP4
LOOP3:DJNZ R7,LOOP2
MOV SBUF,R6 MOV R6,#00H
LOOP6:JBC TI,LOOP5
AJMP LOOP6
LOOP5:JBC RI,LOOP7
13
AJMP LOOP5
LOOP7:MOV A,SBUF
JZ LOOP8 AJMP RPT LOOP8:RET 乙机接收程序:
首先接收数据长度,然后接收数据,当接收256字节后,接收校验码,进行累加和校验,数据传送结束时,向甲机发送一个状态字节,表示传送正确或出错。 RSU:MOV TMOD,#20H
MOV TH1,#0F4H MOV TL1,#0F4H SETB TR1
MOV SCON,#50H DPT:MOV DPTR,#4400H LOOP0:JBC RI,L00P1
AJMP LOOP0
LOOP1:MOV A,SBUF
MOV R7,A MOV R6,#00H WTD:JBC RI,LOOP2 AJMP WTD
LOOP2:MOV A,SBUF
MOVX @DPTR,A INC DPTR ADD A,R6 MOV R6,A DJNZ R7,WTD
LOOP5:JBC RI,LOOP4
AJMP LOOP5
LOOP4:MOV A,SBUF
XRL A,R6 MOV R6,#00H JZ LOOP6
MOV SBUF,#0FFH LOOP8:JBC TI,LOOP7
AJMP LOOP8
14
LOOP7:AJMP DPT
LOOP6:MOV SBUF,#00H LOOP9:JBC TI,LOOP3
AJMP LOOP9 LOOP3:RET
6-6. 电路图如下图所示,串行口处于方式0条件下发送数据。 程序如下:
ORG 2000H
MOV SCON,#00H MOV A,#0FFH MOV SBUF,A LOOP:JNB TI,LOOP
CLR TI ACALL DEL CPL A
MOV SBUF,A SJMP LOOP DEL: MOV R5,#10 DEL0:MOV R6,#200 DEL1:MOV R7,#248
NOP
DEL2:DJNZ R7,DEL2
DJNZ R6,DEL1 DJNZ R5,DEL0 RET END
第7章 单片机系统扩展
略。
第8章 A/D和D/A转换的接口技术
8-1~8-6、8-8、8-9、8-10、8-13~8-15略。
8-7. 用8031和DAC0832设计一个周期和幅值可调的锯齿波、三角波和阶梯波的波形发生器。要求画出电路图并编程。 答:见下图
15