‘壹’ 51单片机中串口如果只用来下载程序程序,还要初始化吗
只用来下程序,你的程序中不用串口就不需要初始化。凡是能够用串口下载程序的单片机,内部都有自举程序,这个程序是隐藏的,不占用用户程序空间,在自举程序中会对串口初始化,但一旦脱离自举程序把权限交给用户,进行了一次类似手机恢复出厂设置的动作,你程序中再次使用串口时还是得初始化。
‘贰’ 51单片机 多机串口通信,这样初始化有错吗
1.设置定时器1的工作方式
2.设置串口的工作方式
3.设置波特率
4.开总中断,开串口中断
5.启动定时器1
‘叁’ 51单片机串口初始化步骤,首先初始化那个在初始化那个,最好是华为等大公司的初始化模版
设置系统时钟-》设定分频-》设定引脚输出输入方式(推挽或漏极开路)-》设定定时器1工作模式在八位自动重载模式-》载入定时器初始值-》开启定时器1-》开启串口0中断使能-》开启总中断使能-》开启串口0接受允许-》设定串口0工作模式-》初始化完成。
将数据压入发送缓冲寄存器
用while
语句等待发送标志位被置位
然后清0,以为数据发送完成。
‘肆’ 两个串口的51单片机的串口初始化与中断的问题
不能,两个串口不能用同一个时钟,一个得用TIM1,一个得用BRT。
‘伍’ 51单片机如何初始化成8-n-1(8数据位,无奇偶校验位,1停止位)波特率,是用串口的模式几
void
uart_init(void)
{
SCON
=
0x50
;//串行方式1,
8-bit数据位,允许接收
TMOD
|=
0x21;//定时器1使用模式2,8-bit自动重装用于产生波特率
//
PCON
|=
0x80;//SMOD=1;波特率增倍
PCON
&=
0x7f;//SMOD=0;波特率不增倍
TH1
=
0xfd;
//Baud:19200(SMOD=1)或9600(SMOD=0),11.0592MHz
IE
|=
0x90;
//全局中断开,允许串口中断
TR1
=
1;
//定时器1运行,开始产生波特率
}
你可以用串口监视工具来查看单片机发出的数据是否正确,祝你成功
‘陆’ C51单片机串口初始化
可以通过缓冲区或者switch语句来实现
字符命令的话一般要buff区缓冲数据最后一次处理
这样的只要switch语句就可以解决了。
在串口中断加入如下代码:
void
uartinterrupt(void)
interrupt
4//串口中断
{
static
unsigned
char
cont;//接收计数
unsigned
char
temp;//临时变量
if(ri)
{
ri
=
0;
switch(cont)
{
case
0:if(sbuf==0x1b){cont=1;return;}//检测第一个起始码
case
1:temp=sbuf-'0';temp=1<
评论
0
0
加载更多
‘柒’ 单片机串口初始化作用是什么initUart()函数的作用是什么
初始化顾名思义就是初始配置,不同的使用有不同的配置.
如果只是为了做一个类似点亮一个LED的话,就不用初始化了.
它并不是程序所必要的.
你若用了定时器,设置波特率,及中断等,那你就得初始化,当然初始化并不是非要写成一个函数.
它也可以直接写到main函数的过程中,只是单独放到一个函数中便于阅读程序.
一般分四个步骤:
1)将相应的引脚配置成UART模式
2)配置和使能UART,包括配置波特率,是否使用FIF0,数据帧格式(数据长度,停止位,奇偶校验,收发数据缓冲区大小等)
3)配置中断(一般分3大类,共7种)
4)读写数据
‘捌’ 51单片机Keil C51下使用printf输出到串口,为何初始化了串口之后就可以使用了
因为是这样的,在Keil\C51\LIB目录下有个putchar.c文件,printf函数会调用该文件中的
putchar函数,putchar里面的使用的寄存器都是标准51的(如TI,SBUF),它
们的地址是固定的,由此可知printf函数只针对串口0。
如果想让printf函数支持串口1或串口2。。。那么修改putchar函数的寄存器即可,比如SBUF改为SBUF1。但是能不能用printf函数对串口0,串口1。。。都适用呢
或者重定义putchar函数。
‘玖’ C51单片机串口初始化为何是这样:SCON=0X52;TMOD=0X20;TH1=0XF3;TR1=1;
SCON-串行口控制寄存器:可位寻址,单片机复位时,各位都被清 SM0、SM1:串行通信方式选择位。SM0SM1工作方式功能说明波特率00方式0同步移位寄存器方式osc f /1201方式18位异步通信方式可变,由定时器控制10方式29位异步通信方式osc f /32 或osc f /6411方式39位异步通信方式可变,由定时器控制 SM2:多机通信控制位。在方式0时,SM2必须为0。在方式1时,若SM2=0,RB8是接受到的停止位;若SM2=1,则只有收到有效的停止位才会激活中断RI,若没有接受到有效停止位,则RI清0。在方式2或3时,如果SM2 = 1,则只有当接收到的第9位数据(RB8)为“1”时,才使RI置“1”,产生中断请求,并将接收到的前8位数据送入SBUF。当接收到的第9位数据(RB8)为“0”时,不提出中断,接收到的前8位数据无效。若SM2 = 0,接收到RB8后必然置位RI,产生中断,此时不论地址帧还是数据帧都能接收。REN:接收控制位。由软件置1或清0,“0”即禁止接收。“1”允许接收。TB8:发送数据的第9 位。方式2和方式3,TB8是要发送的第9位数据,其值由软件置“1”或清“0”。在双机串行通信时,一般作为奇偶校验位使用;在多机串行通信中用来表示主机发送的是地址帧还是数据帧,TB8=1为地址帧,TB8=0为数据帧。RB8:接收数据的第9位。方式2和方式3,RB8存放接收到的第9位数据。在方式1,如SM2 = 0,RB8是接收到的停止位。在方式0,不使用RB8。TI:发送中断标志位。发送数据前由软件清0,发送结束由硬件置1。方式0,发送完8位数据时TI由硬件置“1”,其他方式中,发送停止位时置TI 为“1”。其状态可供软件查询,也可请求中断RI:接收中断标志位。接收前由软件清0,接收完时由硬件置“1”。方式0时,接收完第8位数据RI由硬件置“1”。在其他工作方式中,串行接收到停止位的中间时,该位置“1”。 其状态可供软件查询,也可请求中断 TMOD-定时器控制寄存器:不按位寻址,高四位控制T1,低四位控制T0。地址89HB7B6B5B4B3B2B1B0GATEC/TM1M0GATEC/TM1M0GATE :定时操作开关控制位,当GATE=1时,INT0或INT1引脚为高电平,同时TCON中的TR0或TR1控制位为1时,计时/计数器0或1才开始工作。若GATE=0,则只要将TR0或TR1控制位设为1,计时/计数器0或1就开始工作。C/T :定时器或计数器功能的选择位。C/T=1为计数器,通过外部引脚T0(P3.4)或T1(P3.5)输入计数脉冲。C/T=0时为定时器,由内部系统时钟提供计时工作脉冲。M1 :模式选择位高位M0 :模式选择位低位M1M0工作模式0013位计数/计时器0116位计数/计时器108位自动加载计数/计时器11定时器1停止工作,定时器0分为两个独立的8位定时器TH0及TL0 SCON=0X52 :选择8位异步通信方式,波特率可变,由定时器控制;允许接受;发送中断标志、接收中断标志分别为1、0TMOD=0X20:使用定时器1,8位自动加载计时器TH1=0XF3:设置8位自动加载计时器定时时间,设定波特率为9600TR1=1:启用定时器1