表4-3 常用的各种波特率
Timer1 波特率(bit/s) 4800 2400 1200 19200 9600 4800 2400 1200 Fosc(MHZ) 12 12 12 11.059 11.059 11.059 11.059 11.059 SMOD C/T 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 模式 2 2 2 2 2 2 2 2 自动载入 F3H F3H F6H FDH FDH FAH F4H F8H UART的中断要求:
其中断要求有两种方式:(1)当UART的接收器(RXD)接收到一个字节的数据且将其存入SBUF
寄存器后,就会将RI设定为1,而对AT89C51提出中断要求。(2)当UART的发送器将SBUF寄存器的8个位数据发送出去后,会将TI设定为1。
UART中断要求设定的步骤:
1.设定UART中断起始地址。
ORG 23H JMP
UART
2.设定TIMER1工作在MODE2
MOV
TMOD,#00100000B
3.设定波特率为2400
ANL MOV
4.启动计时器
SETB
TRX
PCON,#01111111B TH1,#0F3H
5.设定UART工作方式
MOV
SCON,#01××0000B
3.设定UART中断功能
MOV
IE,#10010000B
4.3 键盘扫描子程序设计
键盘扫描的步骤:
(1)设置P1口初始值07FH;
第16页,共37页
(2)P1口右移,检测行; (3)P1口左移,检测列; 流程图如图4-2所示。
键盘接口程序如下:
MOV R3,#0F7H ;扫描初值(P2.3=0)
MOV R1,#00H ;取码指针初值 D3: MOV A,R3 ;载入扫描指针
MOV P2,A ;输出至P2,开始扫描行 MOV A,P2
;读入P2
CLR C CPL C
;令C=1
MOV R5,#04H ;检测列 D4: RLC A
;左移一位(P2.7~P2.4) JNC KEYIN ;检测行C=0,表示被按 INC R1 ;没按则取码指针加1 DJNZ R5,D4 ;4列检测完毕了?
MOV A,R3 CLR C CPL C ;C=1
RRC A
;扫描下一行,即下一行为0
MOV R3,A ;存回R3扫描指针寄存器 JC D3
;C=0表示扫描完毕
RET
KEYIN: MOV 22H,R1 ;取码指针存入22H地址
MOV R7,#10 ;消除抖动 D5: MOV R6,#248 DJNZ R6,$
DJNZ
R7,D5
D6: MOV A,P2
;按钮放开否?
XRL
A,R4
4.4 按键发声子程序的设计
按键发声子程序框图如图4-3所示。 程序如下:
ORG 00H
;主程序其始地址
图4-2 读键输入子程序框图 图4-3按键发声子程序框图 第17页,共37页
JMP START ORG 0BH JMP TIM0
;跳至主程序 ;TIMER0中断其始地址 ;跳至TIMER0中断子程序
START: MOV MOV
SETB
D1: CALL CLR JB MOV RL MOV MOVC MOV MOV MOV RL A INC A MOVC MOV
MOV
D2: CALL SETB JB
JMP KEY: SETB MOV
MOV D3: MOV MOV
MOV
TMOD,#00000001B ;设定TIMER0工作在MODE1 IE,#10000010B ;中断使能
TR0
;启动TIMER0
KEY ;调用KEY,判断是否有按下?
EA ;中断屏蔽 F0,D1 ;没按则F0=1,没按则F0=0
A,22H ;有按则将取码指针暂存地址的值载入A A
;乘2
DPTR,#TABLE ;至TABLE取码,取T的值 A,@A+DPTR; TH0,A ;取到的高位字节存入TH0 21H,A ;取到的高位字节存入(21H) A,22H ;再载入取码指针
;乘2
;加1
A,@A+DPTR;至TABLE取相对的低位字节计数值 TL0,A ;取到的高位字节存入TL0 20H,A
;取到的高位字节存入(20H)
KEY ;调用KEY,判断是否有键按下 EA; ;中断使能 F0,D1 ;有按否? D2;
;有则跳至D2
F0
;设F0=1
R3,#0F7H;扫描初值(P2.3=0) R1,#00H ;取码指针初值 A,R3 ;载入扫描指针
P2,A ;输出至P2,开始扫描行 A,P2
;读入P2
第18页,共37页
CLR CPL MOV RLC JNC INC DJNZ MOV CLR CPL RRC MOV JC RET
C C
;令C=1
R5,#04H ;检测列 A
;左移一位(P2.7~P2.4) ;检测行C=0,表示被按 ;没按则取码指针加1 ;4列检测完毕了?
D4:
KEYIN R1 R5,D4 A,R3 C C A
;C=1
;扫描下一行,即下一行为0 ;存回R3扫描指针寄存器 ;C=0表示扫描完毕
R3,A D3
KEYIN: MOV
CLR RET PUSH PUSH MOV MOV CPL POP POP RETI
22H,R1 ;取码指针存入22H地址 F0
;令F0=0
TIM0:
ACC PSW
;将A的值暂存于堆栈 ;将PSW的值暂存于堆栈
TL0,20H ;重设计数值 TH0,21H P3.4 PSW ACC
;将P3.4反相 ;至堆栈取回PSW的值 ;至堆栈取回A的值
TABLE: DW 64021,64103,64260,64400
DW 64524,64580,64684,64777 DW 64820,64898,64968,65030 DW 65058,65110,65157,65178
5软硬件调试及结果
5.1 软件仿真
软件仿真使用的是ISIS 6 Professional,它可以完成单片机的电路仿真。图5-5-1是软件仿真的结果。
第19页,共37页
图5-1-1 软件仿真的结果
5.2硬件焊接
硬件的焊接是毕业设计中重要的环节,用的工具很简单:电烙铁、焊丝和镊子。因为我们选用的是实验板,所以要用导线把各个元器件连接起来,这就要有一定的技术基础,幸好这个在我们以前的生产实习中已经掌握。焊接要细心,还要有耐心。焊接前要对照电路图对元器件有一个合理的布局,那样的话就会使电路简洁明朗,而且不易出错,即使出错也容易检查。 5.3调试
调试的时候,PC机可以使用ComTools串口调试工具,而不必自己编写程序。ComTools的界面
如图5-3-1所示。
图5-3-1 ComTools串口调试工具操作界面
它的主要功能如下:
可设置各种通讯速率、奇偶校验、数据位和停止位;
可分别设置ASCII码(包括中文)或十六进制数据格式的发送模式或接收模式; 能将接收数据保存成文本文件,便于观察分析; 自动保存设置参数,无需每次重新设置;
第20页,共37页