例 2 利用定时/计数器 T0 的方式 1,产生 10ms 的定时,并使 P1.0 引脚上输出周期为 20ms
的方波,采用中断方式,设系统时钟频率为 12 MHz。
解:1、计算计数初值 X:
由于晶振为 12 MHz,所以机器周期 Tcy 为 1 ms。
所以:
N=t/ Tcy =10×10-3 / 1×10-6=10000
X=65536-10000=55536=D8F0H
即应将 D8H 送入 TH0 中,F0H 送入 TL0 中
2、求 T0 的方式控制字 TMOD:
M1M0=01,GATE=0,C/T=0,可取方式控制字为 01H;
ORG 0000H
LJMP MAIN ;跳转到主程序
ORG 000BH ;T0 的中断入口地址
LJMP DVT0 ;转向中断服务程序
ORG 0100H
MAIN:MOV TMOD,#01H ;置 T0 工作于方式 1
MOV TH0,#0D8H ;装入计数初值
MOV TL0,#0F0H
SETB ET0 ;T0 开中断
SETB EA ;CPU 开中断
SETB TR0 ;启动 T0
SJMP $ ;等待中断
DVT0:CPL P1.0 ;P1.0 取反输出
MOV TH0,#0D8H ;重新装入计数值
MOV TL0,#0F0H
RETI ;中断返回
END
• 2、串行口方式 1 的发送和接收
例 7-4:89C51 串行口按双工方式收发 ASCII 字符,最高位用来作奇偶校验位,采用奇校验
方式,要求传送的波特率为 1200b/s。编写有关的通信程序。
解:7 位 ASCII 码加 1 位奇校验共 8 位数据,故可采用串行口方式 1。
89C51 单片机的奇偶校验位 P 是当累加器 A 中 1 的数目为奇数时,P=1。如果直接把 P 的
值放入 ASCII 码的最高位,恰好成了偶校验,与要求不符。因此,要把 P 的值取反以后放
入 ASCII 码最高位,才是要求的奇校验。
• 2、串行口方式 1 的发送和接收
• 双工通信要求收、发能同时进行。收、发操作主要是在串行接口进行,CPU 只是
把数据从接收缓冲器读出和把数据写入发送缓冲器。数据传送用中断方式进行,响应中断
以后,通过检测是 RI 置位还是 TI 置位来决定 CPU 是进行发送操作还是接收操作。
发送和接收都通过调用子程序来完成,设发送数据区的首地址为 20H,接收数据区
的首地址为 40H,fosc 为 6MHz,通过查波特率初值(
表
7-2)可知定时器的初装值为
F3H。定时器 T1 采用工作模式 2,可以避免计数溢出后用软件重装定时初值的工作。
• 2、串行口方式 1 的发送和接收
主程序
MOV TMOD ,#20H ;定时器 1 设为模式 2
评论0