C8051F0系列解密
C8051F000、C8051F001、C8051F002、C8051F005、C8051F006、C8051F007、C8051F010、C8051F011、C8051F012、C8051F015、C8051F016、C8051F017、C8051F018、C8051F019、C8051F020、C8051F021、C8051F022、C8051F023、C8051F040、C8051F041、C8051F042、C8051F043、C8051F044、C8051F045、C8051F046、C8051F046、C8051F060、C8051F061、C8051F062、C8051F063、C8051F064、C8051F065、C8051F066、C8051F067
C8051F1系列解密
C8051F120、C8051F121、C8051F122、C8051F123、C8051F124、C8051F125、C8051F126、C8051F127、C8051F130、C8051F131、C8051F132、C8051F133
方法:
0=0X40;//使能串口0 分配到IO口P0.0 P0.1XBR1=0;
XBR2=0X44;//使能XBR交叉开关IO控制器 使能串口1并绑定到IO口上
这里串口0 TX,RX优先级最高:P0.0,P0.1
之后仅使能了串口1那么串口1 TX,RX分配在P0.2,P0.3
P1DOUT=0xff;//选择IO口推挽输出
2.内部晶振配置(本程序中使用的是内部晶振)
SFRPAGE=CONFIG_PAGE;
//使用内部晶振
OSCICN=0x83;
//while(!OSCICN&0x40);//等待晶振稳定
CLKSEL=0x00;//输出时钟不分频 时钟源来自内部振荡器
CKCON=0x18;//TIM0=SYSCLK TIM1=SYSCLK
3.串口0的配置
void usart0_init()//接收数据的串口 bps19200
{
SFRPAGE = UART0_PAGE; //0
SCON0=0x50;//方式1 允许接收
SSTA0=0x05;
SFRPAGE= TMR2_PAGE;
TMR2CF=0x8;
TMR2CN=0x8;
RCAP2L=0xB0;
RCAP2H=0xff;
TR2=1;
TI0=0;
RI0=0;
ES0=1;//开串口0中断
EA=1;
}
这里设置的波特率为19200 可以根据数据手册中的公式调整RCAP2L,RCAP2H来改变波特率,采用8位可变波特率方式
接收中断为:
void date_recv() interrupt 4//接收测试没得问题
{
uchar date;
static uchar dic=0;
static uchar header=0;
static uchar num=0;
SFRPAGE=UART0_PAGE;
if(RI0==1)
{
RI0=0;
date=SBUF0;//获取数据
}
}
代码中的数据处理被删去,可以自行在if语句中进行相应的帧头,帧尾等相关校验。
设置的打印函数:
void sendstring_stream1(uchar* date,uchar lenth)
{
uchar i;
SFRPAGE=UART0_PAGE;
for(i=0;i<lenth;i++)
{
SBUF0=date[i];
while(!TI0);//等待发送完成
TI0=0;//手动清零发送中断标志
}
}
包含两个参数,第一个参数是要发送的数据数组,第二个参数为数组的长度
4.串口1的相关配置
串口1只能工作在方式1,3
并且波特率只能由TIM1溢出产生
相关配置如下
void usart1_init()
{
SFRPAGE = UART1_PAGE; //1
SCON1=0x50;
SFRPAGE= TIMER01_PAGE;
TMOD=0x20;
TH1=0x96;
TL1=0x96;
TR1=1;
//EIE2=0x40;
}
这里设置波特率为9600,没有打开串口中断,若果需要打开则去掉注释处代码,串口1终端号为20
2.设置串口1打印函数
void sendstring_stream2(uchar* date,uchar lenth)
{
uchar i;
SFRPAGE=UART1_PAGE;
for(i=0;i<lenth;i++)
{
SBUF1=date[i];
while(!TI1);
TI1=0;
}
}
与串口0打印函数相同