首页 资讯 应用 高压 设计 行业 低压 电路图 关于

单片机

旗下栏目: PLC 嵌入式 单片机 DCS

P89V51RD2的中断优先级和串口波特率问题

单片机 | 发布时间:2018-11-01 | 人气: | #评论# | 本文关键字:串口,波特率,P89V51RD2,中断优先级,串口波特率
摘要:一、关于P89V51RD2的中断优先级 数据手册说,P89V51RD2有8个中断源,支持4级中断优先级,SPI与UART共用中断向量0x23. 中断优先级控制寄存器为IP0、IP0H、IP1、IP1H。IP0和IP0H的bit0到bit6依次对应的中断

一、关于P89V51RD2的中断优先级
数据手册说,P89V51RD2有8个中断源,支持4级中断优先级,SPI与UART共用中断向量0x23.
中断优先级控制寄存器为IP0、IP0H、IP1、IP1H。IP0和IP0H的bit0到bit6依次对应的中断源为External Interrupt 0、Timer0、External Interrupt1、Timer1、SerialPort(UART/SPI)、Timer2、PCA Interrupt;IP1和IP1H的bit4对应Brown-out interrupt。
数据手册并没有明确指明IP0和IP0H的配合与优先级的关系,猜测应该如下:
IP0H IP0 优先级
0 0 0,最低
0 1 1,
1 0 2,
1 1 3,最高

二、关于P89V51RD2的串口波特率设置
使用串口工作方式1,串口时钟来自于Timer1溢出中断,Timer1使用MODE2,自动重装。根据书上的说明计算公式应该如下:
如果PCON.SMOD=0,则:
TH1 = 256 – ((Crystal / 384) / Baud)
如果PCON.SMOD=1,则:
TH1 = 256 – ((Crystal / 192) / Baud)

而P89v51rd2数据手册中关于串口模式2波特率的说明如下:
The baud rate is programmable to either 1/16 or 1/32 of the CPU clock frequency, as determined by the SMOD1 bit in PCON.
手册中再也没有其他关于波特率的说明。

而实际编程时发现,晶振使用18.432MHz,设置PCON.SMOD1=0,TH1=251时,串口波特率为19200;而设置PCON.SMOD1=1,TH1=251时,串口波特率既不是19200也不是9600。

疑惑,按照上面的计算公式,应该是SMOD=1时波特率为19200,SMOD=0时波特率为9600才对啊?即便是P89v51rd2单片机本身特殊,在SMOD=0时波特率为19200,那大概猜测应该在SMOD=1时波特率为9600啊?
望用过P89V51RD2的朋友指点,谢谢!

初始化代码如下:
//————– 初始化定时器0 —————————-
TMOD |= 0x01; //定时器0,16位工作方式
TCON_bit.TR0 = 1; //启动定时器
IEN0_bit.ET0 = 1; //打开定时器0中断
IEN0_bit.EA = 1; //开总中断
//————– 初始化定时器1 ——————————
TMOD |= 0x20; //Timer1: MODE2,自动重装
TH1 = 0xFB; //波特率19200
TL1 = 0xFB;
//————– 初始化uart ———————————
PCON_bit.SMOD1 = 0;
SCON_bit.SM0_FE = 0; //uart mode 1: 8-bit UART variable
SCON_bit.SM1 = 1;
SCON_bit.REN = 1; //允许串口接收
TCON_bit.TR1 = 1; //启动定时器1
IEN0_bit.ES = 1; //打开uart接收中断
//————– 设置中断优先级 ——————————–
IP0_bit.PS = 1; //设置串口最高中断优先级
IP0H_bit.PSH = 1;
IP0_bit.PT0 = 0; //设置Timer0次高中断优先级
IP0H_bit.PT0H = 1;

责任编辑:P89V51RD2
首页 | 电气资讯 | 应用技术 | 高压电器 | 电气设计 | 行业应用 | 低压电器 | 电路图 | 关于我们 | 版权声明

Copyright 2017-2018 电气自动化网 版权所有 辽ICP备17010593号-1

电脑版 | 移动版 原创声明:本站大部分内容为原创,转载请注明电气自动化网转载;部分内容来源网络,如侵犯您的权益请发送邮件到[email protected]联系我们删除。