c8051f120串口1调试问题:

下面程序是把串口1收到的一个字节的数据显示在数码管上,程序下载之后木有反应,求大虾解答。
#include <c8051f120.h>
#include <intrins.h>
#include <absacc.h>
#include <stdlib.h> //标准函数
#include <stdio.h> //I/O口函数
#define _Nop() _nop_()
#define uchar unsigned char
#define uint unsigned int
#define BAUDRATE 9600
uchar code LEDSEG1[]= {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xc6,0X89};//0~9,C,H,正
uchar rxch1=0;
char SFRPAGE_SAVE;
//--------------------------------------------------------------------
// 全局常量
//--------------------------------------------------------------------
#define LEDCTL0Low P4&=~0x01;
#define LEDCTL0High P4|=0x01;
#define SYSCLK 22118400
//函数声明
void SYSCLK_Init (void);
void PORT_Init(void);
void UART1_Init(void);
void Delay(uint tt);
void display1();
// 主函数
void main (void)
{
WDTCN = 0xde;
WDTCN = 0xad; //关闭WDT
SYSCLK_Init ();
PORT_Init();
UART1_Init();
SFRPAGE = CONFIG_PAGE;
EA=1;
ES0=1;
EIE2|=0x40;

while(1){

}
}
// 系统时钟配置
void SYSCLK_Init (void)
{
int i = 0;
SFRPAGE = CONFIG_PAGE;
OSCXCN = 0x67;
for (i = 0; i < 3000; i++);
while ((OSCXCN & 0x80) == 0);
CLKSEL = 0x01;
OSCICN &= ~0x80;
}
// I/O配置
void PORT_Init()
{
SFRPAGE = CONFIG_PAGE;
XBR0 = 0x00;
XBR1 = 0x00;
XBR2 |= 0x44;// 交叉开关使能 允许串口1接出其引脚
P0MDOUT |= 0xE1;//使能TX0作为推挽输出
P4MDOUT=0xFF;
P5MDOUT=0xFF;
}
//-----------------------------------------------------------------------------
//串口初始化
//CONFIG_PAGE=0x0F;UART0_PAGE=0x00;TIMER01_PAGE=0x00;
//-----------------------------------------------------------------------------
void UART1_Init() //串口1
{
SFRPAGE = UART1_PAGE;
SCON1 = 0x10;
TMOD |= 0x20; // TMOD: timer 1, mode 2, 8-bit reload
CKCON |= 0x10; // Timer1 uses SYSCLK as time base
TH1 = -(SYSCLK/BAUDRATE/32); // set Timer1 reload value for baudrate
TR1 = 1; // start Timer1
TI1=1; // Indicate TX1 ready
}
void Delay( uint tt )
{
while( tt-- );
}

void display1()
{
SFRPAGE = CONFIG_PAGE;
P5=LEDSEG1[rxch1-48];
LEDCTL0Low;
}

//UART1中断服务程序. 接收字符
void UART1_ISR(void) interrupt 20 using 2
{
if(RI1) //中断标志 RI1=1 数据完整接收
{
rxch1 = SBUF1; //读缓冲
display1();
RI1 = 0;
}
}

第1个回答  2011-04-15
4B

C8051F系列的有的只有2K的XRAM有的有4K,就是“淡_水_河_边”说的,F340/2/4/6和F020等有4K XRAM,还有I2C和SPI。

你的要求是片内有4K的RAM,如果不是51单片机,有Atmega64系列和Atmega128系列的可供选择,这两种单片机片内RAM就有4K,有I2C和SPI。

有一种51单片机是用于ZigBee的,CC2430,51单片机核心,8K RAM。
另外,虚机团上产品团购,超级便宜
第2个回答  2011-04-09
你确定串口的中断号是20 ?追问

确定,这个应该没什么问题。

追答

试试这个:
//UART1中断服务程序. 接收字符
void UART1_ISR(void) interrupt 20 using 2
{
if(RI1) //中断标志 RI1=1 数据完整接收
{
RI1 = 0; /* 先清标志再读SBUF*/
rxch1 = SBUF1; //读缓冲
display1();
}
}

按资料里说明,在读取SBUF之前先清RI1;
After the stop bit is
received, the data byte will be loaded into the SBUF1 receive register if the following conditions are met:
RI1 must be logic 0, and if MCE1 is logic 1, the stop bit must be logic 1.

本回答被网友采纳
相似回答