假定51单片机(AT89C55WD)的工作时钟为24MHz,请将该器件配置成如下工作状态:1. 串口:波特率4800bps

1位起始,8位数据,1位停止。2. 外部中断0:下降沿触发。3. 采用定时器完成1个20毫秒的定时器,定时时间到将MCU的A口和B数据读入到变量a1和a2内。4. 用串口完成指令"0xF0, xx, 0x1F,xx, xx, xx, xx, XOR, 0x5F"的接收功能。注:xx表示该字节任意,XOR为2--6字节的异或
   校验和。指令正确时接收,错误时直接丢弃。
要求:写出MCU的硬件初始化代码;      完成定时器中断函数编写。      完成串口指令接收中断函数编写 求解答 高手们.....请赐教

难道是不难,就是麻烦点,要去仔细看AT89C55WD的PDF文档,
1、串口的设置需要用到这几个寄存器
SCON=0x50; //串行方式1 REN=1;
PCON=0; //;波特率不加倍
T2CON=0x34; //定时器T2用于产生串口发送和接收的波特率。TR2=1;
ET2=1; //开T2中断
PS=1; //串口中断优先级设置为高
RCAP2H=0XFF;RCAP2L=0X70;TH2=0XFF;TL2=0X70;//配置波特率
当然这个波特率我们算 这个是22.1184M时候的4800;你可以照着PDF文档上的公式算一下24M时是多少;
2,外部中断下降沿触发:EX0=1;IT0=1;
3,20毫秒定时
void isr_Time0()interrupt 1
{
TR0=0;
TH0=0X8A; //20毫秒
TL0=0XD0;
a1=P1;
a2=P2;
TR0=1;
}
4、串口接收
void isr_com()interrupt 4
{
if(RI)
{
RI=0;
if(SBUF==0xf0)
{RE_flag=1;point1=0;}//开始接收一个包
if(RE_flag)
{
buffer[point1]=SBUF;
point1++;
if(point1>=9) //接收到9个字节
{
point1=0;
RE_flag=0;//接收完一个包,停止接收
Uart1_RecFlag=1;
ES=0;
}
}
}
}
检测Uart1_RecFlag标志为1后对接收寄存器进行异或校验,正确 采纳数据执行相应程序 不正确复位Uart1_RecFlag对数据不与理睬就行;置位ES=1;

写的太详细就得编辑整个程序了,只是点了几个关键点 ,希望能对你有所帮助。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-08-10
51单片机(AT89C55WD)的工作时钟为24MHz,请将该器件配置成如下工作状态:

1. 串口:波特率4800bps 1位起始,8位数据,1位停止。
2. 外部中断0:下降沿触发。
3. 采用定时器完成1个20毫秒的定时器,定时时间到将MCU的A口和B数据读入到变量a1和a2内。
4. 用串口完成指令"0xF0, xx, 0x1F,xx, xx, xx, xx, XOR, 0x5F"的接收功能。

注:xx表示该字节任意,XOR为2--6字节的异或校验和。指令正确时接收,错误时直接丢弃。

要求:写出MCU的硬件初始化代码;
完成定时器中断函数编写。
完成串口指令接收中断函数编写
--------
A口和B数据?追问

A是地址 B是数据

第2个回答  2011-08-04
有偿代谢。
第3个回答  2011-08-04
完全看不懂。 你太牛逼了!
第4个回答  2011-08-04
告诉我你邮箱,我写给你追问

[email protected]
QQQ

相似回答