7.设计一个AT89C51单片机的双机通信系统,并编写程序将甲机片外RAM 3400H~3420H单元中的数据块通过串行口传送到乙机的片内RAM 40H~60H单元中。
串行口定义在工作方式1下发送。采用定时器T1方式2作波特率发生器,设波特率为4800,fosc=11.0592MHz。
{fosc}?(SMOD?1)11.0592?106?(SMOD?1)
X?256??256?{波特率}?3844800?384SMOD=0时,X=250=FAH
SMOD=1时,X=244=F4H
本题取SMOD为0
双机异步通信连接图
解:编写发送子程序如下:
MOV TM0D,#20H ;设置定时器T1为方式2 MOV TL1,#0FAH ;设预置值 MOV TH1,#0FAH
SETB TR1 ;启动定时器T1
MOV SCON,#40H ;设置串行口为方式1 MOV PCON,#00H ;SMOD=0
MOV DPTR,#3400H ;设数据块指针 MOV R7,#21H ;设数据长度
TRS: MOVX A,@DPTR ;取数据送至A
MOV SBUF,A ;数据送至SBUF,启动发送
WAIT: JNB TI,$ ;判1帧是否发送完
CLR TI
INC DPTR ;更新数据单元 DJNZ R7,TRS ;循环发送至结束 RET ;返回
在进行双机通信时,两机应用相同的工作方式和波特率,因而接收子程序如下:
MOV TMOD,#20H ;设置定时器1为方式2 MOV TL1,#0FAH ;设预置值 MOV TH1,#0FAH
SETB TR1 ;启动定时器T1
MOV SCON,#40H ;设置串行口为方式3 MOV PCON,#00H ;SMOD=0
MOV R0,#40H ;设置数据块指针 MOV R7,#21H ;设数据块长度 SETB REN ;允许接收
WAIT: JNB RI,$ ;判1帧是否接收完
CLR RI
MOV A,SBUF ;读入一帧数据 MOV @R0,A ;存放数据
INC R0 ;修改地址指针
DJNZ R7,WAIT ;判断数据块接收完否 RET ;返回
16
8.利用80C51串行口控制8位发光二极管工作,要求发光二极管每1S交替地亮、灭,画出
电路图并编写程序。
;P3.1 EQU CLK
;P3.0 EQU SDA(A、B) ;P1.0 EQU CLR CLR P1.0 SETB P1.0
MOV SCON,#00H MOV A,#55H AA: MOV SBUF,A
JNB TI,$ CLR TI
ACALL DELAY_1S RR A AJMP AA
第8章作业参考答案
P199 3,5
3.AT89S51有几个中断源,各中断申请标志是如何产生的,又如何清“0”的?CPU响应中断时,中断入口地址各是多少?
答:AT89S51单片机有5个中断源,分别为:2个外部输入中断源INT0(P3.2)和INT1(P3.3)2个片内定时器T0和T1的溢出中断源TF0(TCON.5)和TF1(TCON.7);1个片内串行口发送和接收中断源TI(SCON.1)和RI(SCON.0)。 各中断标志的产生和清“0”如下: (1)外部中断类
外部中断是由外部原因引起的,可以通过两个固定引脚,即外部中断0INT0和外部中断INT1输入信号:
INT0——外部中断0请求信号,由P3.2脚输入。通过IT0(TCON.0)来决定中断请求信号是低电平有效还是下跳变有效。一旦输入信号有效,则向CPU申请中断,并且使IE0=1。硬件复位。
INT1——外部中断1请求信号,功能与用法类似外部中断0。 (2)定时中断类
定时中断是为满足定时或计数溢出处理的需要而设置的。当定时器/计数器中的计数结构发生计数溢出时,即表明定时时间到或计数值已满,这时就以计数溢出信号作为中断请求,去置位一个溢出标志位。这种中断请求是在单片机芯片内部发生的,无需在芯片上设置引入端,但在计数方式时,中断源可以由外部引入。
TF0——定时器T0溢出中断请求。当定时器T0产生溢出时,定时器T0中断请求标志TF0=1,请求中断处理。使用中断时由硬件复位,在查询方式下可由软件复位(即清“0”)。 TF1——定时器TI溢出中断请求。功能与用法类似定时器T0。 (3)串行口中断类
串行口中断是为串行数据的传送需要而设置的。串行中断请求也是在单片机芯片内部发生的,但当串行口作为接收端时,必须有一完整的串行帧数据从RI端引入芯片,才可能
17
引发中断。
RI或TI——串行中断请求。当接收或发送完一串行帧数据时,使内部串行口中断请求标志RI或TI=1,并请求中断。响应中断后必须软件复位。
CPU响应中断时,各中断源的中断入口地址是:
中断源 外部中断0 外部中断1 串行口中断 入口地址 0003H 0013H 0023H 定时器T0中断 000BH 定时器T1中断 001BH 定时器T2中断 002BH(仅AT89S52有) 5.用定时器T1定时,要求在P1.6口输出一个方波,周期是1min。晶振频率为12MHz,请
用中断方式实现,并分析采用中断后的优点。
解:计算半周期为250μS方波的时间初值。
8
(2-X)×1μS=250μs X=6=06H 即TH0=06H,TL0=06H;
采用定时器1,方式2定时250μS,则TMOD=20H;采用中断方式工作,IE=88H
输出周期为:P1.6为1min
ORG 0000H AJMP MAIN ORG 001BH AJMP AA ORG 0030H
MAIN: MOV TH0,#06H MOV TL0,#06H MOV TMOD,#20H MOV IE,#88H SETB TR0
MOV R5,#40 ;250μS×40=10ms
MOV R6,#100 ;10ms×100=1S MOV R7,#30 ;1S×30=0.5min
SJMP $ 中断服务子程序
AA: DJNZ R5,BB ;250μS到中断,判10ms到?
MOV R5,#40
DJNZ R6,BB ;10ms到,判到1S? MOV R6,#100
DJNZ R7,BB ;1S到,判到0.5min?
MOV R7,#30 ;半周期0.5min到,P1.6求反 CPL P1.6
BB: RETI
第9章习题参考答案
P236 3,4,5
3.以AT89S51为主机,扩展2片6264 RAM存储器芯片,设计硬件布线图。
18
(1)译码法:
IC0芯片地址范围0000H-1FFFH, IC1芯片地址范围2000H-3FFFH。 (2)线选法:
4.根据图9.5所示线路设计程序。其功能是:按下K0~K3后,对应LED4~LED7发光,按下K4~K7后,对应LED0~LED3发光。
19
解: ORG 1000H
LOOP: MOV DPTR,#0FEFFH MOVX A,@DPTR SWAP A
MOVX @DPTR,A SJMP LOOP
5.请利用74HC138设计一个译码电路,分别选中2片29C256和2片62256,且列出各芯片所占的地址范围。
VCC74HC138E3 E2 E1C Y1BA Y0774HC373 Q7 Q0ALEGOED7 D0EAP0PSENWRRDA7 A0IC029C256D7 D0 OEA7 A0IC129C256D7 D0 OEA7 A0IC262256WE D7 D0 OEA7 A0IC262256WE D7 D0 OECEA14 A87CEA14 A87CEA14 A87CEA14 A8AT89S51 P2.7P2.6 P2.0
IC0芯片地址范围0000H-7FFFH, IC1芯片地址范围8000H-FFFFH, IC2芯片地址范围0000H-7FFFH, IC3芯片地址范围8000H-FFFFH。
注:外部程序存储器一般应包括0000H附近地址,此时/EA接地。
7.试编程对8255进行初始化,使其A口为基本输出,B口为基本输入,C口上半部为输出,C口下半部为输入。
解: 电路图参见P221页图9.8。
20
A口为基本输出(方式0),B口为基本输入(方式0),C口上半部为输出,C口半班部为输入。
控制字为10010101B,其控制口地址为FF7FH。
按方式0输入,B口按方式1输出,C口上半部按方式0输出,C口半班部按方式1输入。 解: 电路图参见P211页图9.8。
控制字为1000 0011B,其控制口地址为FF7FH。 其初始化程序为:
MOV DPTR,#0FF7FH MOV A,#83H MOVX @DPTR,A
21