||
最近看了一下c8051f330系列的单片机,主要是搞串口和AD转换部分.写了一个串口程序,程序代码如下:
#include<c8051f330.h>
#include<stdio.h>
typedef unsigned char uint8;
#define SYSTEMCLOCK 24500000
#define BAUDRATE 9600
/**************************************************
延时小程序。
**************************************************/
void delay(uint8 count)
{ uint8 i;
while(count--)
for(i=0;i<125;i++);
}
/****************************************************
波特率设置。
****************************************************/
void daud_set(void)//设置系统频率为245000000。
{
CLKSEL &=0Xfc; //系统时钟选择寄存器。采用内部高频振荡器。
// OSCICL=0X00; //无晶振补偿。
OSCICN |=0X83; //采用内部晶振。不分频。 //SSCISN|=0xc3;
RSTSRC |=0X04; //采用时钟丢失检测。
}
/*****************************************************
串口设置。
*****************************************************/
void uart0(void)
{
SCON0=0X10; //串口工作方式允许接受。8位数据传送。
TH1=0X96;
CKCON &=0XF4;
TMOD &=~0XF0;
TMOD |=0X20;//定时器采用1,工作方式为2,
TR1=1;
TI0=1;
//IP=0X10; //设置串口中断为高优先级。
// ES0=1; //串口中断使能。
}
void port_set(void)
{
P0MDOUT |= 0X10; //将发送位设置为推挽输出。
XBR0 = 0x01; //采用串口。
XBR1 = 0x40; //交叉开关使能。
}
/*****************************************************
主函数。
*****************************************************/
void main(void)
{
PCA0MD &=~0X40; //开门狗禁止。
daud_set(); //波特率设置。
port_set(); //P0口输入工作方式设置(采用推挽式)。
uart0();
EA=0;
while(1)
{
SBUF0=0X30;
while(TI0==0);
TI0=0;
delay(20);
}
}
总体来说,对于c8051f330系列的单片机来说,系统配置是相当的重要.第一步就是系统时钟的选择,端口的配置,交叉开关的配置,串口的配置,定时器的配置,等等,只要能够根据自己的需要来配置系统,就可以象写AT系列的51一样.所以,学习这种单片机的主要学习重点应该是放在学习各种寄存器的配置上,掌握了配置,就可以开始写一些基本的程序了!
这个串口程序的主要思路是采用的查询式的方式来对串口来进行写的过程,通过对TI0的查询,等到发送完一个数据,在去发下一个数据.
采用系统时钟为内部高频振荡(24.5M),串口0,定时器1的振荡频率采用的是系统时钟的12分频.