打印
[国产单片机]

52单片机用定时器2串口通信,单片机与计算机通信用哪个波...

[复制链接]
1347|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
沙发
qq137098502| | 2016-9-6 10:11 | 只看该作者
波特率设置的可能不对,




举个例子,看到了吧,误差50%
我有一次没有看误差,也出现了乱码的情况。

使用特权

评论回复
板凳
jpaekeo|  楼主 | 2016-9-14 16:07 | 只看该作者
qq137098502 发表于 2016-9-6 10:11
波特率设置的可能不对,

大神能否给一个利用定时器2的串口初始化程序,我用的是STC89C52晶振12MHZ。
STC的波特率计算器只给了STC15系列的定时器2的串口初始化程序,两者初始化程序不通用啊。

使用特权

评论回复
地板
NE5532| | 2016-9-14 16:08 | 只看该作者
只有自己才是救世主,发0x55,用示波器看波特率吧。

使用特权

评论回复
5
ayb_ice| | 2016-9-15 14:38 | 只看该作者
主循环连个while(1)都没有

使用特权

评论回复
6
gszou| | 2016-9-15 15:48 | 只看该作者
下载本单片机的书(当然要是51单片机的),翻到串口章节,就会有步骤一步一步教你怎样设置。我猜楼主只看视频,没看书。

使用特权

评论回复
7
gszou| | 2016-9-15 15:56 | 只看该作者
在论坛找找,找到下面的:
/*************************************************************
* @函 数:   Init_com
*
* @功 能:   串口初始化设置
* @入口参数:无
* @出口参数: 无
*/
void Init_com(void)
{
        TMOD = 0x20;        //定时器1设置为8位自动加载
        SCON = 0x50;        //串口方式1,允许接收
        TH1  = 0xFD;        //11.0592MHz 9600 波特率
        TL1  = 0xFD;        //初值
        TR1  = 1;                        //启动波特率发生器
}

使用特权

评论回复
8
ningling_21| | 2016-9-18 14:09 | 只看该作者
jpaekeo 发表于 2016-9-3 15:44
#include
#include
void delay15(unsigned char us);

用官网的例程试试

使用特权

评论回复
9
jpaekeo|  楼主 | 2016-9-24 13:28 | 只看该作者
ningling_21 发表于 2016-9-18 14:09
用官网的例程试试

官网例程是汇编语言的

使用特权

评论回复
10
jpaekeo|  楼主 | 2016-9-24 13:48 | 只看该作者
;-----Timer 2 做波特率发生器 -------------------------
;定义特殊功能寄存器
;与 RS232 口、TIMER2 有关的特殊功能寄存器
T2CON EQU 0C8H
TR2 EQU T2CON.2 ;TR2 是 T2CON 特殊功能寄存器的第 2 位
RCAP2L EQU 0CAH
RCAP2H EQU 0CBH
TH2 EQU 0CDH
TL2 EQU 0CCH
;------------------------------------------------
;设置波特率自动重装数
RELOAD_COUNT_HIGH EQU 0FFH
;使用以下参数必须将 RELOAD_COUNT_HIGH 设置为 0FFH
;RELOAD_COUNT_LOW EQU 0FAH ;Fosc = 22.1184MHz, Baud = 115200
;RELOAD_COUNT_LOW EQU 0EEH ;Fosc = 22.1184MHz, Baud = 38400
;RELOAD_COUNT_LOW EQU 0F0H ;Fosc = 20.000MHz, Baud = 38400
;RELOAD_COUNT_LOW EQU 0F6H ;Fosc = 12.000MHz, Baud = 38400
;RELOAD_COUNT_LOW EQU 0FDH ;Fosc = 11.059MHz, Baud = 115200
;RELOAD_COUNT_LOW EQU 0F7H ;Fosc = 11.059MHz, Baud = 38400
;RELOAD_COUNT_LOW EQU 0F8H ;Fosc = 10.000MHz, Baud = 38400
;RELOAD_COUNT_LOW EQU 0FBH ;Fosc = 6.000MHz, Baud = 38400
;RELOAD_COUNT_LOW EQU 0FCH ;Fosc = 5.000MHz, Baud = 38400
;RELOAD_COUNT_LOW EQU 070H ;Fosc = 11.059MHz, Baud = 2400
;--------------
;计算自动重装数:
;--------------
;晶体频率: Fosc
;波特率: Baud
;自动重装数: RELOAD = INT(Fosc/Baud/32 + 0.5), INT 表示取整运算(舍去小数)
;将自动重装数转换成 16 进制, 用 10000H 减自动重装数, 存入 RCAP2H, RCAP2L
;计算实际的波特率: Baud = Fosc/RELOAD/32, 如果误差>3.5 要更改波特率.
;例: Fosc = 22.1184MHz, Baud = 115200
; RELOAD = INT( 22118400/115200/32 + 0.5)
; = INT( 6.5 )
; = 6
; = 0006H
; 10000H - 0006H = FFFAH
;
; MOV RCAP2H, #0FFH
; MOV RCAP2L, #0FAH
;例: Fosc = 20.MHz, Baud = 57600 (Baud=115200 时误差太大)
; RELOAD = INT( 20000000/57600/32 + 0.5)
; = INT( 10.85 + 0.5 )
; = INT( 11.35 )
; = 11
; = 000BH
; 10000H - 000BH = FFF5H
;
; MOV RCAP2H, #0FFH
; MOV RCAP2L, #0F5H
;--------------------------------------------
ORG 0000H
AJMP MAIN
;--------------------------------------------
ORG 0023H ;RS232 串口中断
AJMP UART
NOP
NOP
;--------------------------------------------
MAIN:
MOV SP, #0E0H
ACALL Initial_UART ;初始化串口
MOV R0, #30H ;发送 10 个字符 ‘0123456789'
MOV R2, #10
LOOP:
MOV A, R0
ACALL Send_One_Byte ;发送一个字节
INC R0
DJNZ R2, LOOP
WAIT1:
SJMP WAIT1 ;跳转到本行, 无限循环
;------------------------------------------------
UART: ;串口中断服务程序
JBC RI, UART_1
RETI ;发送时使用的是查询方式,不使用中断
UART_1: ;接收一个字节. 此时 RI 已被清0
PUSH ACC
MOV A, SBUF ;取接收到的字节
ACALL Send_One_Byte ;回发收到的字节
POP ACC
RETI
;------------------------------------------------
Initial_UART: ;初始化串口
; Bit: 7 6 5 4 3 2 1 0
; SCON SM0/FE SM1 SM2 REN TB8 RB8 Tl Rl
MOV SCON, #50H ; 0101,0000 8 位可变波特率, 无奇偶校验
Init_RS232_1:
MOV A, #RELOAD_COUNT_HIGH ;波特率自动重装数
MOV RCAP2H, A
TH2, A
MOV A, #RELOAD_COUNT_LOW
MOV RCAP2L, A
MOV TL2, A
MOV T2CON, #0x34 ;使用 T2 作波特率发生器
SETB ES ;允许串口中断
SETB EA ;开总中断
RET
;------------------------------------------------
Send_One_Byte: ;发送一个字节
CLR ES
CLR TI ;清零串口发送中断标志
MOV SBUF, A
WAIT2:
JNB TI, WAIT2 ;等待发送完毕
CLR TI ;清零串口发送中断标志
SETB ES
RET
;------------------------------------------------
END

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

58

帖子

0

粉丝