单片机与PC机串口通信的设计(3)

2019-08-31 00:13

N=Fi÷2÷Fr N:计数值;

Fi:内部计时一次为1us,故其频率为1MHZ; Fr:要产生的频率。

其计数值的求法如下:

T=65536-N=65536-Fi÷2÷Fr

表3-1是各按键音符的频率与计数值T的对照表。

表3-1 各按键音符频率与计数值T的对照表

键值 0 1 2 3 4 5 6 7 音符 低3M 低4FA 低5SO 低6LA 低7SI 中1D0 中2RE 中3M 频率(HZ) 330 349 392 440 494 523 587 659 简谱码(T值) 64021 64103 64260 64400 64524 64580 64684 64777 键值 8 9 A B C D E F 音符 中4FA 中5SO 中6LA 中7SI 高1D0 高2RE 高3M 高4FA 频率(HZ) 698 784 880 988 946 1175 1318 1397 简谱码(T值) 64820 64898 64968 65030 65058 65110 65157 65178 4单片机软件设计

软件的设计是我毕业设计的另一个重要方面。它的好坏直接关系毕业设计的成功与否。我等软

件是用汇编完成的,需要能熟练的掌握汇编语言,还要熟悉AT89C51单片机。

程序流程图是编写软件的重要前提,它是在图表上直观的体现拟设计的目的及过程。也是编译的重要依据,按照流程图一步一步编写程序,单片机软件主程序流程图如图4-1所示。

第11页,共37页

开始 LCD初始化 设置串口初始化 收到数据? 否 否 检测按键输入 是 读入键值 是 转换成键码 串口发送键码 LCD显示并发声 接收数据送LCD显示 图4-1主程序流程图

4.1 CM1601软件子程序设计

LCD1601是通用的点阵型液晶模块,分4位和8位数据传输方式。提供5X7点阵+光标和5X10

点阵+光标的显示模式。除带有驱动IC外,还自带液晶显示控制IC,其本身就是一个能够接受指令,自动控制液晶显示的单片微机子系统。因此,通过软件编程,就可以实现对LCM1601的操作。编程时要求CPU每一次访问都要先对忙标志BF进行识别,当BF=0时,即LDC允许CPU访问时,再进行下一步的操作。操作程序如下: 4.2.1写指令

ENABLE:

MOV CLR SETB CLR NOP SETB

P1,#0FFH RS RW E E

第12页,共37页

;令P1=FFH

;RS=0,R/W=1,读BUSY FLAG地址计数器

JB CLR CLR CLR CALL SETB RET

P1.7,ENABLE ;BUSY FLAG=0? RS ;RS=0,R/W=0写入指令组 RW E

DELAY E

4.2.2写数据 WRITE1: MOV A3:

MOV MOVC CALL INC CJNE RET MOV SETB CLR CLR CALL

R1,#00H A,R1

A,@A+DPTR WRITE2 R1

A,#00H,A3 P1,A RS RW E DELAY

;显示TABLE表的值 ;至TABLE取码 ;显示至LCD

;是否取到“00H”结束码? ;显示数据送至P1

;RS=1,R/W=0写入数据寄存器显示

WRITE2:

SETB E RET

4.2.3 LCD1601初始化

MOV CALL MOV CALL MOV CALL MOV CALL MOV CALL

P1,#01H ENABLE P1,#38H ENABLE P1,#08H ENABLE P1,#06H

;清除屏幕

;功能设定(8位,2行,5×7点矩阵) ;显示器ON,光标ON,闪烁ON ;光标右移

ENABLE

P1,#80H ;令光标回到第一行第一个字位置 ENABLE

4.2串口通信子程序设计

AT89C51的串行口是全双工的UART,它可同时发送和接收数据,是使用特殊寄存器内的SBUF寄存器及SCON串行控制寄存器,如表4-1所示。

表4-1 SCON串行控制寄存器

RI:接收中断标志位。在模式0下,当第8位结束时,硬件会将其设为1;在其他模式下,在

停止位的开始时有硬件设定,次位必须由软件清除。

第13页,共37页

TI:发送中断标志位。在模式0下,当第8位结束时,硬件会将其设为1;在其他模式下,在

停止位的开始时由硬件设定,次位必由软件清除。

RB8:在模式2或3时,发送的第9位放入次位。在模式1时,若SM2=0,则RB8为接收到的停

止位。模式0时,RB8没作用。

TB8:在模式2或3时,发送时的第9位数据位由软件控制。

REN:由软件设定或清除,以决定是否接收串行输入数据,REN=1,接收;REN=0,发送。 SM2:当串行口为模式2或3时,使能多处理器通信的功能。在模式2或3时,如果SM2=1,则

当接收到第9位数据为0时,RI不动作。在模式1时,若SM2=1,当接收到的停止位不正确时,RI也不动作。在模式0时,SM2必须为0。

SM1:串行口模式选择。 SM0:串行口模式选择。

UART共有四种工作方式,MODE0可发送或接收8位的数据;MODE1可发送或接收10的数据;MODE2K

可发送或接收11的数据;MODE3与 MODE2的功能几乎完全一样,不同的是MODE2的发送速率固定,而MODE3是可变的。现在就本文中用到的MODE1作一重点介绍。 MODE1其设定如下:

MOV JBC MOV JBC

SCON,#00000000B TI,LOOP

;发送数据工作方式

;发送是否完毕?是则跳至LOOP,并清除TI=0 ;接收数据工作方式

;接收是否完毕?是则跳至LOOP,并清除RI=0

SCON,#00010000B RI,LOOP

MODE0KE可发送或接收11位的数据,此10个位分别是1个起始位、8个数据位和1个停止位。

MODE1发送数据的速度(称为波特率)是可变的,由TIMER1或TIMER2控制且最好工作在MODE2(自动载入模式),这样只要设定TH1一次即可。当UART接收(RXD引脚)到一个字节的数据后,会使SCON寄存器内的RI位设定为1,CPU只要检查RI=1就可知道UART已接收到数据。若数据通过UART输出时(TXD引脚),在8个位输出完毕后,SCON寄存器内的TI位会被设为1,CPU只要检查到TI=1就可知道可以再发送下一个字节。

控制波特率的寄存器为PCON,如表4-2所示。说明如下: PCON:电源控制寄存器(POWER CONTROL REGISTER)。

表 4-2 电源控制寄存器

SOMD:双倍波特率位。当串行工作于模式1、2或3时,如使用TIMER1做波特率发生器,且SMOD=1

则波特率为双倍。

—:保留位。

GF1:一般用途,对于AT89系列,GF1为通用标志位。 GF0:一般用途,对于AT89系列,GF0为通用标志位。

第14页,共37页

PD:电源下降位,对于AT89系列,PD为1时进入掉电状态。 IDL:IDLE模式位,对于AT89系列,IDL为1是进入空闲工作方式。 注意:PD和IDLE同时为1时,PD较优先。 其设定方式如下: (1) 设定波特率:

MOV ANL 或 ORL MOV SETB

TMOD,#00100000B PCON,#01111110B

;设定TIMER1的MODE2 ;设SMOD=0

PCON,#10000000B TH1,#0FDH TR1

;设SMOD=1

;设定TIMER1的计数值 ;启动TIMER1

(2)设定UART工作方式

SCON,#01010000B RI,LOOP2

;MODE1做接收,REN=1

MOV JBC 或 MOV JBC

SCON,#0100000B TI,LOOP2

;MODE做发送,REN=0

波特率的计算:

(1) MODE0的波特率=振荡器频率÷12 振荡频率=12MHZ

波特率=1MHZ

(2) MODE2的波特率=(2/64)×振荡频率 振荡频率=12MHZ

SMOD=0 SMOD=1

BAUD=187.5KHZ BAUD=375KHZ

(3) MODE1和MODE3:利用TIMER工作在MODE2模式(自动载入)产生的波特率为

(2/32)×[振荡频率/(12×(256-TH1))]

常用的各种波特率如表4-2-3所示。

第15页,共37页


单片机与PC机串口通信的设计(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:山西XXXX煤化工有限公司污水处理及中水回用设计方桉

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: